【问题标题】:Regrading rank in Binomial queue二项式队列中的重新排序等级
【发布时间】:2011-09-21 12:22:07
【问题描述】:
我正在阅读二项式队列操作here。
在链接底部提到它
二项式队列的实现
- deletemin 操作需要能够找到根的所有子树。因此每个节点的子节点应该是可用的(比如一个链表)
- deletemin 要求子项按其子树的大小排序。
- 我们需要确保很容易合并发丝。只有大小相同的两棵二叉树才能合并,因此树的大小必须存储在根中。合并时,其中一棵树成为另一棵树的最后一个子节点,因此我们应该跟踪每个节点的最后一个子节点。一个好的数据结构是双重循环的
链表每个节点是什么形式如下:
数据 |第一个 |左 |右 |排名第 |
------------------------------------------
孩子 |兄弟姐妹 |兄弟姐妹|孩子们
上面作者的“rank No. Of”是什么意思?谁能举例说明一下。
【问题讨论】:
标签:
algorithm
binomial-heap
【解决方案1】:
据我了解,他试图说:我们存储rank,顺便说一句,它与no. of childen 相同(通常是这样定义此类树的等级的)。因此,您只需在每个节点中存储以下内容:
-
data 代表树中的元素
-
first 表示指向子链表的指针(即指向第一个子链表的指针)
-
left 是指向左邻居的指针
-
right 是指向右邻居的指针
-
rank 只是二叉树的等级
【解决方案2】:
请注意“只有大小相同的两棵二叉树才能合并,因此树的大小必须存储在根中。”
似乎作者放了一个“子树数量”字段而不是“子树的大小”字段。这很令人困惑,但对于实现来说这很好,因为子树的大小是 2^{# of children}。所以你可以比较孩子的数量而不是比较子树的大小。