CS中的很多数据结构都是二进制的(BST,堆等)。以非二进制形式实现它们的理由是什么? IE浏览器。有3个孩子对于每个节点等什么时候非二进制数据结构比二进制数据结构更好? (即堆,BST等)
3
A
回答
2
树木与每个节点多于两个孩子的折衷堆,因为他们将在每个节点更多的链接为代价具有浅的深度。通常用于数据库和文件系统的B-tree是每个节点具有多个链接的树结构的典型示例。这种结构与文件系统非常吻合,因为可以调整B树节点的大小以与文件系统块或群集的大小紧密匹配。
1
二叉树有比较大的空间开销。例如,在实施一系列二叉搜索树的节点包含四个字段,key
,left
和right
。由于key
是你唯一真正感兴趣和left
和right
指针只是簿记数据结构,这是2/3的开销。
相比之下,三元搜索树节点将有五个领域:key1
和key2
,加上指针left
,middle
和right
。这只是3/5的开销,并且对于更大的节点,开销的相对量进一步减少。当然,在某些时候,结构会变得太大而无法管理,所以您可以从更大的节点中挤出的性能数量受到限制;该限制取决于应用程序。 (我甚至没有考虑内存分配引起的开销,随着节点变大,这也会下降。还有其他的原因是有更大的节点,例如2-3 tree比二叉搜索树有更好的渐近复杂性。)
1
当操作是二进制的,你会使用二进制数据结构。当操作是三元时,您可以使用三元数据结构。二进制数据结构常见的一个原因是大多数操作是二进制的。对于例如如果你想比较4个元素,你一次可以比较2个元素。这与+,-,*,/
一样。以TreeSet或TreeMap为例,它是一棵红黑树。您提供了一个比较器,然后执行:
这是比较2个参数的二进制操作。
相关问题
- 1. 二进制plist结构
- 2. 转换数据结构的二进制数据
- 3. 构建结构化二进制数据解析器的框架?
- 4. 读/写二进制数据结构时访问位域
- 5. 使用xml指定数据结构的二进制解码器
- 6. 在Spark结构化流中处理二进制数据
- 7. 在Python中读取结构二进制数据?
- 8. 通过二叉树结构实现的二进制堆
- 9. 哪种数据结构适合临时大二进制数据存储?
- 10. 读取二进制数据转换成AC#结构
- 11. 将“结构”数据存储到二进制文件
- 12. 将结构数据写入二进制文件
- 13. 加载二进制数据到一个结构
- 14. 将二进制数据(来自文件)读入结构
- 15. PHP从结构的二进制文件提取数据
- 16. 如何在结构中存储二进制文件数据?
- 17. 二进制文件的结构?
- 18. 二进制数据
- 19. 二进制数据
- 20. 二郎数据结构
- 21. 二进制文件和写入结构
- 22. 在R读取二进制结构
- 23. C++二进制文件读入结构
- 24. 用ifstream读取二进制结构read()
- 25. 读\写结构化二进制文件
- 26. 二进制结构删除错误
- 27. C++结构二进制文件
- 28. 什么时候是链表最好的数据结构使用
- 29. 什么是二进制数据?
- 30. 二进制空间对甜甜圈二维空间的分区数据结构
的可能重复[当选择RB树,B树或AVL树?(http://stackoverflow.com/questions/1589556/when-to-choose-rb-tree-b-tree-or- avl-tree) – 2012-07-15 22:56:22
@ BlueRaja-DannyPflughoeft真的不是。该问题询问具体的树数据结构;这是一个更普遍的问题。 – 2012-07-20 07:12:08