Matlab实现香农编码

我挺好奇为啥网上的香农编码实现都如此的冗长……明明四行就完事了:

%shannon -
%
% shannon(...)
%
% ... -
% 1
%
% shannon(0.25, 0.25, 0.2, 0.15, 0.1, 0.05)
%# ok<*NOPRT>
function shannon(varargin)
probabilities = sort(cell2mat(varargin), 'descend')
prefix_sum = [0, cumsum(probabilities(1 : end - 1))]
code_length = -floor(log2(probabilities))
extractAfter(string(dec2bin(prefix_sum .* 2 .^ code_length))', max(code_length) - code_length)
end
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

四行解决一切= =

本页代码适用Unlicense协议。

说点什么吧

您的邮箱地址不会被公开。 必填项已用 * 标注

这个站点使用 Akismet 来减少垃圾评论。了解你的评论数据如何被处理