2016-08-30 66 views
-3

我需要一些簡單的壓縮算法的幫助。如何編寫壓縮算法?

我有兩個無符號短褲列表 - 一個用於輸入,另一個用於輸出。輸入列表以數千個值開始,並且輸出列表開始爲空。

我想用在輸出「減壓指令」值來代替輸入的值相同的重複運行。

我希望它未來的輸入位置的掃描下一個2-15的值,然後掃描輸入位置後面2-120值,然後找到最佳匹配將被添加到輸出作爲一個單一的值,而不是整個運行。這個值本質上是一個'解壓指令',等於2 *(a +(b * 512)+8192),其中'a'是回掃描的距離,'b'是向前掃描的距離。所有這些價值因此將落入16384-32767範圍內。如果未找到匹配項,則輸入位置處的值將被逐字複製。

這將產生其中,爲了在未來進行解壓,16384和32767之間的所有值被讀取爲解壓縮的指令的輸出,以及所有其他值是從字面上複製。

它並不需要儘可能有效地壓縮數據 - 它僅需要壓縮,直到輸出是6650或更小的長度。

雖然我知道有無數的壓縮例程已經上市,會做一個更好的工作比這個會,我需要爲特定目的而這個確切的程序。我真的似乎無法正常工作。

如果在那裏有任何優秀的算法編寫者,我很樂意聽取您的意見。

+3

這不是一個代碼寫入服務。如果你需要幫助,你應該詳細說明你嘗試了什麼,以及爲什麼它不起作用。 –

+0

我甚至沒有暗示我想要別人寫代碼。請理解我只是在尋求幫助 - 例如我如何實施匹配例程以保持效率或其他此類建議。假設是一回事,但跳到結論然後跳過某人是另一回事。向前走,最好向線索起始者詢問他或她是否在請求他人編寫他們的代碼之前做出不明情況的指控。 –

+0

看看https://en.wikipedia.org/wiki/Data_compression。維基百科是開始進行廣泛主題的好地方。歡迎來到stackoverflow!您可能想閱讀http://stackoverflow.com/help/on-topic。 –

回答

0

如果你有很多重複的值,然後簡單地從每一個值(除了第一個),它前面的值中減去。你將最終得到長長的零。然後使用標準壓縮例程(如zlib)或命令行上的gzip壓縮。解壓縮後,撤消減法以恢復原始數據非常簡單。

+0

閱讀原始帖子中的倒數第二段。 –