我正在寻找更好的自动完成alghoritm,我发现了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
}
}
}
}
}
我正在努力寻找一个词来完成。例如,如果我输入“他”,它应该返回Hello和Helios,最好的方法是什么?我脑子里唯一想到的就是暴力循环,它实际上是无效和缓慢的。还有比蛮力更有效的方法吗?
答案 0 :(得分:0)
您可以尝试https://github.com/pujansrt/trie-js
var trie = new Trie();
trie.insert('ant');
trie.insert('and');
trie.insert('antique');
console.log(trie.autoComplete('ant')); //['ant','antique']