我必须建立一个"文本校正器"在C ++中。这意味着教师将使用随机的英语" .txt"文件并使用我们的程序来检测和纠正错误。为此,我们提供了一个类似... 350k不同单词的英语词典。每个单词占一行。如果word.txt中存在单词,我们必须检查他的.txt文件中的每个单词。
现在......主要的问题是如何使用字典。由于单词的长度不同,我无法使用表格加载它们,然后在需要查找单词时在表格中进行二进制搜索。
我希望有一种方法可以简单地在文件中移动。这里的大多数答案都说"循环"在文件周围,但这不是一种可能性,因为我们在执行速度上进行评估,文件有350k字。几千次循环约350k字以纠正文件将是很长的路。
知道文件的长度,我不能说"转到文件中间,比较单词,移动到文件的四分之一(或三)等等#34;?因为我有文件,我知道确切的大小...就像一个"去排除这个"或者"转到这个角色" - 从那里我可以简单地向后或向前移动几个字符以获得完整的字......
答案 0 :(得分:2)
我相信你的问题需要一个基数树。 https://en.wikipedia.org/wiki/Radix_tree
当涉及到这类问题时,它允许您比地图更有效地创建,存储和搜索单词词典。
比较时,当你看到字母“c”,“o”,“r”时,你可以探索每个分支并看到它可能与“核心”,“正确”或“公司”相匹配,例如
如果您查看HackerRank等在线算法练习网站,或者已经接受过亚马逊或微软的采访,那么这个问题就会出现。