【发布时间】:2016-05-17 13:36:22
【问题描述】:
我一直在寻找更好的自动完成算法,但我发现了 trie。 我已经实现了基本的 trie
var trie = {};
for( var i = 0 ; i < words.length ; i++){
var tmp_word = words[i];
var tmp_arr = tmp_word.split("");
var current = trie;
for( var j = 0; j < tmp_arr.length; j++){
var letter = tmp_arr[j];
var pos = current [ letter ];
if( pos == null ){
current [ letter ] = j === tmp_arr.length - 1 ? 0 : {};
current =current [ letter ];
}
else if ( pos === 0 ) {
current [ letter ] = { $: 0 };
current =current [ letter ]
}
else{
current = current [ letter ];
}
}
}
它将从数组中获取单词并从每个字母中创建键。 例如如果数组是
var words = [ "Hello" , "world" ,"Helis" ]
它会创建这个
{
"H": {
"e": {
"l": {
"l": {
"o": 0
},
"i": {
"o": {
"s": 0
}
}
}
}
},
"w": {
"o": {
"r": {
"l": {
"d": 0
}
}
}
}
}
我正在努力寻找一个词来完成。例如,如果我输入“He”,它应该返回 Hello 和 Helios,最好的方法是什么?唯一进入我脑海的是蛮力循环,这将是非常无效和缓慢的。还有比蛮力更有效的方法吗?
【问题讨论】:
-
如果 he 是您尝试中的一个词,会发生什么。我建议为此使用自己的属性,例如
isword和值true。对于迭代,我会选择蛮力,因为 javascript 对于哈希表来说足够快。
标签: javascript trie