我想为数据存储选择一种编码方案。我的可用内存非常低。哪种编码应该最能最佳地利用可用空间。ANSI、UTF 或任何其他..
数据是大写字母
如果你知道字母的频率分布,Huffman Coding在复杂性、速度和效率之间取得了很好的平衡。
如果您不知道字母的分布或者它们是随机的,则一次存储 5 位。例如,考虑字符串“ABCDE”。字母数字是 0, 1, 2, 3, 4。转换为二进制,这是:
00000 00001 00010 00011 00100
现在您只需将每 8 位分组为字节:
00000000 01000100 00110010 0xxxxxxx
您还需要存储长度,以便您知道最后一个字节的 7 位中没有有用的数据。
如果不关心代码空间并且您只想尽可能地打包字符串,您可以使用 Huffman 编码或算术编码,即使频率分布均匀,也可以将每个字符平均打包为 log2(26) 位,即略小于 5(即 4.7 位)。