//优先级队列实现的哈夫曼树的编码和译码 #include<iostream> #include<queue> #include<string> using namespace std; class Node { public: float weight; Node* left; Node* right; char ch; Node(float w,Node* l=NULL,Node* r=NULL,char c=' '):weight(w),ch(c),left(l),right(r) {} Node(float w,char c=' '):weight(w),ch(c),left(NULL),right(NULL) {} }; class cmp { public : bool operator()(Node* a,Node* b) { return a->weight>b->weight; } }; vector<int> v; void Encode(Node* r)//打印字符的编码 { if(r->left==NULL && r->right==NULL) { cout << r->ch <<": "; for (int i = 0;i<v.size();++i) cout << v[i]; cout << endl; v.pop_back(); return ; } if(r->left) { v.push_back(0); Encode(r->left); } if(r->right) { v.push_back(1); Encode(r->right); } if(!v.empty()) { v.pop_back(); } } void Decode(Node* root, string s)//译码 { Node* p=root; for(int i=0;i<s.length();++i) { if(s[i]=='0') { if(p->left) p=p->left; else { cout<<s<<" Can't decode!"<<endl; return ; } } if(s[i]=='1') { if(p->right) p=p->right; else { cout<<s<<" Can't decode!"<<endl; return ; } } } cout<<s<<": "<<p->ch<<endl; } void freeTree(Node* p)//销毁哈夫曼树 { if(p->left!=NULL) freeTree(p->left); if(p->right!=NULL) freeTree(p->right); delete p; p=NULL; } int main() { Node* m1,*m2; char ch[]={'A','C','E','D','F','G'};//字符 float f[]={0.1,0.3,0.4,0.5,0.2,0.6};//频率 priority_queue<Node*,vector<Node*>,cmp> q; int n=sizeof(ch)/sizeof(ch[0]); for(int i=0;i<n;++i) { q.push(new Node(f[i],ch[i])); cout<<ch[i]<<": "<<f[i]<<'\t'; } cout<<endl; for(int i=1;i<n;++i) { m1=q.top(); q.pop(); m2=q.top(); q.pop(); float w=m1->weight+m2->weight; q.push(new Node(w,m1,m2)); } Node* root=q.top(); Encode(root); cout<<endl; Decode(root,"1011"); freeTree(root); return 0; }
优先级队列实现哈夫曼树的编码和译码
转载于:https://www.cnblogs.com/luxiaoxun/archive/2012/08/04/2622626.html
相关文章:

Git,Github和Gitlab简介和使用方法
什么是Git Git是一个版本控制系统(Version Control System,VCS)。 版本控制是一种记录一个或若干文件内容变化,以便将来查阅特定版本修订情况的系统。 多年前,我在法国做第一个实习时(2011年)&a…

Win10控制桌面图标显示
1、桌面鼠标右键,进入个性化 2、进入主题: 3、 转载于:https://www.cnblogs.com/132818Creator/p/11356237.html

如何查看笔记本电脑配置参数_教你如何查看 MacBook 配置,超简单
相信很多人都会遇到这样的情况:当有人问起你的 MacBook 配置时,你却愣了,因为你自己都没注意或者查看过。实际上,有很多人对自己的电脑配置都不是很清楚,本期Mac毒就来教教你如何快速查看苹果电脑的相关配置。1、首先&…

为什么以太网帧的长度最短64字节,最长1518字节?
1.碰撞槽时间 假设公共总线媒体长度为S,帧在媒体上的传播速度为0.7C(光速),网络的传输率为R(bps),帧长为L(bps),tPHY为某站的物理层时延; 则有&a…

PHP 利用AJAX获取网页并输出(原创自Zjmainstay)
看点: 1、file_get_contents超时控制。 2、页面编码判断。 3、键盘Enter键捕捉响应。 4、键盘event兼容处理。//event event || window.event; 5、XMLHttpRequest 和 jQuery 两种实现方案。 6、页面及源码同时展示。 XMLHttpRequest版本 get_web.php <?phphead…

TCP/IP 协议栈4层结构及3次握手4次挥手
TCP/IP 协议栈是一系列网络协议的总和,是构成网络通信的核心骨架,它定义了电子设备如何连入因特网,以及数据如何在它们之间进行传输。TCP/IP 协议采用4层结构,分别是应用层、传输层、网络层和链路层,每一层都呼叫它的下…

简述BT下载技术及其公司发展现状
一、 BT下载技术是什么?谁发明的? 2003年, 软件工程师Bram Cohen发明了BitTorrent协议(俗称“BT下载”),其采用高效的软件分发系统和P2P技术共享大体积文件(如一部电影或电视节目…

php要怎么使用imagettftext_延长防腐木使用要怎么做呢?
木结构基层的处理:设计施工中应充分保持防腐木材与地面之间的空气流通,可以更有效延长木结构基层的寿命。制作安装防腐木时,防腐木之间需留0.2-1CM的缝隙(根据木材的含水率再决定缝隙大小,木材含水率超过30%时不应超过…

15个新鲜的单页网站设计实例
单页网站因为结合着css3 html5和jquery技术 使得这样的网站看这些网站看起来更具吸引力和新鲜的感,逐渐成为互联网上一个新趋势 ,今天介绍网站设计一些新鲜的例子 。我希望大家将欣赏这美妙的设计师做的工作。随时分享您的看法, 1) Pigspotte…

异常处理机制(Begin try Begin Catch)
begin try--SQL end trybegin catch --sql (处理出错动作)end catch我们将可能会出错的sql 写在begin try...end try 之间,若出错,刚程序就跳到紧接着的begin try...end try 的beign catch...end catch中,执行beign catch...end catch错误处理…

开源工程系列之讯飞VBOX改装蓝牙5.0(aptX HD)音箱
最近得到一个小度智能音箱,功能还不错,但是音效一般。想起了吃灰的讯飞VBOX,音效相当棒,只是APP和服务器已经不再维护,只能放里面自带的歌曲,遂决定改装VBOX为蓝牙音箱,使用aptX HD(…

台式电脑键盘按键错乱_Win7系统键盘数字错乱了应该如何解决?
Win7系统键盘数字错乱怎么办?相信很多用户都遇过键盘数字键错乱的情况,明明按的是数字键,但是却打不出相应的数字,整体键盘数字都错乱了,这是什么回事呢?接下来就为大家分享win7系统键盘数字错误恢复方法。…

程序编辑SHP文件并应用更改到数据源
在上一篇Blog中峻祁连介绍了在Map 3D中通过程序删除图层及数据源的方法,并且卖了个关子,这个方法还有另外一个妙用,今天就简单介绍一下。对数据源的编辑估计是Map 3D开发中最常见的功能了,包括对添加、删除和修改要素。这里以删除…

目录树结构改变后刷新目录树
主界面中含有一个目录树(是将一个目录下所有的文件和子文件呈现成一个可以逐级展开的树),我将树的功能单独写成一个FileTree.class,这样能够让目录树处理更清晰些。第一次我的做法是:将建立TreeViewer和Tree写在FileTr…

Docker - 在CentOS7.5中升级Docker版本
1 - 检查当前版本 [rootlocalhost ~]# uname -a Linux localhost.localdomain 3.10.0-957.el7.x86_64 #1 SMP Thu Nov 8 23:39:32 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux [rootlocalhost ~]# [rootlocalhost ~]# cat /etc/system-release CentOS Linux release 7.5.1804 (C…

编码的细微区别
在编程学习的深入后,不可避免的会遇到ANSI、GB2312、UTF8的编码问题,如果不彻底了解他们的区别,都最终会造成一个问题--乱码!想要更好的了解编码,我们首先应该了解编码的历史演变。 在继续学习之前先明白一下转化关系吧…

Axel之 -axel_do剖析
axel_do主体部分,尝试从多个连接select方式去读取数据,如果读取失败或者连接超时就重新连接。 下面是代码分析. //下载的主循环void axel_do( axel_t *axel ){ fd_set fds[1]; int hifd, i; long long int remaining,size; …

win10键盘全部没反应_Win10笔记本键盘失灵怎么办 Win10键盘失灵解决方法【详解】...
相信现在已经有很多朋友都已经成功升级了win10正式版,不过最近有用户反映,升级Win10笔记本键盘失灵怎么办?下面迅维小编整理了一些常见的原因与解决办法,供大家参考尝试解决。Win10笔记本键盘失灵的原因一1、没有开启小键盘很多笔记本都带有…

基于链接的排序算法
基于链接的排序算法似乎已广泛应用到各种商业seohua.net”> 搜索引擎中。为了让设计出来的网站能够在各种搜索引擎中获得较高排名,设计者们应该知道这些算法的原理。Google排名的成功意味着PageRank算 法值得特别的关注。PageRank算法是少数几个公开的排序算法之…

Spring Boot配置全局异常捕获
1 SpringBoot配置全局的异常捕获 项目的说明 配置thymeleaf作为视图模板ExceptionController.java模拟测试用MyAjaxExceptionHandler.java捕获到异常以ajax形式返回MyExceptionHandler.java捕获到异常以页面形式返回ajaxerror.html这个是测试返回ajax异常的页面error.html以页面…

一步一步Asp.Net MVC系列_权限管理总结(附MVC权限管理系统源码)
TZHSWEET:请大家多多反馈问题,我已经在修改中了,已更新版本。。。。。。 如果大家遇到数据库附加问题,EF连接字符串问题,请自行配置,如果有bug反馈可以私聊,我的qq:409180955。 项目已经发布到G…

电脑壁纸励志_励志壁纸 | 要乖 要长大 要努力 要不负众望
全世界只有不到1%的人关注了壁纸阿姨你真是个特别的人2020.4.17要乖 要长大 要努力 要不负众望励志壁纸全文字数:236阅读时间:1分钟图片数目:361“我不懂什么年少轻狂,我只知道胜者为王。”点击图片 长按保存高清原图♥2“愿你以渺…

ubuntu自定义命令
ubuntu中通过alias可以自定义快捷命令 在.bashrc中加入alias指令可以定义快捷命令,以下为我常用快捷命令 alias watwatch -n 1 nvidia-smi alias gohomecd /home/B/gaoye alias cdcodecd /home/B/gaoye/code 转载于:https://www.cnblogs.com/yeran/p/11367988.html

OSPF LSA 类型
路由器LSA:每台路由器都创建1类LSA,用于向连接的每个区域描述自己,在每台路由器中,每个区域的LSDB都包含一个1类LSA,它指出了当前路由器的RID和所有接口的IP地址。1类LSA还用于描述末节网络。网络LSA:每个中…

配件商城项目总结
---恢复内容开始--- 一、在首页导航栏上有一个自动摇晃的手机图标 ,而我一开始设置的是悬浮摇晃 由于将悬浮设置在图片外面的容器(a)上导致效果没出来,而且动画效果一直没出来。 解决方法:将悬浮改成自动播放ÿ…

006本周总结报告
这周基本学完了java的基础中的基础,还不会灵活的应用,相关概念仍然有些模糊。为此,自己将自己学到的知识点做了下系统的复习,并作了相关的笔记。这周编程的大部分时间主要用于小学期PTA的编程作业中(用C语言࿰…

excel小写转大写公式_【Excel函数贴】五个技巧性函数小套路
来吧 来吧 来吧 一起舞蹈 什么烦恼可以将我打扰…………1,字母大小写。一个做外贸的朋友问,Excel有没有函数可以把英文从小写变大写?他可能碰到蛮多洋人的人名或者货名需要大小写转换的。小写转大写:UPPER("excel")大写…

DevExpress A field with the name '' was not found on the selected data source.
绑定控件时发现的错误,找了很久终于找到原因了,可能也是大家没注意的地方,希望能给大家带来一些帮助。 自己在找的时候发现,明明是有的。 结果应该是这样的 上面定义实体类的字段写法有缺陷 这样再重新编译运行后就不会出错了。转…

刚申请了Blog,首贴庆祝!
刚申请了Blog,首贴庆祝!转载于:https://www.cnblogs.com/ele-eye/archive/2011/11/17/2252654.html
ReentrantLock实现原理分析
ReentrantLock主要利用CASCLH队列来实现。它支持公平锁和非公平锁,两者的实现类似。 CAS:Compare and Swap,比较并交换。CAS有3个操作数:内存值V、预期值A、要修改的新值B。当且仅当预期值A和内存值V相同时,将内存值V修…