紧凑的Trie如何带来好处?

时间:2018-10-12 08:51:24

标签: memory-management data-structures trie

我刚刚了解到,紧凑型trie通过存储3个整数作为对字符串对象的引用,而不是在每个节点中实际存储字符串,与常规的trie相比可以节省更多的内存。但是,我仍然对使用该方法实际上如何节省内存感到困惑。

如果在紧凑的特里节点中,我们存储3个整数和对String对象的引用,那么如果该String对象也存储在内存中,那将根本不会节省任何内存吗?

如果是这种情况,那么紧凑的树形结构只有在将String对象存储在磁盘上时才有用。

1 个答案:

答案 0 :(得分:0)

如果已经为其他目的存储了字符串,则压缩的特里的紧凑存储可以更节省空间。

如果还计算字符串的存储量,紧凑型和非紧凑型版本将具有相似的内存使用量。精简版甚至可能更糟,具体取决于整数和指针需要多少字节。

对于非紧凑的压缩特里:

  • 每个节点都有一个字符串,该字符串需要一个指针(比方说4个字节)和一个长度(2个字节)。这给了我们6个字节。

  • 最重要的是,我们需要存储实际的字符串(即使我们已经将它们存储在其他位置)。

对于紧凑的压缩特里:

  • 每个节点将具有3个整数(每个2个字节)。这给了我们6个字节。
  • 如果我们还要计算存储字符串,那么除了这些字符串的开销(指针和长度)之外,我们还有实际的字符串(与上面的字符串相同)。
  • 鉴于这些数字(如果我们要存储字符串的话),这个版本会更糟。

对于未压缩的特里:(也就是说,每个节点仅存储一个字符)

  • 每个节点直接存储其一个字符。
  • 没有字符串开销。
  • 但是,如果链长,则可以使用这种表示法增加节点,因此最终可能节省时间和空间(尤其是考虑到必须在内存中的多个位置之间跳转所花费的时间成本)只是能够读取一个连续的内存块。