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

📄 encode.asv

📁 自适应编码 本发明的目标是生成一种方法:对数组压缩和解压缩编码
💻 ASV
字号:
function[final,mn] = encode(n,f,nf,low,high)
%--------------------------------------------------------------------------
%此函数是编码过程
%基于算术编码的文本压缩,被main.m文件调用
%数组final记录了编码后的压缩流
%--------------------------------------------------------------------------
lo=0; %初始化区间的下限lo是0
hig=1;%初始化区间的上限hig是1
k=1;%初始化k为1,它是数组final的当前长度
mn=1e-5;%定义mn是1e-5,把它和当前的区间值比较,判断是否存储压缩数据
fin(1)=0;

for j=1:n %从第一个字符开始,依次计算上限和下限值
    
    r=1;%初始化r为1
    sign=0;%初始化标志位sign为0,表示未找到匹配的字符
    while sign==0
        if f(j)==nf(r),sign=1;%如果找到,置sign为1
        else r=r+1;%否则,往后接着查找
        end
    end%循环结束时,r是f(j)在nf中的位置

    nlow=lo+(hig-lo)*low(r);%根据公式,计算新的下限得到nlow
    nhigh=lo+(hig-lo)*high(r);%根据公式,计算新的上限得到nhigh
    
    if nhigh-nlow<mn %如果上限和下限的差距小于mn
        final(k)=nlow;%就提取此时的下限值nlow作为压缩数据final(k)
%         fprintf('j:%4.0f\n',j);fprintf('qujia:%12.10f\n',nhigh-nlow);
        k=k+1;%把k加1,即增加final的长度
%         fin(k)=j-sum(fin(1:k-1));%定义fin(k)表示提取压缩数据时在f中的位置
        nlow=0;nhigh=1;%恢复下限和上限为初始值0和1
    end
    lo=nlow;%更新原来的下限值lo   
    hig=nhigh;%更新原来的上限值hig 
end%循环结束时,k是fianl的长度加1

if nlow>0
    final(k)=lo;%把最后得到的lo作为最后一个用于解码的数据
    k=k+1;
    fin(k)=n-sum(fin(1:k-1));
end
%final的最后一个数据是得到最后一个压缩数据前剩余的字符个数
final=final+fin(2:k);

⌨️ 快捷键说明

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