匹配字典中单词的JavaScript算法

匹配字典中单词的JavaScript算法,javascript,algorithm,full-text-search,anagram,Javascript,Algorithm,Full Text Search,Anagram,我有一个包含几千个单词的数组。我的网页上有一个输入字段,允许用户输入几个字母,然后点击搜索。当用户点击search时,应用程序应该查看字典,看看所提供的字母可以组成什么单词。每个字母只能使用一次(就像拼字游戏一样) 已经有这样的搜索库了吗?如果没有必要,我不想重新发明轮子。如果没有,是否有人有高性能解决方案的想法。我想这已经做了数百万次了。jQuery fame的John Resig也在考虑这个问题: 您需要做的是转换哈希表中的单词数组,其中关键字是每个单词的字母排序。例: ['car', 's

我有一个包含几千个单词的数组。我的网页上有一个输入字段,允许用户输入几个字母,然后点击搜索。当用户点击search时,应用程序应该查看字典,看看所提供的字母可以组成什么单词。每个字母只能使用一次(就像拼字游戏一样)


已经有这样的搜索库了吗?如果没有必要,我不想重新发明轮子。如果没有,是否有人有高性能解决方案的想法。我想这已经做了数百万次了。

jQuery fame的John Resig也在考虑这个问题:


您需要做的是转换哈希表中的单词数组,其中关键字是每个单词的字母排序。例:

['car', 'shoe', 'train']
=> {'acr': ['car'],
     'ehos': ['shoe'],
     'ainrt': ['train']}

然后获取用户的字母,对它们进行排序,然后使用排序后的字母作为键进行哈希表查找(任何dictionary impl都会这样做,但在本例中哈希表最有效)。与键对应的列表是您可以使用这些字母执行的单词列表。它的优点是时间复杂度为O(n)=1。

Steve Hanov也写了一些关于这一点的文章:


我非常喜欢这种方法,但是你有什么建议可以告诉我什么时候你也可以使用提供的字母子集吗?例如,字母“c”、“a”、“r”和“s”可能拼写为“car”和“cars”。然后,您可能需要尝试:,尽管我不确定这是否在任何js库中实现