鱼C论坛

 找回密码
 立即注册
查看: 1823|回复: 2

matlab 哈夫曼编码

[复制链接]
发表于 2021-12-22 11:25:20 | 显示全部楼层 |阅读模式
10鱼币
  1. clc;
  2. clear;
  3. n=10;
  4. % c=[];
  5. c=randsample(100,10);    %随机生成10个数字
  6. % c=rand(1,n);%********随机生成数据********************
  7. c=c/sum(c);
  8. % c=[0.1546 0.0948 0.1361 0.0186 0.1258 0.0474 0.1897 0.0351 0.1423 0.0557];
  9. p=c;
  10. disp(p);
  11. w=[;];%***************位置矩阵,记录数据的变化过程*****
  12. for i=1:n-1
  13.     [p,l]=sort(p);
  14.     w(i,:)=[l(1:n-i+1),zeros(1,i-1)]; %存放每一次排序的顺序
  15.     p=[p(1)+p(2),p(3:n),1];
  16. end
  17. a={;};%**********字符数组,生成霍夫曼码****************
  18. for i=1:2*(n-1)
  19.     for j=1:n
  20.         
  21.         a{i,j}=' ';
  22.     end
  23. end%*****************初始化*********************
  24. a{2*n-2,1}='0';
  25. a{2*n-2,2}='1';
  26. for i=1:n-1 % 1-9
  27.     for j=1:i+1  %
  28.         a{2*(n-i)-1,j}=a{2*(n-i),find(w(n-i,:)==j)};%恢复未排序前  奇数行
  29.     end
  30.     if((n-i-1)<=0)
  31.         break;
  32.     end
  33.     a{2*(n-i-1),1}=strcat(a{2*(n-i)-1,1},'0');   %每次都是最小两个概率合并,这是恢复到合并前
  34.     a{2*(n-i-1),2}=strcat(a{2*(n-i)-1,1},'1');   %前两个每次加一个码字,分别为0和1
  35.     for j=3:i+2
  36.         a{2*(n-i-1),j}=a{2*(n-i)-1,j-1};   %除取前两个的,后面和上一行结果相同
  37.     end
  38. end  
  39. h=-c.*log2(c);
  40. hx=sum(h);
  41. for i=1:n
  42.     len(i)=length(a{1,i});
  43. end
  44. plen=len.*c';
  45. averagelen=sum(plen);
  46. fprintf('霍夫曼编码为:\n');
  47. % disp(a);
  48. for i=1:n
  49.     disp(a(1,i));
  50. end
  51. fprintf('平均码长为:\n');
  52. disp(averagelen);
  53. fprintf('信源熵为:\n');
  54. disp(hx);
  55. fprintf('编码效率为:\n');
  56. disp(hx/averagelen);
复制代码



  1. 错误使用 horzcat
  2. 串联的矩阵的维度不一致。

  3. 出错 huffman_1 (line 15)
  4.     p=[p(1)+p(2),p(3:n),1];
复制代码

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-5-13 16:47:47 | 显示全部楼层
请问解决了吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2022-5-16 20:27:22 | 显示全部楼层

我换代码了,
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-26 18:55

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表