📄 gailv.m
字号:
function[nf,gai,pin] = gailv(f)
%--------------------------------------------------------------------------
%此函数是计算数组f中不重复字符的出现概率和频率
%基于算术编码的文本压缩,被main.m文件调用
%输出数组nf记录了所有不重复的字符
%输出数组gai记录了每个字符的概率
%输出数组pin记录了每个字符的频率,即出现次数
%--------------------------------------------------------------------------
n=length(f);%求f的长度n(即文件中字符的长度)
nf(1)=f(1);%初始化数组nf,它唯一的一个元素就是f的第一个元素
pin(1)=1;%初始化数组pin,它唯一的一个元素是字符nf(1)对应的频率
m=1;%定义m是数组nf的元素个数
for j=2:n%查找f中第j个字符和nf中第k个字符是否相同
k=1;%初始化k为1
sign=0;%初始化标志位sign为0,表示未找到相同的字符
while sign==0&k<=m%循环,直到找到相同的字符,或是k超过了m的值
if f(j)==nf(k)%找到相同的字符,sign置1
sign=1;
else
k=k+1;%否则,k加1,继续在nf中查找
end
end%结束循环时,k不是nf中和f(j)相同的字符的位置,就是nf需要添加新字符的位置
if sign==1%如果找到相同的字符,字符nf(k)对应的频率加1
pin(k)=pin(k)+1;
else
nf(k)=f(j); pin(k)=1; m=k;
%否则,把f(j)这个字符添加到nf中,对应的频率置1,m置k的值
end
end%结束这个循环时,m是数组nf的长度,即不重复的字符的个数
for k=1:m%求nf中每个字符对应的概率
gai(k)=pin(k)/n;%概率是对应的频率除以f的长度
end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -