寻找里面的单词

时间:2016-05-17 13:36:22

标签: javascript trie

我正在寻找更好的自动完成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,最好的方法是什么?我脑子里唯一想到的就是暴力循环,它实际上是无效和缓慢的。还有比蛮力更有效的方法吗?

1 个答案:

答案 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']