编码字符的最有效方法是什么? (关于内存)

问题描述 投票:-2回答:2

我有4个要编码的字符:TGAC有没有办法给他们一个“编码版本”,而不是ASCII?二进制将是最好的,但是对于二进制我只有0和1,并且如果我随后使用序列TGAC,则不清楚例如哪个字符为0,哪个1和哪个11。还有其他方法可以用最少的位数有效编码吗?谢谢

c encoding
2个回答
0
投票

我希望这会有所帮助。该网站提供了各种编码及其优势http://kunststube.net/encoding/


0
投票

有5个不同的值。由于3位可以编码8个值,因此您可以使用3位对每个值进行编码。

A = 000
D = 001
L = 010
M = 011
S = 100

这意味着3个字节可以编码8个不同的值。

+---+---+---+---+---+---+---+---+
| 0 | 0 | 0 | 1 | 1 | 1 | 2 | 2 |
+---+---+---+---+---+---+---+---+

+---+---+---+---+---+---+---+---+
| 2 | 3 | 3 | 3 | 4 | 4 | 4 | 5 |
+---+---+---+---+---+---+---+---+

+---+---+---+---+---+---+---+---+
| 5 | 5 | 6 | 6 | 6 | 7 | 7 | 7 |
+---+---+---+---+---+---+---+---+

这意味着该字符串在每个字节方法中只采用较幼稚的一个值的37.5%。

您需要某种方式来指示结束。我们可以使用我们不使用的三种3位编码之一(例如111)。


一种不同的方法是使用以7为底的数字。你知道如何

12345 10= 1 * 10 4+ 2 * 10 3+ 3 * 10 2+ 4 * 10 1+ 5 * 10 0

好吧,如果

Nothing = 0
A = 1
D = 2
L = 3
M = 4
S = 5

然后,

ASDDL= 1 * 7 4+ 5 * 7 3+ 2 * 7 2+ 2 * 7 1+ 3 * 7 0

n个字节允许floor(log7(2 **(n * 8)))= floor(n * 8 * log7(2))〜= floor(n * 2.850)值。

  • 1字节允许2个值
  • 2字节允许3个值
  • 3字节允许8个值
  • 4字节允许11个值
  • 5字节允许14个值
  • 6个字节允许17个值

因此,当我们一次编码17个值时,与第一种方法相比,我们得到的改进微不足道。真的不值得麻烦。

© www.soinside.com 2019 - 2024. All rights reserved.