algorithm - 用于检查与原始文件的接近度的 Anagram 算法

标签 algorithm pseudocode

我正在尝试创建一种算法来测试字谜(由另一种算法根据原始单词创建)是否与原始单词太接近。上下文是一个变位词解决游戏 - 我希望游戏能够即时生成变位词(根据我放入游戏中的单词),但希望避免由于随机性与原始词留下相似之处而使它们太容易解决(例如,BATMAN 的变位词是 BTAMAN)。

我是一个业余爱好者,所以我想看看我的想法是否在正确的轨道上。我目前的计划是根据某些标准分配“分数”,然后将分数相加并检查是否达到某个阈值(意味着变位词与原始单词太相似,应该被丢弃)。

(注意:我已经尝试了一些第 3 方代码来检查两个字符串的相似性,但它们似乎对字符串长度和实际字符有很大的权重,这在我的字谜/原始单词对中是相同的)

我还想避免过多地玩弄变位词并造成错误的随机性(例如,永远不要让变位词的起始字母与原始单词相同)。

这是我的伪代码算法(我的游戏中的字谜范围从短词到两个或三个单词的字符串,例如电影标题):

Function IsAnagramTooSimilarToOriginalWord(original, anagram) as Boolean
count = 0
if (original word 1st letter) = (anagram 1st letter) then count +=1
if (original word last letter) = (anagram last letter) then count +=1
if (any 3-letter substring from original word exists in anagram) then count +2 for each occurence
if count >=5 then return True else return False

等等。我可以根据结果磨练具体检查。

我不是要任何代码...只是想知道以前是否有人做过类似的事情和/或我是否犯了任何算法菜鸟错误。还是我想多了?

我通过一个简单的算法自己创建变位词,从字符串中随机提取一个字符,并将其添加到一个新字符串中,直到原始字符串中没有任何字符为止。新算法将用于检查结果并(如果需要)重做字谜。

最佳答案

权重/分数系统应该更加详细。

  • 首先,你应该给第一个和最后一个字母更多的权重,因为如果只有它们在这个地方,而其他字母混合在一起,母语读者(除了初学者或 child )通常甚至不会请注意。 Hvae you ntioecd taht?
  • 您应该为所有字母组合赋予相同的权重。更频繁的应该有更大的权重。而且你必须重视严格的字母组合。例如,在英语中,如果 ch, sh, tch, ck 的组合被破坏,单词就会变得更难识别。如果 anagram 打破了它们,那很好。
  • 如果出现新的频繁字母组合,也很好。
  • 如果字谜替换通常发音相近的字母,那就不好了。
  • 如果变位词将字母重新组合,使一个字母听起来不同,如 sic->cis 中的“c”,这很好。
  • 如果字谜看起来和听起来像一个普通单词(它使用该语言的频繁字母组合,越长越好),它是一个很好的字谜,原因有两个 - 更难解决,而且它很好。
  • 点数之和要根据单词的长度重新计算——越长越容易做难图。

并做好准备 - 所有配重系统都必须经过严格测试。我建议制作一个测试程序,为解决方案提出变位词,并将花费的时间与评估进行比较,从而评估重量系统的质量。如果它可以单独评估加权原则,那就更好了。

当然,经过这样的测试你可以找到更多的原则。顺便说一句,它是心理学博士论文的良好基础。

关于algorithm - 用于检查与原始文件的接近度的 Anagram 算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21228415/

相关文章:

algorithm - 寻找偏序集子集的最大元素

algorithm - 如何将遗传算法与一些启发式算法混合

algorithm - 从两个数组中区分额外的元素?

python - 理解Python实现的伪代码

tdd - 伪代码编程过程与测试驱动开发

python - 优化 Python 中的函数以处理大块数据

java - Java 中的快速排序算法排序不正确(第一个元素作为枢轴)

algorithm - 如何最大化嵌套容器?

找出一组身份元素的算法?

algorithm - 写出代码仍然被认为是一种算法表示吗?