簡體   English   中英

自定義壓縮算法的效率

[英]Efficiency of custom compression algorithm

我有一個壓縮算法的想法,我有兩個問題:

  1. 我應該處理嗎? 會有效嗎?
  2. 我該如何優化它?

這是我到目前為止創建的算法。

int i = 0,j, diff, beginIndex = 0;
while(i < tmp.length){
    j = i;
    byte first = tmp[i];
    int total = 0;
    while(j < tmp.length && first == tmp[j] && total < 127){ j++; total++;}

    if(total > 3){
        if(beginIndex != i){
            diff = i - beginIndex;
            packed.put((byte)diff);
            packed.put(tmp, beginIndex, diff);
        }
        packed.put((byte)(0x80 | total));
        packed.put(tmp[i]);
        beginIndex = j; 
    } 

    i = j;

    if(i-beginIndex == 127){
        packed.put((byte)127);
        packed.put(tmp, beginIndex, 127);
        beginIndex = i;
    }
}

if(beginIndex < i){
    diff = i - beginIndex;
    packed.put((byte)diff);
    packed.put(tmp, beginIndex, diff);
}

示例輸入(每個字母描述一個字節)

[A, B, C, D, E, E, B, B, A, A, A, A, A, A, A, A, A, A, A, A, A, B, B, B, B, C, C] = 27 bytes

示例輸出

[0x80, A, B, C, D, E, E, B, B, 0x8D, A, 0x84, B, 0x82, C, C] = 16 bytes

在示例中,0x80是打包位。 表示是否會重復以下信件。 0xFF - 0x80 = 0x7F是最大重復次數(127)。 因此,0x8D表示后續字節將重復0xD(13)次

任何想法優化該算法? 它會有用還是我會擺脫這個想法?

問題是,你的算法的目的是什么?

要發明一些真正新的東西,你需要檢查一下之前發明的東西。 閱讀一些有關數據壓縮等的論文和書籍。 數據壓縮說明可以是一個很好的起點。

如果你只想練習編寫算法,那就完全沒問題了。 繼續改進算法,重構,加速,分析等。

如果您希望算法實用,請再次檢查之前創建的內容。 開源壓縮算法,如zlib值得研究。

如果您想檢查算法與其他算法的比較,請在一些常用測試中運行,例如Silesia Open Source Compression Benchmark 這將給你一個直覺,你站在哪里(這可能有點令人失望,但不要放棄)。

最后,如果你想玩得開心,只要做你想做的事,不要聽任何人。

你發明了游程編碼 大多數壓縮算法已經包含了一種運行長度編碼,它將執行您的實現並在更多情況下更好地工作。 如果我是你,我不會追求它。

如果您對數據壓縮感興趣,我強烈建議您將管理千兆字節的第2章和第6章作為一個非常易於閱讀的內容。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM