网页资讯视频图片知道文库贴吧地图采购
进入贴吧全吧搜索

 
 
 
日一二三四五六
       
       
       
       
       
       

签到排名:今日本吧第个签到,

本吧因你更精彩,明天继续来努力!

本吧签到人数:0

一键签到
成为超级会员,使用一键签到
一键签到
本月漏签0次!
0
成为超级会员,赠送8张补签卡
如何使用?
点击日历上漏签日期,即可进行补签。
连续签到:天  累计签到:天
0
超级会员单次开通12个月以上,赠送连续签到卡3张
使用连续签到卡
06月29日漏签0天
mathematica吧 关注:19,829贴子:73,893
  • 看贴

  • 图片

  • 吧主推荐

  • 游戏

  • 16回复贴,共1页
<<返回mathematica吧
>0< 加载中...

求助:如何用mathematica写霍夫曼编码(Huffman)的程序

  • 只看楼主
  • 收藏

  • 回复
  • 506267012345
  • For循环
    7
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼


  • 506267012345
  • For循环
    7
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
ShannonCode[SC_]:=
Module[{SCP,n,pa,i,max,er,B},
SCP=Sort[Transpose[SC],#1[[2]]>=#2[[2]]&](*排序*);
n=Length[SCP];
pa=0;
AppendTo[SCP[[1]],pa];
Table[AppendTo[SCP[[i]],SCP[[i-1,2]]+SCP[[i-1,3]]],{i,2,Length[SCP]}];
Table[AppendTo[SCP[[i]],-Log[2,SCP[[i,2]]]],{i,1,Length[SCP]}];Table[AppendTo[SCP[[i]],Ceiling[SCP[[i,4]]]],{i,1,Length[SCP]}];max=Last[SCP][[5]];
Table[er=RealDigits[SCP[[i,3]],2,2*max,-1];AppendTo[SCP[[i]],TableForm[er[[1]][[1;;SCP[[i,5]]]],TableDirections->Row,TableSpacing->{0.1,2.5}]],{i,1,Length[SCP]}];
B=TableForm[SCP,TableHeadings->{None,{"Subscript[x, i]","p(Subscript[x, i])","Subscript[p, a](Subscript[x, j])","-logp(Subscript[x, i])","Subscript[k, i]","码字"}},TableSpacing->{1.0,2.5},TableAlignments->Left];
Return;
];
SC={X,PX}={{Subscript[x, 1],Subscript[x, 2],Subscript[x, 3],Subscript[x, 4],Subscript[x, 5],Subscript[x, 6]},{0.25,0.25,0.20,0.15,0.10,0.05}};
ShannonCode[SC]


2025-06-29 10:15:32
广告
  • mm_酱
  • 刚刚会用
    10
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
看来两眼维基百科,写了这个,不知对不对。。。
split[probs_] /; Length[probs] == 1 := probs;split[probs_] /; Length[probs] == 2 := List /@ probs;split[probs_] := Block[{len = Length[probs], ac = Accumulate[probs], tol = Total[probs], index}, index = SortBy[Range[1, len - 1], Abs[tol/2 - ac[[#]]] &][[1]]; {split[Take[probs, index]], split[Drop[probs, index]]}];HannonCode[x_, px_] := Block[ {sorted, sortedpx, h}, sorted = Reverse[SortBy[Transpose[{x, px}], Last]]; sortedpx = sorted[[All, 2]]; Grid[{sorted[[All, 1]], List @@@ Flatten[MapIndexed[h @@ Most[(#2 - 1)] &, split[sortedpx], {-1}]]}, Frame -> All] ]


  • mm_酱
  • 刚刚会用
    10
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
Huffman编码:

ClearAll[huffman];huffman[data_] := Module[{huff, code}, huff[list_] /; Length@list == 1 := list; huff[{{a_, b_}, {c_, d_}, tail___}] := huff[SortBy[{{{a, c}, b + d}, tail}, Last]]; List @@@ Flatten[MapIndexed[code[#1, #2 - 1] &, huff[data][[1, 1]], {-1}]]];


  • situxuming
  • 小吧主
    11
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
兄弟,去看看Power Mathematica Programming with Mathematica: The Kernal,原封不动的哈夫曼编码和解码例子,代码还比较优化。


  • 万毒狂魔
  • 有待掌握
    6
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
写好了请帮忙贴在这里: http://rosettacode.org/wiki/Huffman_coding


  • 506267012345
  • For循环
    7
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼


登录百度账号

扫二维码下载贴吧客户端

下载贴吧APP
看高清直播、视频!
  • 贴吧页面意见反馈
  • 违规贴吧举报反馈通道
  • 贴吧违规信息处理公示
  • 16回复贴,共1页
<<返回mathematica吧
分享到:
©2025 Baidu贴吧协议|隐私政策|吧主制度|意见反馈|网络谣言警示