#请问这段代码为什么无法输出解码的结果
#
text = 'abracadabra'; % 待编码的文本
[encoded, decoded, avgCodeLength, efficiency] = shannonCoding(text);
disp('编码结果:');
disp(encoded);
disp('解码结果:');
disp(decoded);
disp('平均码长:');
disp(avgCodeLength);
disp('编码效率:');
disp(efficiency);
function [encoded, decoded, avgCodeLength, efficiency] = shannonCoding(text)
% 计算字符频率
symbols = unique(text);
freq = zeros(size(symbols));
for i = 1:length(symbols)
freq(i) = sum(text == symbols(i));
end
freq = freq / numel(text);
% 计算累积概率
cumProb = cumsum(freq);
% 构建编码表
codeTable = cell(length(symbols), 2);
for i = 1:length(symbols)
codeTable{i, 1} = symbols(i);
codeTable{i, 2} = ''; % 初始化编码为空
end
% 递归构建编码表
codeTable = buildCodeTable(codeTable, cumProb, 1, '');
% 编码
encoded = '';
for i = 1:numel(text)
symbol = text(i);
index = find(strcmp(codeTable(:, 1), symbol));
code = codeTable{index, 2};
encoded = [encoded, code];
end
% 解码
decoded = '';
code = '';
for i = 1:numel(encoded)
code = code + encoded(i);
index = find(strcmp(codeTable(:, 2), code));
if ~isempty(index)
symbol = codeTable{index, 1};
decoded = [decoded, symbol];
code = '';
end
end
% 计算平均码长
codeLengths = cellfun(@length, codeTable(:, 2));
avgCodeLength = sum(codeLengths .* freq);
% 计算编码效率
efficiency = 1 ./ avgCodeLength;
end
% 递归构建编码表
function codeTable = buildCodeTable(codeTable, cumProb, index, code)
if index > length(codeTable)
return;
end
if cumProb(index) <= 0.5
codeTable{index, 2} = [code, '0'];
codeTable = buildCodeTable(codeTable, cumProb, index+1, [code, '0']);
else
codeTable{index, 2} = [code, '1'];
codeTable = buildCodeTable(codeTable, cumProb, index+1, [code, '1']);
end
end
```c
#输出结果如下,解码结果那一行无内容输出
```c
编码结果:
00101111001100111001011110
解码结果:
平均码长:
6.8182 2.7273 1.3636 1.3636 2.7273
编码效率:
0.1467 0.3667 0.7333 0.7333 0.3667
但是将代码进行一点点改动
% 解码
decoded = '';
code = '';
for i = 1:numel(encoded)
code = code + encoded(i);
index = find(strcmp(codeTable(:, 2), code));
if ~isempty(index)
symbol = codeTable{index, 1};
else//新加入的
decoded = [decoded, symbol];
code = '';
end
end
解码结果就会输出一串a
求问如何解决