在二项式队列中重新排名

时间:2011-09-21 12:22:08

标签: algorithm binomial-heap

我正在阅读二项式队列操作here

在链接的底部,它被称为

实施二项式队列

  1. deletemin操作需要能够查找根的所有子树。因此,每个节点的子节点都应该可用(比如链表)
  2. deletemin要求孩子按其子树的大小排序。
  3. 我们需要确保合并tress很容易。只有两个二叉树具有相同的大小才能合并,因此树的大小必须存储在根中。合并时,其中一棵树成为另一棵树的最后一个子节点,因此我们应该跟踪每个节点的最后一个子节点。要使用的良好数据结构是双重循环 链表每个节点的形式如下:
  4. data | first |left    | right |rank No. of |
    --------------------------------------------
           child |sibling |sibling| children 
    

    在上面作者的意思是“排名是什么?可以任何人请用例子解释。

2 个答案:

答案 0 :(得分:0)

据我了解,他试图说:我们存储rank,这与no. of childen非常相同(通常定义这些树的等级)。因此,您只需在每个节点中存储以下内容:

  • data表示树中的元素
  • first表示指向子项链接列表的指针(即指向第一个孩子的指针)
  • left是指向左邻居的指针
  • right是指向右邻居的指针
  • rank只是二叉树的等级

答案 1 :(得分:0)

请注意要求“只有两个二叉树具有相同的大小才能合并,因此树的大小必须存储在根中。”

似乎代替了“子树大小”字段,作者放了一个“子数”字段。这是令人困惑的,但是对于实现它很好,因为子树的大小是2 ^ {子节点数}。因此,您可以比较子项的#而不是比较子树的大小。