2010-02-02 28 views
3

假設你有一個32位整數列表和一個Multiset中的32位整數集合(一個允許重複成員的集合)當你不需要保存命令時,你可以編碼到更少的位?

既然集合不保留順序,但是List do,這是否意味着我們可以使用比List更少的位對Multiset進行編碼?

如果是這樣,你將如何編碼Multiset?

如果這是真的,那麼有什麼其他的例子不需要保存順序保存位?

請注意,我只是以32位整數爲例。數據類型是否在編碼中很重要?數據類型是否需要固定長度並且可以比較以獲得節省?

編輯

任何解決方案應該具有低複製和高複製收藏工作。很明顯,對重複編碼Multiset很重要,只需簡單地對重複進行計數就非常容易,但如果集合中沒有重複,則需要更多空間。

+0

32位整數是否有預期的相似性? – recursive 2010-02-04 19:39:10

+0

沒有。該解決方案應該隨機收集整數 – Pyrolistical 2010-02-04 19:47:05

回答

0

如果multiset中存在重複項,則可能會將其壓縮爲比原始列表更小的大小。你可能想看看Run-length encoding,它可以用來有效地存儲重複項(一個非常簡單的算法)。

希望這是你的意思......

1

在多集,每個條目是一對數字:整數值,以及它是如何多次在集中使用的計數。這意味着multiset中每個值的額外重複不需要花費更多的時間(您只需增加計數器)。

但是(假設兩個值都是整數),如果每個列表項重複平均重複兩次或更多次,這隻會比簡單列表更有效的存儲 - 可能會有更高效或更高性能的方式來實現此操作,具體取決於存儲的數字的範圍,稀疏性和重複性。 (例如,如果您知道任何值不會超過255次重複,則可以使用字節而不是int來存儲計數器)

此方法適用於任何類型的數據,因爲您只是存儲每個數據項的重複次數。每個數據項都需要具有可比性(但僅限於知道兩個項目相同或不同的點)。這些項目不需要每個存儲容量相同。

0

數據壓縮是一個相當複雜的問題,並且在數據中存在冗餘,難以用於壓縮。

它基本上是特設的,因爲縮小一些數據集的非有損方案(可以恢復輸入數據的方案)必須擴大其他方案。具有大量重複的整數集合在多重映射中會表現得很好,但如果沒有重複,則重複計數爲1時會使用大量空間。您可以通過在不同文件上運行壓縮實用程序來測試它。文本文件有很多冗餘,通常可以壓縮很多。隨機數字文件在壓縮時會趨於增長。

我不知道在丟失訂單信息時確實存在可利用的優勢。這取決於實際的數字是什麼,主要是如果有很多重複或沒有。

+0

這不是關於數據壓縮。這是關於數據編碼的 – Pyrolistical 2010-02-02 19:34:13

+1

如果您在儘可能少的空間討論編碼問題,那就是數據壓縮。這就是數據壓縮。 – 2010-02-02 20:13:12

0

原則上,這相當於對值進行排序並存儲第一個條目和後續條目之間的有序差異。

換句話說,對於稀疏填充的集合,只能進行很少的保存,但對於更密集的集合或具有集羣條目的集合 - 可以進行更顯着的壓縮(即,每個條目需要存儲更少的位,在很多重複的情況下可能不到一個)。即壓縮是可能的,但水平取決於實際數據。

0

操作類型後跟列表增量將導致序列化的形式,更容易壓縮。

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],重量約爲其的一半。

相關問題