这是我关于堆栈溢出的第一个问题。一些快速的背景,这不是一个学校项目,只是为了娱乐,练习和学习。我正在尝试用C语言编写一个拼写检查器。我遇到的问题是想出一些可能的单词来替换拼写错误的单词。
我还应该指出,在我的课程中,我们还没有达到更高级的编程概念,如时间复杂度或算法开发。我之所以这么说,是因为我有一种感觉,我正在询问的概念有名称,我还没有听说过它们。
在其他类似的帖子中,大多数人建议使用levenshtein距离或穿越patricia树;比较子串会是一个问题吗?我提出的(非常低效)算法是:
将第一个N
字符(其中N = length of the misspelled word - 1
)与字典单词(它们将从系统文件读取到动态分配的数组中)进行比较
如果拼写错误的单词中的N
个字符与字典中的单词匹配,请将其添加到建议列表中;如果找不到更多匹配项,则递减N
继续,直到找到10条建议或N = 0
感觉笨拙和笨拙,但这就是我们的教科书建议如何接近这一点。我已经阅读了关于遍历树木和计算各种有趣事物的维基文章的效率和准确性,但是在这一点上它们已经超出我的想象。感谢任何帮助,并感谢您花时间阅读本文。
答案 0 :(得分:3)
现代计算机速度快,速度非常快。您可以使用您描述的算法对此进行编码,并查看它在您的机器上使用字典的效果。如果它的效果令人满意,那就太好了!否则,您可以尝试通过选择更好的算法来优化它。
您阅读的所有精彩算法都有以下一个或两个目标:
但是,如果您严重关注性能,这一点非常重要。编写自己的代码来执行此操作没有任何问题。它可能不是很好,但你会学到很多东西,而不仅仅是跳入并实现一个你还不了解的算法。