这就是您如何生成Trie 结构并在您的网站上使用它而不使用Java,只需使用JavaScript。具有两种方法的简单Trie 结构:insert 和search 在JS 中可能如下所示:
function Trie() {
this.root = new TrieNode();
this.insert = function(key) {
let length = key.length, next = this.root;
for (let level = 0; level < length; level++) {
let character = key.charAt(level);
if (next.children[character] == null) {
next.children[character] = new TrieNode();
}
next = next.children[character];
}
next.endOfWord = true;
}
this.search = function(key) {
let length = key.length, next = this.root;
for (let level = 0; level < length; level++) {
let character = key.charAt(level);
if (next && next.children[character]) {
next = next.children[character];
continue;
}
return false;
}
return next && next.endOfWord;
}
}
function TrieNode() {
this.children = {};
this.endOfWord = false;
}
使用上面的简单实现,您可以创建Trie 实例并插入您想要的所有单词:
const trie = new Trie();
trie.insert("hello");
trie.insert("hi");
trie.insert("help");
trie.insert("helpful");
... more words
例如,使用Node.js,您可以:
- 从源文件中读取所有需要的单词。
- 对于每个单词,使用
insert 方法将其插入trie 结构中。
- 从对象生成
JSON:JSON.stringify(trie)。
- 将其保存到一个文件:
trie.js,以后可以在您的页面上使用。
上述单词的结果 js 文件应如下所示:
{
"root":{
"children":{
"h":{
"children":{
"e":{
"children":{
"l":{
"children":{
"l":{
"children":{
"o":{
"children":{
},
"endOfWord":true
}
},
"endOfWord":false
},
"p":{
"children":{
"f":{
"children":{
"u":{
"children":{
"l":{
"children":{
},
"endOfWord":true
}
},
"endOfWord":false
}
},
"endOfWord":false
}
},
"endOfWord":true
}
},
"endOfWord":false
}
},
"endOfWord":false
},
"i":{
"children":{
},
"endOfWord":true
}
},
"endOfWord":false
}
},
"endOfWord":false
}
}
要生成有效的JS 文件,您需要在开头添加代码:const RAW_TRIE = 字符串,因此我们的文件如下所示:
const RAW_TRIE = {
"root":{
"children":{
"h":{
...
您创建了一个原始的 Trie 对象,您可以通过将此行添加到您的 HTML 或模板文件中来将其包含到您的页面中:
<script src="www.your-domain.com/path/to/static/file/trie.js"></script>
由于加载了这个文件,您应该可以访问RAW_TRIE 对象。您可以将prototype 设置为Trie 并使用搜索方法:
const TRIE = Object.setPrototypeOf(RAW_TRIE, new Trie());
console.log("hello exists: " + TRIE.search("hello"));
console.log("hello1 does not exist: " + TRIE.search("hello1"));
这种方法允许您在服务器端创建包含您需要的所有单词的文件,客户端可以下载并用作常规静态文件。
注意:上述解决方案是唯一一种方法,可以改进或更改部分(或全部)步骤。这不是最终版本
无需对生产进行任何更改即可使用。你可以尝试
优化它并通过更改使trie.js文件尽可能小
TrieNode 功能甚至删除它。