7-29 修理牧场 预习报告

1,问题定义

修理牧场

【输入格式】

输入首先给出正整数N(≤104),表示要将木头锯成N块。第二行给出N个正整数(≤50),表示每段木块的长度

【输出格式】

输出1个整数,即将木头锯成N块的最少花费

2.问题分析

先将每个给定权值的结点看成一棵只有根节点的树,然后不断合成权值最小的两个树,生成一个权值为他们之和的一棵新树,最终剩下的一棵树就是哈夫曼树

3.概要设计

(1)哈夫曼树结点结构体

struct HuffmanNode {
    int weight;     //假定权值为整数
    HuffmanNode* left;   //定义左子树
    HuffmanNode* right;    //定义右子树
    HuffmanNode(int w) : weight(w), left(NULL), right(NULL) {}
};

(2)比较函数结构体

struct CompareNodes {
    bool operator()(const HuffmanNode* a, const HuffmanNode* a2) const  //将a和a2定义为常量
{
        return a->weight > a2->weight;
    }
};

(3)构建哈夫曼树

(4) 创建优先队列,用于存储哈夫曼树节点,按照权值从小到大排序

(5)不断合并权值最小的两棵树,直到只剩下一棵树

(6)取出权值最小的两棵树并计算花费

(7)创建一棵新树,权值为两棵子树权值之和,将新树放入优先队列

(8)释放哈夫曼树节点内存

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值