【问题标题】:Finding word inside trie在 trie 中查找单词
【发布时间】: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


【解决方案1】:

你可以试试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']

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多