赫夫曼编码
来源:互联网 发布:怎么看见手机淘宝评价 编辑:程序博客网 时间:2024/05/16 18:03
//赫夫曼编码//procedure Huffman(c:具有频率wi的符号ai,i=1,2,3。。。n)//F=n个根树的森林,每个根树由单个顶点ai组成并且赋权wi// while F不是树// begin// 把F中满足w(T)>=w(T')的权最小的根树T和T'换成具有新树根的一个树// 这个树根以T作为左子树,T'作为右子树// 用0标记树根到T的新边,并且用1标记树根到T'的新边// 把w(T)+w(T')作为新树的权//end//多少个符号6a b c d e f0.08 0.10 0.12 0.15 0.20 0.35fdcebaPress any key to continue#include <iostream>using namespace std;typedef struct tree* treezhi;struct tree{char symbol;//符号double quan;//权 treezhi left; treezhi right;};treezhi constuction(treezhi* zu,int n);//构造赫夫曼树int no_tree(treezhi* zu,int n);//非只有一个根树==还是森林void traverse(treezhi head);//遍历int main(int argc, char const *argv[]){ int i;int n;//符号数量cout<<"多少个符号\n";cin>>n;treezhi* zu=new treezhi[n];for ( i = 0; i < n; ++i) zu[i]=new struct tree;for ( i = 0; i < n; ++i)cin>>zu[i]->symbol;//输入符号for ( i = 0; i < n; ++i){ cin>>zu[i]->quan;//小于1输入权 zu[i]->left=NULL; zu[i]->right=NULL;}treezhi head=constuction(zu,n);traverse(head);return 0;}treezhi constuction(treezhi* zu,int n)//构造赫夫曼树{ int min1=32767,min2=32767;//min2较min1小 double min1quan=32767,min2quan=32767;//min2和min1它们对应的权 while(no_tree(zu,n))//非只有一个根树==还是森林 { min1quan=32767;min2quan=32767; for (int i = 0; i < n; ++i) { if (zu[i]!=NULL) { if (zu[i]->quan < min2quan) {//小于最小的 min1=min2;min1quan=min2quan; min2=i;min2quan=zu[i]->quan; continue; } if (zu[i]->quan < min1quan) {//仅仅是小于第二小的 min1=i;min1quan=zu[i]->quan; } } } ////上部分找到了最小的两个根树 treezhi temp=new struct tree; temp->symbol='\0'; temp->quan=min1quan + min2quan;//把w(T)+w(T')作为新树的权 temp->left=zu[min1];//大的在左子树 temp->right=zu[min2];//小的在右子树 zu[min2]=temp; zu[min1]=NULL;//把较小设为null } return zu[min2];//返回根}int no_tree(treezhi* zu,int n){int j=0;for (int i = 0; i < n; ++i)if (zu[i]!=NULL)++j;return (j-1);//非只有一个根树}void traverse(treezhi head){if (head!=NULL){if(head->symbol!='\0') cout<<head->symbol;traverse(head->left);traverse(head->right);}}
1 0
- 赫夫曼编码
- 赫夫曼编码
- 赫夫曼编码
- 赫夫曼编码
- 赫夫曼编码
- 赫夫曼编码!
- 赫夫曼编码
- 赫夫曼编码
- 赫夫曼编码
- 赫夫曼编码
- 赫夫曼编码
- 赫夫曼编码
- 赫夫曼编码
- 赫夫曼编码
- 赫夫曼编码
- 赫夫曼编码
- 赫夫曼编码
- 赫夫曼编码
- PostgreSQL 遍历表的PLSQL列举
- Android---利用Google的云消息
- JDBC连接数据库 mysql
- jquery操作select下拉框的多种方法(选中,取值,赋值等)
- SSH配置错误1
- 赫夫曼编码
- Cocos2d-x 3.X CMake MinGW版本编译运行
- 28 Android 从sdcard 卡下删除文件
- jquery-ajax请求后台数据转换json显示在select下拉列表
- 动态加载资源(云风的blog)
- install jdk in ubuntu
- 库里稚嫩的脸庞背后辛酸故事
- 网络编程学习_IO复用:select/poll
- 【磁盘处理相关方法】3,得到最空闲的磁盘