1
我一直在尋找更好的自動完成alghoritm,我發現了關於trie。 我已經實現了基本線索在trie中查找word
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,怎麼做最好的方法是什麼?我想到的唯一的東西就是蠻力循環,這真的是無效和緩慢。有沒有比蠻力更有效的方法?
發生什麼事,如果** **他是你的線索詞。我建議使用自己的屬性,比如'isword'和值'true'。迭代我會去蠻力,因爲JavaScript是足夠快的散列表。 –
也許你看看http://stackoverflow.com/a/32781195/1447675 –