Java 存储二进制路径的最有效方式(例如,通过二叉树)
我试图尽可能高效地存储二进制路径(就使用尽可能少的内存而言)。 例如,指向链接二叉树中特定节点的路径(从根开始)——存储该路径的简单方法是存储节点(或其值)本身 但这既不高效,也不优雅。如果我想在不同的二进制树上应用相同的路径,这是行不通的 因此,您可以只保存一个序列,例如一个字符串,如Java 存储二进制路径的最有效方式(例如,通过二叉树),java,performance,types,tree,binary,Java,Performance,Types,Tree,Binary,我试图尽可能高效地存储二进制路径(就使用尽可能少的内存而言)。 例如,指向链接二叉树中特定节点的路径(从根开始)——存储该路径的简单方法是存储节点(或其值)本身 但这既不高效,也不优雅。如果我想在不同的二进制树上应用相同的路径,这是行不通的 因此,您可以只保存一个序列,例如一个字符串,如“lrlrrr”,其中l表示左分支,r表示右分支。但是将这些信息存储在字符串中仍然不是很有效 这可以通过使用布尔数组来改进。但我不知道Java在后台是如何处理这些问题的。另外,我希望避免固定大小的字符串/数组 我
“lrlrrr”
,其中l
表示左分支,r
表示右分支。但是将这些信息存储在字符串中仍然不是很有效
这可以通过使用布尔数组来改进。但我不知道Java在后台是如何处理这些问题的。另外,我希望避免固定大小的字符串/数组
我的下一个想法是直接将路径存储在二进制整数中,如0100111
(从左到右读取)。
然后,您可以使用
添加“向左移动”,您可以使用单个整数表示路径。这棵树的大小增加了1、2、4、8等
还请注意,当谈到“最小”时,请记住内存块大小限制,并且还要注意,二叉树可能会比路径表示大得多
0
1 2
3 4 5 6
摘自@realpointic的评论:
BitSet
对我来说很好。那么BitSet
呢?最小的存储单元是一个字节,所以在树中,您需要将每个位存储在一个字节中。假设这就是你所说的。如果您只想存储任意长度的位,我建议您签出<代码>位集
这似乎就是我要找的。谢谢非常感谢你的回答。我已经遇到了这个解决方案,我可能会使用它。请记住内存块大小限制是正确的,特别是在JVM上运行时。