当您不需要保留订单时,可以编码为更少的位吗?

时间:2010-02-02 18:19:03

标签: list encoding binary theory multiset

假设你有一个32位整数列表和一个Multiset中的32位整数集合(一个允许重复成员的集合)

由于集合不保留顺序但是List do,这是否意味着我们可以用比List更少的位来编码Multiset?

如果是这样,您如何编码Multiset?

如果这是真的,那么其他哪些例子不需要保存订单保存位?

注意,我只是使用32位整数作为示例。数据类型在编码中是否重要?数据类型是否需要固定长度并且与您相比可以节省成本?

修改

任何解决方案都应该适用于重复率低且重复率高的集合。只需简单地计算重复数据就可以很容易地对多重编码进行高重复编码,但如果集合中没有重复,这会占用更多空间。

5 个答案:

答案 0 :(得分:1)

在multiset中,每个条目都是一对数字:整数值,以及在集合中使用它的次数。这意味着多重集中每个值的额外重复不再需要存储(您只需增加计数器)。

然而(假设两个值都是整数),如果每个列表项平均重复两次或更多次,那么存储只比简单列表更有效 - 可能有更高效或更高性能的方式来实现这一点,具体取决于范围,稀疏度和重复存储的数字。 (例如,如果您知道任何值的重复次数不会超过255次,则可以使用字节而不是int来存储计数器)

这种方法适用于任何类型的数据,因为您只是存储每个数据项的重复次数。每个数据项都需要具有可比性(但仅限于您知道两个项目相同或不同的点)。每个项目都不需要使用相同数量的存储空间。

答案 1 :(得分:0)

如果多重集中存在重复项,则可以将其压缩到比天真列表更小的大小。您可能需要查看Run-length encoding,它可以用来有效地存储重复项(一种非常简单的算法)。

希望这就是你的意思......

答案 2 :(得分:0)

数据压缩是一个相当复杂的主题,并且数据中存在难以用于压缩的冗余。

它基本上是临时的,因为缩小某些数据集的非损耗方案(可以恢复输入数据的方案)必须扩大其他数据集。具有大量重复的整数集合在多图中会很好,但是如果没有重复,则在重复计数为1时会占用大量空间。您可以通过在不同文件上运行压缩实用程序来测试它。文本文件具有很多冗余,通常可以进行大量压缩。随机数字文件在压缩时会增加。

我不知道在丢失订单信息方面确实存在可利用的优势。这取决于实际数字是多少,主要是因为有很多重复。

答案 3 :(得分:0)

原则上,这相当于对值进行排序并存储第一个条目以及后续条目之间的有序差异。

换句话说,对于人口稀少的集合,只能进行少量保存,但对于更密集的集合或具有集群条目的集合 - 可能会有更大的压缩(即每个条目需要存储的位数较少,可能在许多重复的情况下少于一个)。即压缩是可能的,但水平取决于实际数据。

答案 4 :(得分:0)

操作排序后跟列表delta将导致序列化表单更容易压缩。

E.G。 [2 12 3 9 4 4 0 11] - > [0 2 3 4 4 9 11 12] - > [0 2 1 1 0 5 2 1]重约一半。