C# 是否可以将8个数字(0-3)压缩到两个字节以下?

C# 是否可以将8个数字(0-3)压缩到两个字节以下?,c#,math,encoding,compression,encode,C#,Math,Encoding,Compression,Encode,给定一个由8个介于0-3之间的数字组成的数组,是否可以将其压缩到2字节以下 即: int[]数组={3,2,0,0,1,0,2,2} 通过将3,2,0,0和1,0,2,2组合在一起,我可以创建11100000(224)和01001010(74)字节,但我想知道是否有其他方法可以通过编码将其减少到2字节以下?8个数字,每个数字有4个选项,将允许48=2(8⋅2) 不同的组合,所以您需要有两个字节来对它们进行编码 根据输入的详细信息,可能会找到一个ecoding,其中典型输入的编码长度小于两个字节。

给定一个由8个介于0-3之间的数字组成的数组,是否可以将其压缩到2字节以下

即:

int[]数组={3,2,0,0,1,0,2,2}


通过将3,2,0,0和1,0,2,2组合在一起,我可以创建11100000(224)和01001010(74)字节,但我想知道是否有其他方法可以通过编码将其减少到2字节以下?

8个数字,每个数字有4个选项,将允许48=2(8⋅2) 不同的组合,所以您需要有两个字节来对它们进行编码


根据输入的详细信息,可能会找到一个ecoding,其中典型输入的编码长度小于两个字节。但是,您需要为非典型输入使用两个以上的字节来为此付费。

如果您添加一些示例,或更多关于输入和输出的详细信息,那就太好了]每个数字有4个可能的值,8个数字。这意味着4^8或2^16个不同的组合。如果对数字没有其他限制,这表明您需要16位或2字节。0-3之间的数字需要2个二进制位来存储,因此其中8个是16位(即2字节)我怀疑你能把它压缩到2个字节以下,因为你需要将额外的信息编码到比特中,以指示1个数字何时停止,下一个数字何时开始。完美地表示输入,不,没有办法。使用运行式编码技术,您可以使用数字为2位,计数为3位(3位,因为数字的最大长度为8)的模式,将其降至最低5位。如果数字列表是8个相同的数字(例如
{0,0,0,0,0,0,0,0}
),那么它可以以二进制形式存储为
00111
,前两位表示数字
0
,其余三位表示运行长度
8
(在
{1,8}
,因为存储
0
的运行长度是毫无意义的)。