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]
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]