香农(Shannon)编码是一种常见的可变字长编码,与哈夫曼编码相似,当信源符号出现的概率正好为2的负幂次方时,采用香农-范诺编码同样能够达到100%的编码效率。香农编码的理论基础是符号的码字长度Ni完全由该符号出现的概率来决定,即-logDPi≤Ni≤-logDPi+1,式中,D为编码所用的数制。香农编码的步骤如下:(1)将信源符号按其出现概率从大到小排序;(2)计算出各概率对应的码字长度;(3)计算累加概率;(4)把各个累加概率由十进制转化为二进制,取该二进制数的前Ni位作为对应信源符号的码字。二分法香农-范诺编码方法的步骤如下:(1)将信源符号按照其出现概率从大到小排序;(2)从这个概率集合中的某个位置将其分为两个子集合,并尽量使两个子集合的概率和近似相等,给前面一个子集合赋值为0,后面一个子集合赋值为1;(3)重复步骤(2),直到各个子集合中只有一个元素为止;(4)将每个元素所属的子集合的值依次串起来,即可得到各个元素的香农编码。香农编码严格意义上来说不是最佳码,它是采用信源符号的累计概率分布函数来分配码字。