- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我在维基百科上读到的:
In B-trees, internal (non-leaf) nodes can have a variable number of child nodes within some pre-defined range. When data is inserted or removed from a node, its number of child nodes changes. In order to maintain the pre-defined range, internal nodes may be joined or split. Because a range of child nodes is permitted, B-trees do not need re-balancing as frequently as other self-balancing search trees, but may waste some space, since nodes are not entirely full.
我们必须为 B 树指定这个范围。即使当我查找 CLRS(算法简介)时,它似乎也使用数组作为键和子项。我的问题是——有没有办法通过将键和子项定义为列表而不是预先确定的数组来减少这种空间浪费?这是不是太麻烦了?
此外,对于我来说,我无法在 btreeDeleteNode 上获得像样的伪代码。在此也感谢您的任何帮助。
最佳答案
当你说“列表”时,你指的是链表吗?
某种元素的数组在每个插槽中占用一个元素的内存,无论该插槽是否已填满。链表只为它实际包含的元素占用内存,但对于每个元素,它占用一个元素的内存,加上一个指针的大小(如果它是双向链表,则为两个,除非你可以使用 xor 技巧来重叠它们)。
如果您正在存储指针,并使用单向链表,那么每个链表链接的大小是每个数组槽的两倍。这意味着除非列表少于一半,否则链表将使用更多内存,而不是更少。
如果您使用的语言的运行时具有针对每个对象的开销(如 Java 和 C,除非您自己处理内存分配),那么您还必须为每个列表链接支付该开销,但仅一旦在阵列上,比例就更差了。
我建议您的平衡算法应使树节点至少保持半满。如果在节点已满时将其拆分,则会创建两个半满节点。然后,当相邻节点未满一半时,您需要合并它们。然后您可以使用数组,因为它比链表更有效。
不知道删除的细节,抱歉!
关于algorithm - BTree-预定大小?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7777130/
我的数学需要一点帮助,这几天我的大脑很痛。 我为许多 btree 的不同大小的节点使用了一个池。如果 btrees 对于大树和小树的每个节点的键平均数量往往相同,那么效果会很好。但是,如果分布不同,我
任何人都可以帮助消除此段错误。我已经在这个代码上工作了一个星期仍然无法调试它。这段代码是Btree的实现。插入部分工作正常,但删除部分出现段错误。我无法调试它,有人可以帮忙吗? 我已经根据此链接给出了
任何人都可以帮助消除此段错误。我已经在这个代码上工作了一个星期仍然无法调试它。这段代码是Btree的实现。插入部分工作正常,但删除部分出现段错误。我无法调试它,有人可以帮忙吗? 我已经根据此链接给出了
我正在尝试按级别顺序打印一棵 b 树,但它一直在崩溃。我不确定真正的原因是什么,但我认为它崩溃是因为指针。我正在尝试使用我在网上找到的一个函数,该函数遍历每个级别并将其放入队列中并打印出来,但我遇到了
我一直在阅读@XenphYan 的回答 How does database indexing work? 但是有些事情我无法理解 Due to the fact that a number of re
我想要一个在一个字段上进行全文搜索然后在不同字段上进行排序的查询(想象一下搜索一些文本文档并按发布日期排序)。该表有大约 1700 万行,它们或多或少按日期均匀分布。这将在 webapp 请求/响应周
让我们看两个表: CREATE TABLE `orders_products` ( `ORDER_ID` int(10) unsigned NOT NULL, `PRODUCT_ID
我正在尝试创建一个为 BTree 设置动画的 Java 小程序。我有创建树的代码,但现在我正在尝试显示它。我认为最简单的方法是按级别打印,但我不知道该怎么做。下面的代码是我的节点的构造函数。另外,如果
我在维基百科上读到的: In B-trees, internal (non-leaf) nodes can have a variable number of child nodes within s
我一直在 slady.net 玩非常酷的 btree applet| .我无法理解特定行为。看看这个起始状态: alt text http://www.freeimagehosting.net/upl
您好,这是我的 SearchTree 类中的代码。Node* 是一个 m_info 类型为 int 的结构体,m_left(smaller nodes by info) 和 m_right(bigge
想象一下,每天都会有一位作者送给您一本新书。这本书正在编写中。他没有告诉您他更改或添加了什么。 您的工作是确定更改和添加内容,然后仅将这些内容传递给出版商(出版商没有时间每天阅读整本书) 为了解决这个
所以我有一个包含大约 2000 万个键值对的列表,我将数据以不同的方式存储在几个 MapDB 中,以查看它如何影响我的程序性能,并进行实验。 问题是,将 2000 万个键值对插入(以随机顺序)到 ma
我找不到关于 Postgres 文档的足够信息,但很想知道 btree 索引对于 postgres varchar 列是怎样的。 任何链接/解释都可能有帮助。 PS:对不起,这个问题含糊不清 最佳答案
我曾尝试查找类似的问题,但没有找到任何问题,除了有关同一列的两个索引的问题(一般而言)。 假设我们有一个包含 COL 列的表。该表(以及整个数据库)对于客户端来说是只读的(让我们假设它更新一次/每隔很
我正在尝试实现 BTree。我几乎已经完成了这棵树,并且对于较小的输入效果很好,这意味着我已经在内存中实现了这棵树。现在我想玩大输入,为此我必须将树写入文件。我不知道从哪里开始。我正在使用 Java,
我有一张 OrderDish 表,其中包含: create table OrderDish( email VARCHAR(80), nOrd integer, totalPri
如何解决这个问题? 我的表结构: CREATE TABLE IF NOT EXISTS `tbl_foster_network` ( `network_id` int(11) NOT NULL C
很难说出这里要问什么。这个问题模棱两可、含糊不清、不完整、过于宽泛或夸夸其谈,无法以目前的形式得到合理的回答。如需帮助澄清此问题以便重新打开,visit the help center . 关闭 1
我尝试使用 Java 来实现教科书《算法简介》第三版中的算法,但没有取得很大成功。几乎每次我尝试实现它们时,我都会遇到大量错误,以至于我不确定作者自己是否尝试过实现他们自己的伪代码。但具体来说,在这种
我是一名优秀的程序员,十分优秀!