删除斐波那契堆中的最小值时的合并

时间:2019-06-20 12:06:34

标签: java arrays consolidation fibonacci-heap

我将要编写一个合并两棵树的代码,同时删除斐波那契堆中的最小树。

我制作了一个数组,指示根节点的程度,其#index为D(n)<= log n / log 1.618,其中n是堆中的#nodes。

对于所有根节点,如果不存在具有相同degree(array[degree] != null)的节点,则将该节点放入数组中,否则执行合并。

但是,在用array[degree]和节点执行合并之后,如果没有实际使array[degree]引用的节点为null(解引用数组),我将找不到使array[degree]为null的方法。 [学位])。

     // find D(n), create table
     double d_n = (double)n;
     int D = (int)(Math.log(d_n)/Math.log(1.618));
     Node[] table = new Node[D];

     // consolidation
     root = minroot;
     do {
        boolean unique = false;
        while (!unique) {
           if (table[root.deg] == null) {
              table[root.deg] = root;
              unique = true;
           } else {
              if (table[root.deg].key > root.key) {
                 table[root.deg].prev.next = table[root.deg].next;
                 table[root.deg].next.prev = table[root.deg].prev;
                 table[root.deg].parent = root;
                 table[root.deg].next = root.child.next;
                 table[root.deg].prev = root.child;
                 root.child.next.prev = table[root.deg];
                 root.child.next = table[root.deg];
                 root.deg++;
              } else {...}
           }
        root = root.next;
        }
     } while (root == minroot); // incomplete code

0 个答案:

没有答案