我们知道,在十进制的世界里面,如果我想把3个数字:7,34,562拼接成一个长整数:734562,一般我们会这样做: 7 * 100000 + 34 * 1000 + 562 = 734562 那么在二进制的世界中,我们应该如何把三个二进制数: 在 Python 中,移位操作的符号是
结果如下图所示: 这个数字 bin(1 << 3) 运行结果如下图所示: 所以, 那么第二个问题,现在我已经有了一个二进制数
如下图所示: 于是,如果我们把 所以,如果要把 bin(1 << (0b11).bit_length() | 0b11 << 0b10.bit_length() | 0b10) 运行效果如下图所示: 好了,理论讲完了。我们来看看上面这个理论可以用了干什么事情。 现在我给你一个汉字到二进制数的对应表:
那么,对于绕口令: 我们在 Python 里面,看看这个二进制数对应的十进制数是多少: 我们来看看这个数字,它占用的储存空间是多少: 只占用32 byte 的内存(sys.getsizeof 返回的数据会比实际占用的空间大)。 再来看看原来绕口令字符串所占用的空间: 通过这样一个二进制的映射,我们把字符串的大小缩减为原来的30%。压缩率高达70%! 但不要忘记,如果要还原数据,我们还需要上面的汉字与二进制数的对应表。所以,需要压缩的数据越大,重复率越高,那么压缩效率就越好。 以上就是霍夫曼(Huffman)编码的基本原理了。其中字符到二进制的对应关系是通过字符出现的概率来算的,出现概率越高,它对应的二进制数就越短,这样就可以保证转换后的总二进制数最短。 |
|
来自: 西北望msm66g9f > 《编程》