我刚刚了解到,紧凑型trie通过存储3个整数作为对字符串对象的引用,而不是在每个节点中实际存储字符串,与常规的trie相比可以节省更多的内存。但是,我仍然对使用该方法实际上如何节省内存感到困惑。
如果在紧凑的特里节点中,我们存储3个整数和对String对象的引用,那么如果该String对象也存储在内存中,那将根本不会节省任何内存吗?
如果是这种情况,那么紧凑的树形结构只有在将String对象存储在磁盘上时才有用。
答案 0 :(得分:0)
如果已经为其他目的存储了字符串,则压缩的特里的紧凑存储可以更节省空间。
如果还计算字符串的存储量,紧凑型和非紧凑型版本将具有相似的内存使用量。精简版甚至可能更糟,具体取决于整数和指针需要多少字节。
对于非紧凑的压缩特里:
每个节点都有一个字符串,该字符串需要一个指针(比方说4个字节)和一个长度(2个字节)。这给了我们6个字节。
最重要的是,我们需要存储实际的字符串(即使我们已经将它们存储在其他位置)。
对于紧凑的压缩特里:
对于未压缩的特里:(也就是说,每个节点仅存储一个字符)