在這個大資料時代,我們儲存的資料量有時候往往是非常龐大的,儲存它將會耗費非常多的記憶體,讀取速度也相對減慢了。
因此常常需要對資料進行壓縮編碼儲存,等到要用到這個資料的時候再解壓縮就行,這樣不僅可以節約大量的儲存空間,而且節省了系統讀取和反應的時間。
柵格資料壓縮編碼的方法有很多種,包括鏈式編碼、行程編碼、塊式編碼和四叉樹編碼。今天我們就來講一下行程編碼(也叫遊程編碼)。
首先從乙個簡單的例子開始:編碼乙個在 5 * 5 方塊上使用三種顏色繪製的影象。
圖 1根據方塊不同的顏色匹配不同的字母。這裡使用y代表黃色,使用g代表綠色,使用b代表藍色。
那麼,根據這樣的規則,圖 1 的圖形編碼就變成了 25 個字母,如圖 2 所示。
圖 2接下來,我們通過使用遊程編碼的方式來表示這個影象,以便使用 25 個字元以下的字元來表示。
遊程編碼是一種將**和重複的次數作為一組來編碼的方法。
例如,我們可以通過將第乙個 「yyyy」 的部分表示未 「y4」,這樣就可以將其縮短兩個字元。
按照這種操作,圖 2 的 25 個字元就能縮短為 20 個字元了。
** 3
這樣,如果我們知道每行有 5 個方塊,原始影象就可以從**中提取出來了。這種還原的操作也就是我們俗稱的解壓。
當然,遊程編碼也不是萬能的,它也有它的適用性與侷限性。
圖 4觀察圖 4 的影象與對應的**,可以發現:雖然使用遊程編碼使得總體的字元數減少,但對於那些不具備相同顏色的部分,在進行遊程編碼後,字元數反而會增加。
圖 5特別的,如果對連續性極其差的資料進行遊程編碼,字元數不減反增:資料翻倍到 50 個字元了。
當然,對於具有連續性的資料進行遊程編碼,那壓縮量就十分可觀了。
圖 6因此,根據要編碼的資料,遊程編碼可能具有壓縮效果,也可能不具有壓縮效果。
所以,對一定數量連續的資料使用遊程編碼才是正確的使用時機。
再舉個例子,考慮一下在單色傳單上使用遊程編碼。
** 7
如** 7 所示,使用 w (white)和 b(black)字母來表示每個方塊。
按照這樣的邏輯,一開始只需要 25 個字元就能表示完畢。
如果使用遊程編碼,那麼最終的表達結果是需要 26 個字元表示。所以,在這種情況下,使用遊程編碼是沒有意義的。
但仔細觀察,在黑白影象中僅僅使用了黑和白這兩種顏色。因此,在連續的白色方塊之後必定出現的是黑色方塊。那麼即使沒有字母 w 和字母 b,依舊可以通過**還原恢復影象。
圖 8如圖 8 所示,通過省略字母 w 和字母 b,僅僅只需要 13 個字元就能表示影象,相對於之前的需要 26 個字元表示壓縮了一半的大小。
當然,這樣顯示是有乙個要求的,那就是**的第乙個數字必須是白色方塊的連續數。只有使用了這個規則,才能通過**還原出之前的影象。
圖 9所以,對於圖 9 這種開頭是黑色方塊的影象的**,需要在**的開頭處新增 0 ,這樣就也遵守了**的第乙個數字必須是白色方塊的連續數這條規則。
加密演算法 科普文
明文 plaintext 待加密資訊。密文 ciphertext 經過加密後的。加密 encryption 將明文轉換為密文的過程。解密 decryption 將密文轉換為明文的過程。科克霍夫原則 kerckhoffs principle 資料的安全基於金鑰而不是演算法的保密。加密演算法分為對稱加密...
資料壓縮演算法 遊程編碼RLE
了解一下資料壓縮演算法 壓縮演算法主要分為兩類1.有失真壓縮 2.無失真壓縮 有失真壓縮有很多種,這裡說一下無失真壓縮。無失真壓縮演算法 行程編碼 遊程編碼 rle run length encoding 哈夫曼編碼。遊程編碼 例如 資訊單元0304,03表示其後的象素個數是3個,04表示這些象素使...
UVA 11235 遊程編碼 ST演算法
題目大意 給定乙個公升序序列,有q次詢問,每次詢問 l,r 出現最多的值的次數。解題思路 非常麻煩的題目。儘管一眼就能看出來是個rmq。關鍵在於如何轉化為rmq。首先對序列進行遊程編碼,壓縮成pos段。編碼的同時用num i 記錄當前點在段中編號,lb i 記錄在當前段的左邊界,更新code pos...