wpl计算方法_C++哈夫曼树WPL的计算 求代码
展开全部
#include
using namespace std;
struct node
{
int w;
int flag;
int lchild,rchild;
int parent;
};
node huff[1001];
int n;
void read()
{
int i;
cout<
cin>>n;
for(i=1;i<=n;i++)
cin>>huff[i].w;
}
int huffman()
{
int i,min1,min2,k1,k2,j,s;//初始化标记
for(i=1;i<=2*n-1;i++)
{
huff[i].flag=0;
huff[i].lchild=-1;
huff[i].rchild=-1;
huff[i].parent=-1;
}
//n-1次建树
for(i=1;i<=n-1;i++)
{
min1=100000;
min2=100000;//求最小初始化最大
k1=-1;// 记下最小次小的下标
k2=-1;
for(j=1;j<=n+i-1;j++)//搜索范围
{
if((huff[j].w
{
min2=min1;//最小给次小
k2=k1;//记下次小下标
min1=huff[j].w;//把最小赋值给min1
k1=j; //记下最小下标
}
else if((huff[j].w
{
min2=huff[j].w;//直接修改次小值
k2=j;//记下次小的下标
}
}
huff[n+i].w=min1+min2;//新增加的结点
huff[k1].flag=1;//填最小与次小的标记:
huff[k2].flag=1;
huff[k1].parent=n+i;//填最小与次小的parent:
huff[k2].parent=n+i;
huff[n+i].lchild=k1;//填新增结点的左右孩子:
huff[n+i].rchild=k2;
}
s=0;//WPL的值为非叶子结点之和
for(i=n+1;i<=2*n-1;i++)
s=s+huff[i].w;
cout<
return s;
}
void print(int t,string s1)
{
if ((huff[t].lchild==-1)&&(huff[t].rchild==-1))
cout<
else
{
print(huff[t].lchild,s1+"0");
print(huff[t].rchild,s1+"1");
}
}
int main()
{
read();
huffman();
print(2*n-1,"");
}
wpl计算方法_C++哈夫曼树WPL的计算 求代码相关推荐
- wpl计算方法_【数据结构】树的应用-计算哈夫曼树的WPL值
计算哈夫曼树的WPL值 根据给定的n个权值(非负值),计算所构造哈夫曼树的WPL值. 基本要求: (1)根据给定的数据,建立哈夫曼树: (2)输出每个叶子结点的带权路径长度: (3)输出哈夫曼树的WP ...
- 赫夫曼树(WPL最小树)
13.4 赫夫曼树 基本介绍: 给定 n 个权值作为 n 个叶子节点,构造一棵二叉树,若该树的带权路径长度(wpl)达到最小,成这样的二叉树为 最优二叉树, 也成为 赫夫曼树(Huffman Tree ...
- 带权路径长度wpl值_哈夫曼树带权路径长度怎么计算
哈夫曼树的带权路径长度是什么? 1.树的路径长度 树的路径长度是从树根到树中每一结点的路径长度之和.在结点数目相同的二叉树中,完全二叉树的路径长度最短. 2.树的带权路径长度(Weighted Pat ...
- 哈夫曼树的构造C/C++代码实现
哈夫曼树: 所谓哈夫曼(Huffman)树就是最优二叉树,是带权路径长度WPL最小的二叉树. 哈夫曼树的构造: 根据哈夫曼树的特点:权值越大的结点离根结点越近. 具体方法:依次选择权值最小的二个结点作 ...
- 哈夫曼树的构造及C++代码实现
哈夫曼树的构造过程: (1) 以权值分别为W1,W2...Wn的n各结点,构成n棵二叉树T1,T2,...Tn并组成森林F={T1,T2,...Tn},其中每棵二叉树 Ti仅有一个权值为 Wi的根结点 ...
- 【id:180】【20分】D. DS二叉树--赫夫曼树解码(不含代码框架)
题目描述 已知赫夫曼编码算法和程序,在此基础上进行赫夫曼解码 在赫夫曼树的类定义中增加了一个公有方法: int Decode(const string codestr, char txtstr[]) ...
- C语言:哈夫曼树构造及编码(核心代码每一行都有注释)
一.[实验目的及要求] 理解Huffman树的概念及其存储结构: 熟悉Huffman树的构造: 掌握Huffman树的编码方法. 二.[实验内容] 1.代码实现Huffman编码 2.请统计每个字符出 ...
- 哈夫曼树 构造,编码 完整代码
Haffman Tree 构造方法: 1.初始化每个叶子结点都是一棵树. 2.找最小权值的两棵树. 3.合并两树,生成新结点. 编码: 1.往左为1,右为0. 2.不等长编码. #include< ...
- java哈夫曼树权值计算_JAVA 哈夫曼树权值求和(代码找错)
展开全部 兄弟,你把如下第28行的count++;注释掉,一切问题都可以解决! 自己先琢磨为什么,不懂的再问!import java.util.Arrays; import java.util.Sca ...
最新文章
- 焦李成院士:进化优化与深度学习的思考
- 跨站请求伪造(CSRF)-简述
- 轻松掌控全链路监控:方案概述与对比 | 真的很干!
- Linux中THIS_MODULE宏定义详解
- Arduino_esp32_WiFi代码
- Builder模式和Spring框架
- 【Pytorch神经网络实战案例】04 使用Pytorch实现线性回归
- “通信大数据”征文通知
- Web 安全与 Rational AppScan 入门
- 编译速度谁“最快”?25岁的 C++Builder 还能打
- 奥迪A8的L3级自动驾驶方案---奥迪A8的zFAS
- matlab中xlsread无法打开文件,Matlab xlsread打开文件并清理
- netbeans乱码问题
- 戴尔7040linux改装win7,戴尔OptiPlex 7040台式机win10怎么改win7
- 移动端适配,华为浏览器底色无法正常显示
- 公共数据库介绍~datahub
- ping检测网络连接异常
- 海信Vidda S65 2023款和2020款有什么区别?哪个更好
- element ui el-table单元格按需合并
- 看一看:不同Web前端框架的优缺点分别是什么?
热门文章
- win10:打开了很多窗口,但任务栏上一个都不显示
- Mysql加密身份证号
- 面向 python 小白的贪吃蛇游戏
- 接口调用失败重试方案
- UDS14229-2020 29服务介绍
- codeforces 1303A Erasing Zeroes 水
- 芯片产业 - 常见流程和术语
- Java 安全管理类SecurityManager
- 【时序列】时序列数据如何一步步分解成趋势(trend)季节性(seasonality)和误差(residual)- 详细理解python sm.tsa.seasonal_decompose
- dda算法控制电机_求PWM速度控制系统是通过脉宽调制器对大功率晶体管的开关时间进...