我必须在MATLAB / Octave中实现一个霍夫曼编码器(不幸的是),因此我使用单元阵列以获得最大的灵活性。我想在符号索引合并到早期索引时附加符号索引,这样我就可以跟踪在处理过程中合并的符号。
以下是一个例子:
Index Prob. Index Prob. Index Prob.
1 0.5 1 0.5 1 0.5
2 0.2 3,4 0.3 ---> 0.4 2,3,4 0.4
3 0.2 ---> 0.3 2 0.1 ---/
4 0.1 ---/
如您所见,符号3和4被合并,然后合并索引,并且两个列表都按概率的降序进行处理。
所以我宣布了一个单元格数组:
% cell index
myinds = num2cell(1:numel(probs));
D = 2; % binary
不幸的是,当我尝试合并两者时,我得到一个大小不匹配错误;
% 3. add subtrees
myinds(end-(D-1)) = [myinds(end-(D-1)) mergedinds(2:end)];
% remove merged leaves
myinds((end-D):end) = []
任何一方的输出在概念上似乎都是我想要的,但是:
octave> [myinds(end-(D-1)) mergedinds(2:end)]
ans =
{
[1,1] = 3
[1,2] = 4
}
octave> myinds(end-(D-1))
ans =
{
[1,1] = 6
}
我希望将上面的Index
列存储为算法逐步完成图示的过程。我每次都可以生长一个矩阵,但这很慢且效率低下。据我了解,一个单元格数组会做我想要的,但我不能让它工作。