【发布时间】:2016-09-11 14:27:14
【问题描述】:
我试图解决以下链接 http://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-006-introduction-to-algorithms-fall-2011/assignments/MIT6_006F11_ps3_sol.pdf 中给出的大输入大小的问题 3-1。该解决方案使用 AVL 树进行范围查询,这让我开始思考。
当输入大小从一百万增加到十亿甚至更多时,我想知道可扩展性问题。例如考虑一个整数流(大小:4 字节)和大小为 10 亿的输入,在内存中存储整数所需的空间约为 3GB!当您考虑其他数据类型(例如浮点数和字符串)时,问题会变得更糟,而输入大小是正在考虑的数量级。
因此,我得出的结论是,我需要辅助存储来存储所有这些数字和指向 AVL 树的子节点的指针。我正在考虑将左右子节点存储为单独的文件,但后来我意识到这将是太多的文件,并且打开和关闭文件将需要昂贵的系统调用和耗时的磁盘访问,因此此时我意识到 AVL 树行不通。
接下来我想到了 B-Tree 及其提供的优势,因为每个节点可以有“n”个子节点,从而减少磁盘上的文件数量,同时在每个级别打包更多键。我正在考虑为节点创建单独的文件,并在生成文件时将密钥插入文件中。
1) 我想问一下我的方法和思维过程是否正确,并且
2)我是否使用了正确的数据结构,如果 B-Trees 是正确的数据结构,那么应该如何使应用程序高效?什么样的 B 树会产生最大的效率。对不起,很长的帖子!提前感谢您的回复!
【问题讨论】:
标签: algorithm data-structures tree b-tree