Lempel-Ziv算法 具体过程

来源:互联网 发布:55开黑历史 知乎 编辑:程序博客网 时间:2024/06/05 15:08

例:

110110001101

第一步:求phrases


取1

110110001101第二个应该取1 但是1已经在前面有了 故后退一位 取10

110110001101第三个应该取1 但是前面已经有1了 继续后退一位 取11

以此类推

取得1,10,11,0,00,110,1


X={0,1},J=2(只有0和1)。


第二步:求m


1.第一位1,在前面没有重复,m=0

2.第二位10,取10是因为10中的11中的1重复 所以m=1

3.第三位11,取11 是因为11中的1已经在第1次被取到了,所以m=1

4.第四位0,前面没有重复 m=0

5.第五位00,取00是因为00中的04中已经有0了 所以m=4

6.第六位110,取110是因为11011中已经取了,再往后一位11已经在3中取了,所以m=3

7.第七位1这个是单独的1, 1中的1不一样,m=0


第三步:求j

j就是第一步中所求字符的末位

j={1,0,1,0,0,0,1}


第四步:求length

i=11i=210i=311i=40i=500i=6110i=71

length=log J (i) 向上取整 +1 

即以J为底,i 的对数,加一

在这里J=2(看第一步)


phraselength1110211303004110414

第五步:求codewords


十进制codewords=m * J + j

即i           codewords11223340586671

最后把codewords转换为J进制 在这里就是2进制 再把codewords变为指定length长度 长度不够用0补齐


即i        lengthcodewords11122103301143000541000640110740001

编码完成 看得很晕

0 0