⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 decode.m

📁 自适应编码 本发明的目标是生成一种方法:对数组压缩和解压缩编码
💻 M
字号:
function result=decode(final,nf,low,high,mn)
%--------------------------------------------------------------------------
%此函数是解码过程
%基于算术编码的文本压缩,被main.m文件调用
%输出数组result是解码后的字符按字节顺序存储的数组
%--------------------------------------------------------------------------
m=length(final);%定义m是数组final的长度
r=1;%初始化r为1,它是数组result的当前长度
s=1;%初始化s为1,它是当前用于解码的数据在final中的位置
code=final(1);
%初始化code为final(1),它是正在用于解码的数据
qujian=1;%初始化qujian为1,把它和1e-5比较,
%判断是否提取final的下一个数据
lo=0;%初始化区间的下限lo是0
hig=1;%初始化区间的上限hig是1
remain=final(m);%定义remain是final的最后一个数据

while s<m-1|remain>0%当s不是final的最后一个可用于解码的数据或remain>0时执行循环

    if s==m-1%如果s指向final的最后一个可用于解码的数据
        remain=remain-1;%把remian减1
    end
    
    sign=0;%初始化标志位sign为0,表示未找到匹配的字符
    k=1;%初始化k为1
    while sign==0%当sign为0时,执行循环
        if code>low(k)-1e-10%找到这样一个区间,满足high(k)>code>=low(k)
            result(r)=nf(k);%把nf的地k个字符作为result的第个字符
            r=r+1;%把加1,即把result的长度加1
            sign=1;%把sign置1,表示找到这样的区间
        else 
            k=k+1;%否则,把k加1,继续往后找
        end
    end%结束循环时,k是数组nf中匹配的字符的位置

    lo=low(k);%更新原来的下限值lo
    hig=high(k);%更新原来的上限值hig
    code=abs(code-lo)/(hig-lo);%根据公式,更新code
    qujian=(hig-lo)*qujian;%把qujian的值还原为在原始区间[0,1)的子区间值
    
    if qujian<mn&s<m-1%如果qujian小于mn并且s不指向最后一个压缩数据
        s=s+1;%把s加1
        code=final(s);%把code定义为final的第s个数据
        qujian=1;%把qujian还原为初始值1
        lo=0;hig=1;%恢复下限和上限为初始值0和1
    end
end

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -