List 当你没有';你不需要维持秩序吗?

List 当你没有';你不需要维持秩序吗?,list,encoding,binary,theory,multiset,List,Encoding,Binary,Theory,Multiset,假设您有一个32位整数列表和一个多集合(允许重复成员的集合)中相同的32位整数集合 既然集合不保留顺序,但列表保留顺序,这是否意味着我们可以用比列表更少的位来编码多集合 如果是这样,您将如何对多集进行编码 如果这是真的,还有哪些不需要保留顺序就可以保存位的例子 注意,我只是使用32位整数作为示例。数据类型在编码中重要吗?数据类型是否需要固定长度和可比性才能节省成本 编辑 任何解决方案都应该适用于具有低重复和高重复的集合。显然,通过简单地计算重复项来对多集进行高重复编码非常容易,但如果集合中没有重

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

既然集合不保留顺序,但列表保留顺序,这是否意味着我们可以用比列表更少的位来编码多集合

如果是这样,您将如何对多集进行编码

如果这是真的,还有哪些不需要保留顺序就可以保存位的例子

注意,我只是使用32位整数作为示例。数据类型在编码中重要吗?数据类型是否需要固定长度和可比性才能节省成本

编辑


任何解决方案都应该适用于具有低重复和高重复的集合。显然,通过简单地计算重复项来对多集进行高重复编码非常容易,但如果集合中没有重复项,则会占用更多空间。

如果多集中有重复项,则可以将其压缩到比原始列表更小的大小。您可能想看看,它可以用来高效地存储副本(一个非常简单的算法)


希望这就是您的意思…

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

但是(假设两个值都是整数),如果每个列表项平均重复两次或两次以上,则这将比简单列表更高效。根据存储的数字的范围、稀疏性和重复性,可能有更高效或更高性能的实现方法。(例如,如果您知道任何值的重复次数不会超过255次,则可以使用字节而不是int来存储计数器)


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

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

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


我不知道丢失订单信息是否真的有可利用的优势。这取决于实际数字是多少,主要是是否有大量重复。

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


换句话说,对于人口稀少的集合,只能进行很少的保存,但是对于更密集的集合,或者具有集群条目的集合,可以进行更有效的压缩(即,每个条目需要存储的位更少,在多个重复项的情况下,可能少于一个)。也就是说,压缩是可能的,但级别取决于实际数据。

操作排序后紧跟列表增量将生成更易于压缩的序列化表单


例如,[2 12 3 9 4 0 11]->[0 2 3 4 9 11 12]->[0 2 1 1 0 5 2 1],其重量约为原来的一半。

这与数据压缩无关。这是关于数据编码如果你说的是在尽可能少的空间中编码,这是关于数据压缩。这就是数据压缩的含义。32位整数之间有相似之处吗?没有。该解决方案应适用于整数的随机集合