我创建了一系列的排序来存储英语词典中的所有单词(不是定义)。关键在于我可以获得仅包含给定范围内的字母的所有单词。
包含所有单词的文本文件大约为2.7 mb,但在创建树并使用pickle将其写入文件后,文件大于33 mb。
这种尺寸差异来自哪里?我以为我会节省空间,因为不需要为不同的单词存储相同字母的多个副本,例如单词app和apple我只需要5个节点,对于a - > p - > p - > l - >即
我的代码如下:
var data = {
"level1": {
"level2": [{
"product1": [
"item1",
"item2"
]
}, {
"product2": [
"item1",
"item2"
]
}, {
"product3": [
"item5",
"item6"
]
}]
}
};
var map = new Map();
data.level1.level2.forEach(function(entry) {
Object.keys(entry).forEach(function(key) {
map.set(key, entry);
});
});
var name = "product2";
console.log(map.get(name));
答案 0 :(得分:5)
trie的节点很大,因为它们存储了所有可能的下一个字母的链接。正如您在代码中看到的,每个节点都包含26个链接(子节点)的列表。
更复杂的方案是可能的(https://en.wikipedia.org/wiki/Trie#Compressing_tries),代价是更复杂,速度更慢。