zoukankan      html  css  js  c++  java
  • 二项队列

    堆序树的集合,森林

    二项树 Bk 由一个带有儿子 B1 B2 ... Bk-1 的根组成 ,高度为 k 的二项树恰好有 2^k 个节点

    目标:用二项树的集合惟一表示任意大小的优先队列

    树的合并只在乎有没有保持堆序性,兄弟节点间没有要求

    编程就是要让自己像计算机思考,一次只考虑一个步骤

    合并 2 个优先队列部分代码

    T1=H1->TheTrees[i];
    T2=H2->TheTrees[i];
    switch (!!T1 + 2*!!T2 + 4*!!Carry) {
        case 0:
        case 1:
            break;
        case 2:
            H1->TheTrees[i] = T2;
            H2->TheTrees[i] = NULL;
            break;
        case 4:
            H1->TheTrees[i] = Carry;
            Carry = NULL;
            break;
        case 3:
            carry = CombineTrees(T1, T2);
            H1->TheTrees[i] = H2->TheTrees[i] = NULL;
            break;
        case 5:
            Carry = CombineTrees(T1, Carry);
            H1->TheTrees[i] = NULL;
            break;
        case 6:
            Carry = CombineTrees(T2, Carry);
            H2->TheTrees[i] = NULL;
            break;
        case 7:
            H1->TheTrees[i] = Carry;
            Carry = CombineTrees(T1, T2);
            H2->TheTrees[i] = NULL;
            break;
    }

     CombineTrees代码如下

    BinTree CombineTrees(BinTree T1, BinTree T2) {
        if (T1->Element > T2->Element) {
            return CombineTrees(T2, T1);
        }
        T2->NextSibling = T1->LeftChild;
        T1->LeftChild = T2;
        return T1;
    }
  • 相关阅读:
    C#使用GZipStream压缩与解压字符串
    C# 参考之方法参数关键字:params、ref及out
    C#中cookie讲解
    WPF中窗口控件的跨线程调用
    vs2010 快捷键大全
    Python线程池
    Python 爬虫修正
    Python 爬虫插件
    Python发现爬虫插件有BUG。
    Python 存在BUG的线程池
  • 原文地址:https://www.cnblogs.com/m2492565210/p/7258483.html
Copyright © 2011-2022 走看看