www.gusucode.com > ​算术编码的应用实例matlab版本源码程序 > ssbm.m

    function ssbm(str)
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%           算术编码过程实例ssbm.m
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
l=0;r=1;d=1;
%初始间隔
about={...
        '本实例说明:=====>>'
    '字符串不能太长,程序不加判断,请注意溢出;'
    '本实例只限定少数字符串;'
    '实例只是说明一下算术编码过程。'};
disp(about);
%程序限定字符为:a、b、c、d、e
p=[0.2 0.3 0.1 0.15 0.25];
%字符的概率分布,sum(p)=1
n=length(str);
disp('a b c d e')
disp(num2str(p))
for i=1:n
    switch str(i)
        case 'a' 
            m=1;
        case 'b'
            m=2;
        case 'c'
            m=3;
        case 'd'
            m=4;
        case 'e'
            m=5;
        otherwise
            error('请不要输入其它字符!');
    end
    %判断字符
    pl=0;pr=0;
    for j=1:m-1 
        pl=pl+p(j);
    end
    for j=1:m 
        pr=pr+p(j);
    end
    %概率统计
    l=l+d*pl;
    r=l+d*(pr-pl);
    strl=strcat('输入第',int2str(i),'符号的间隔左边界:');    
    disp(strl);
    format long
    disp(l)
    strr=strcat('输入第',int2str(i),'符号的间隔右边界:');
    disp(strr);
    disp(r)
    d=r-l;
end