美文网首页
九度1112:哈夫曼树 STL中堆的使用

九度1112:哈夫曼树 STL中堆的使用

作者: mztkenan | 来源:发表于2017-06-11 16:41 被阅读116次

Problem Description

哈夫曼树,第一行输入一个数n,表示叶结点的个数。需要用这些叶结点生成哈夫曼树,根据哈夫曼树的概念,这些结点有权值,即weight,题目需要输出所有结点的值与权值的乘积之和。

int main()
{
    int n,temp,ans;
    Node a,b;
    while (cin>>n)
    {
        ans=0;
        vector<Node> heap;
        for (int i=0;i<n;i++) {
            cin>>temp;
            Node node;
            node.deep=0;
            node.weight=temp;
            heap.push_back(node);
        }
        make_heap(heap.begin(),heap.end(),greater<int>());//默认Less,最大堆
        while (heap.size()>1)
        {
//            for (vector<Node>::iterator i=heap.begin();i!=heap.end();i++)
//            {
//                cout<<*i<<" ";
//            }
            cout<<"\n";
            pop_heap(heap.begin(),heap.end(),greater<int>());//这些都需要加参数
            a=heap.back();
            heap.pop_back();
            pop_heap(heap.begin(),heap.end(),greater<int>());
            b=heap.back();
            heap.pop_back();
            Node c;
            c.deep
            c.weight=a.weight+b.weight;
            heap.push_back(a+b);
            ans+=a+b;
            push_heap(heap.begin(),heap.end(),greater<int>());
        }

        cout<<ans<<"\n";
    }
    return 0;
}
   

注意事项

1.WPL有一个简便运算,就是所有非叶子节点的权重和,知道这一点就容易多了
2.priority_queue内部也是使用vector容器,使用make_heap\push_heap两个函数的最大堆,这两个函数默认都是less,故要用的话每次都要改参数

相关文章

  • 九度1112:哈夫曼树 STL中堆的使用

    Problem Description 哈夫曼树,第一行输入一个数n,表示叶结点的个数。需要用这些叶结点生成哈夫曼...

  • 《恋上数据结构与算法一》笔记(十八)哈夫曼树

    目录 哈夫曼编码(Huffman Coding) 哈夫曼树 构建哈夫曼树 构建哈夫曼编码 一 哈夫曼编码(Huff...

  • 《数据结构与算法》总结(七)哈夫曼树

    目录 哈夫曼编码(Huffman Coding) 哈夫曼树 构建哈夫曼树 构建哈夫曼编码 一 哈夫曼编码(Huff...

  • 构造哈夫曼树和对每个字符进行编码

    必备知识 哈夫曼树也称为最优二叉树。 哈夫曼树并不唯一,但带权路径长度一定是相同的。 哈夫曼树中,左子树值必须小于...

  • 题型

    树 二叉树相关计算二叉树的三种遍历序列 前/后序+中序序列构造树 哈夫曼树 哈夫曼树的构造哈夫曼编码带权路径长度压...

  • A simple test

    哈夫曼编码 此代码用于生成哈夫曼树并且获取哈夫曼编码

  • 堆与哈夫曼树与哈夫曼编码

    堆 什么是堆 优先队列(Priority Queue):特殊的“队列”,取出元素的顺序是 依照元素的优先权(关键字...

  • 四、树的应用

    树的应用按考纲来看的话:1.二叉排序树2.堆结构3.哈夫曼(Huffman)树和哈夫曼编码而刚好这节课刚好都讲到了...

  • 2018-11-27

    今天看了哈夫曼构造过程,了解如何构造哈夫曼树。

  • 哈夫曼编码

    实验目的: (1) 掌握二叉树的定义; (2) 掌握哈夫曼树和哈夫曼编码算法的实现。 实验内容: 实现一个哈夫曼编...

网友评论

      本文标题:九度1112:哈夫曼树 STL中堆的使用

      本文链接:https://www.haomeiwen.com/subject/rtvhqxtx.html