尺寸的差异来自哪里?

时间:2016-05-26 06:36:43

标签: python algorithm data-structures

我创建了一系列的排序来存储英语词典中的所有单词(不是定义)。关键在于我可以获得仅包含给定范围内的字母的所有单词。

包含所有单词的文本文件大约为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));

1 个答案:

答案 0 :(得分:5)

trie的节点很大,因为它们存储了所有可能的下一个字母的链接。正如您在代码中看到的,每个节点都包含26个链接(子节点)的列表。

更复杂的方案是可能的(https://en.wikipedia.org/wiki/Trie#Compressing_tries),代价是更复杂,速度更慢。