哈夫曼编码问题实际上就是一棵最优二叉树,出现次数多的节点的高度要低,根据最优二叉树的建树规则,从头开始选择权值最低的两个节点(子树)进行合并,合并后放入优先队列,直到整个队列只剩下一个队首元素,结束遍历。输出哈夫曼编码只需要再遍历一遍这棵树,利用一个字符串来记录路径上的选择,当到达叶子节点时输出路径和存放的字符。

二叉树的很多规则已经记得不清楚了,可能有些写法不是很标准。

代码如下:

#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编码问题相关推荐

  1. 计算机算法设计与分析(第4版) 王晓东 著 2012.2 笔记(这本书还不错,偏实用、有难度)

    计算机算法设计与分析(第4版) 目录 1 算法概述 2 递归与分治策略 3 动态规划 4 贪心算法 5 回溯法 6 分支限界法 7 随机化算法 8 线性规划与网络流 算法概述 复杂性分析 NP-完全性 ...

  2. 计算机算法设计与分析考试题,《计算机算法设计与分析》习题及答案

    <计算机算法设计与分析>习题及答案 一.选择题 1.二分搜索算法是利用( A )实现的算法. A.分治策略 B.动态规划法 C.贪心法 D.回溯法 2.下列不是动态规划算法基本步骤的是( ...

  3. 计算机算法设计与分析教学大纲,《算法设计与分析》教学大纲

    <<算法设计与分析>教学大纲>由会员分享,可在线阅读,更多相关<<算法设计与分析>教学大纲(3页珍藏版)>请在人人文库网上搜索. 1.课程编号:&quo ...

  4. 国科大刘玉贵老师计算机算法设计与分析2021年期末考试题回顾

    总体感受 国科大研究生的计算机算法设计与分析课程有三位老师教授,分别是卜东波老师.陈玉福老师 和刘玉贵老师,这三位老师上课各有特色和风格.我选择的是刘玉贵老师的课程. 这门课程的内容挺充足的,但是有个 ...

  5. 国科大计算机算法设计与分析陈玉福,中科院陈玉福计算机算法设计与分析期末简答题答案...

    中科院陈玉福计算机算法设计与分析期末简答题答案 1. 贪心算法和动态规划算法有什么共同点和区别?它们都有那些优势和劣势? 共通点:动态规划和贪心算法都是一种递推算法 ,均有局部最优解来推导全局最优解 ...

  6. 国科大计算机算法设计与分析陈玉福,中科院陈玉福计算机算法设计与分析期末简答题答案.pdf...

    中科院陈玉福计算机算法设计与分析期末简答题答案 1. 贪心算法和动态规划算法有什么共同点和区别?它们都有那些优势和劣势? 共通点:动态规划和贪心算法都是一种递推算法 ,均有局部最优解来推导全局最优解 ...

  7. 计算机算法设计与分析第五章思维导图知识点总结 ( 初稿 )

    复习链接 计算机算法设计与分析第一章思维导图 计算机算法设计与分析第二章思维导图&&知识点总结 计算机算法设计与分析第三章思维导图&&知识点总结 计算机算法设计与分析第 ...

  8. 线性时间选择 python实现 计算机算法设计与分析

    最近算法老师布置了很多作业啊,其中一项就是要求实现书上<计算机算法设计与分析>28页的算法,实现过程如下:

  9. 计算机算法设计与分析(第5版)PDF

    <计算机算法设计与分析(第5版)>是2018年电子工业出版社出版的图书,作者是王晓东. 整本书的结构是:先介绍算法设计策略思想,然后从解决经典算法问题来学习,通过实践的方式去学习算法. 网 ...

最新文章

  1. 巧解Android时区加载过慢的问题
  2. docker安装rocketmq_RabbitMQ 介绍amp;安装
  3. python教程课后答案-python从入门到实践课后习题第八章
  4. 二叉排序树的建立、先序/中序/后序遍历、查找
  5. DR模式 mysqlABB读写分离
  6. Java怎么配置环境变量?
  7. 迷你图标集大集合:5000+ 30套免费的图标(不得不下,设计必备)
  8. 如何将二维数组作为函数的参数传递
  9. linux下编译openjdk7,Ubuntu 14.04.3 64位环境下OpenJDK7编译
  10. hadoop tyarn冲突_Hadoop之Yarn
  11. 兑现北京冬奥赞助承诺 奇安信安全防护软件冬奥版发布
  12. 计算机网络(十三),Socket编程实现TCP和UDP
  13. 使用frp实现内网穿透
  14. 汉字取首字母(第三节蓝桥杯决赛)
  15. UMHexagonS算法优化
  16. 用计算机给plc编程,plc编程用什么电脑?plc编程用什么配置电脑
  17. Acrel-6000/B电气火灾监控系统在千山大厦的应用
  18. 【小学生打字练习软件】_在线网上打字比赛软件系统
  19. 2PC、XA、DTP与两阶段提交
  20. Android开发之监听手机来电

热门文章

  1. Arrays数组的常用方法
  2. [名人观点--刘振飞] bug管理
  3. 周鸿祎重申360不依靠弹窗广告盈利 增值服务是主要模式
  4. java kill 进程 时间_kill及kill-9的用法及如何实现进程的优雅退出
  5. zookeeper源码-分布式锁
  6. js操作符类型转换大全
  7. Luogu P3373 【模板】线段树 2
  8. 4.redis设计与实现--跳跃表
  9. 初学python之生成器
  10. Object有哪些公用方法?