计算机算法设计与分析 Huffman编码问题
哈夫曼编码问题实际上就是一棵最优二叉树,出现次数多的节点的高度要低,根据最优二叉树的建树规则,从头开始选择权值最低的两个节点(子树)进行合并,合并后放入优先队列,直到整个队列只剩下一个队首元素,结束遍历。输出哈夫曼编码只需要再遍历一遍这棵树,利用一个字符串来记录路径上的选择,当到达叶子节点时输出路径和存放的字符。
二叉树的很多规则已经记得不清楚了,可能有些写法不是很标准。
代码如下:
#include<bits/stdc++.h>
using namespace std;
struct Node{int weight;char c;struct Node *left;struct Node *right;friend bool operator < (struct Node a,struct Node b){return a.weight > b.weight; //结构体中,x小的优先级高}
};
priority_queue<struct Node > q;
string pass="";
void print(struct Node node)
{if(node.left==NULL&&node.right==NULL)cout<<node.c<<" "<<pass<<endl;if(node.left!=NULL){pass+="0";print(*node.left);pass=pass.substr(0,pass.length()-1);} if(node.right!=NULL){pass+="1";print(*node.right); pass=pass.substr(0,pass.length()-1); }
}
int main()
{int N;scanf("%d",&N);getchar();for(int i=1;i<=N;i++){struct Node temp;scanf("%c %d",&temp.c,&temp.weight);temp.left=NULL;temp.right=NULL;getchar();q.push(temp);}struct Node root;while(!q.empty()){struct Node x=q.top();q.pop();struct Node y=q.top();q.pop();struct Node temp;temp.weight=x.weight+y.weight;temp.left=(struct Node*)malloc(sizeof(Node));*temp.left=x;temp.right=(struct Node*)malloc(sizeof(Node));*temp.right=y;q.push(temp);if(q.size()==1){root=q.top();break;}}print(root);return 0;} /*
8
m 3
z 5
k 6
a 9
u 15
d 24
h 44
j 91
*/
计算机算法设计与分析 Huffman编码问题相关推荐
- 计算机算法设计与分析(第4版) 王晓东 著 2012.2 笔记(这本书还不错,偏实用、有难度)
计算机算法设计与分析(第4版) 目录 1 算法概述 2 递归与分治策略 3 动态规划 4 贪心算法 5 回溯法 6 分支限界法 7 随机化算法 8 线性规划与网络流 算法概述 复杂性分析 NP-完全性 ...
- 计算机算法设计与分析考试题,《计算机算法设计与分析》习题及答案
<计算机算法设计与分析>习题及答案 一.选择题 1.二分搜索算法是利用( A )实现的算法. A.分治策略 B.动态规划法 C.贪心法 D.回溯法 2.下列不是动态规划算法基本步骤的是( ...
- 计算机算法设计与分析教学大纲,《算法设计与分析》教学大纲
<<算法设计与分析>教学大纲>由会员分享,可在线阅读,更多相关<<算法设计与分析>教学大纲(3页珍藏版)>请在人人文库网上搜索. 1.课程编号:&quo ...
- 国科大刘玉贵老师计算机算法设计与分析2021年期末考试题回顾
总体感受 国科大研究生的计算机算法设计与分析课程有三位老师教授,分别是卜东波老师.陈玉福老师 和刘玉贵老师,这三位老师上课各有特色和风格.我选择的是刘玉贵老师的课程. 这门课程的内容挺充足的,但是有个 ...
- 国科大计算机算法设计与分析陈玉福,中科院陈玉福计算机算法设计与分析期末简答题答案...
中科院陈玉福计算机算法设计与分析期末简答题答案 1. 贪心算法和动态规划算法有什么共同点和区别?它们都有那些优势和劣势? 共通点:动态规划和贪心算法都是一种递推算法 ,均有局部最优解来推导全局最优解 ...
- 国科大计算机算法设计与分析陈玉福,中科院陈玉福计算机算法设计与分析期末简答题答案.pdf...
中科院陈玉福计算机算法设计与分析期末简答题答案 1. 贪心算法和动态规划算法有什么共同点和区别?它们都有那些优势和劣势? 共通点:动态规划和贪心算法都是一种递推算法 ,均有局部最优解来推导全局最优解 ...
- 计算机算法设计与分析第五章思维导图知识点总结 ( 初稿 )
复习链接 计算机算法设计与分析第一章思维导图 计算机算法设计与分析第二章思维导图&&知识点总结 计算机算法设计与分析第三章思维导图&&知识点总结 计算机算法设计与分析第 ...
- 线性时间选择 python实现 计算机算法设计与分析
最近算法老师布置了很多作业啊,其中一项就是要求实现书上<计算机算法设计与分析>28页的算法,实现过程如下:
- 计算机算法设计与分析(第5版)PDF
<计算机算法设计与分析(第5版)>是2018年电子工业出版社出版的图书,作者是王晓东. 整本书的结构是:先介绍算法设计策略思想,然后从解决经典算法问题来学习,通过实践的方式去学习算法. 网 ...
最新文章
- 巧解Android时区加载过慢的问题
- docker安装rocketmq_RabbitMQ 介绍amp;安装
- python教程课后答案-python从入门到实践课后习题第八章
- 二叉排序树的建立、先序/中序/后序遍历、查找
- DR模式 mysqlABB读写分离
- Java怎么配置环境变量?
- 迷你图标集大集合:5000+ 30套免费的图标(不得不下,设计必备)
- 如何将二维数组作为函数的参数传递
- linux下编译openjdk7,Ubuntu 14.04.3 64位环境下OpenJDK7编译
- hadoop tyarn冲突_Hadoop之Yarn
- 兑现北京冬奥赞助承诺 奇安信安全防护软件冬奥版发布
- 计算机网络(十三),Socket编程实现TCP和UDP
- 使用frp实现内网穿透
- 汉字取首字母(第三节蓝桥杯决赛)
- UMHexagonS算法优化
- 用计算机给plc编程,plc编程用什么电脑?plc编程用什么配置电脑
- Acrel-6000/B电气火灾监控系统在千山大厦的应用
- 【小学生打字练习软件】_在线网上打字比赛软件系统
- 2PC、XA、DTP与两阶段提交
- Android开发之监听手机来电