如何编码项目列表并指定顺序

时间:2015-11-12 22:26:13

标签: encoding compression binary-data huffman-code

我不确定问这个问题的最好方法,所以让我先举一个例子。

假设我有一个完整的可能项目列表(i1,i2,i3,i4,...... i128)。我想要的是指定一个子列表(我们称之为列表A),它指定列表中的哪些项目,以及列表的顺序是什么。现在让我说我想以尽可能小的方式对其进行编码。让我们说列表A在下面:

i1, i2, i5, i20, i50, i80, i103, i121

如果我知道我的项目总是按顺序排列,那么我想我可以轻松地制作一个数组,其中1表示该项目存在,0表示它不存在。在我的例子中,我有128个可能的项目,所以我可以表示16个字节中存在的内容。所以列表A将是

1100100000000000000100.......
In Bytes: C8 00 10 00 00 00 40 00 .....

但现在,我怎么能以这样的方式表达订单,以至于我不再使用8个字节?

我意识到,对于这个例子,通过将每个项目分配给特定值,然后将这些值按照我想要的顺序放置,但是如果我的列表大于16个项目,则按顺序编码列表的数据会少一些,然后我会开始使用更多的数据来编码它们。

有没有更好的方法来解决这个我没想到的?我希望我所说的有道理。如果我能澄清任何事情,请告诉我,并提前感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

将排列编码为factoradic integer。对于许多项目,您将需要大量的例程。在最坏的情况下,它需要90个字节,其中你有128个项目的排列。请注意,每个项目使用7位来简单地存储序列需要112个字节。

在仅显示八个项目的情况下,需要两个字节来编码排列。虽然使用位图的16个字节,但总共有18个字节。而不是直接编码值的七个字节。

总的来说,由于你的序列仅限于非重复值这一事实,你不会看到很多好处。