統計規律與資料編碼

2021-08-23 14:47:55 字數 1198 閱讀 3272

問題引入:

有100萬個字串,他們長度各異,分布在[1,256]這個區間內。請設計一種方法來依次記錄這些字串的長度。

要求:

用盡可能少的空間來儲存這些長度。

例子:

例如有下面四個串:

hello (5)

abc(3)

abcd(4)

good morning (12)

可以用2位元組來編碼他們的長度:5、3編碼到第乙個位元組,4、12編碼到第二個位元組,最後的二進位制表示就是:01010011 10001100。解碼的時候,每4位作為乙個解碼單元即可按順序解碼。

對於上面的例子,你有更好的編碼方案嗎?

a step further:

上面的例子中只有4個字串,而問題中有100萬個字串,並且注意到其長度分布只在[1,256]之間,我們能不能利用這個特殊的問題結構呢?

首先還是使用最簡單的解決方案:每個字串長度用1位元組來編碼(2^8 = 256,正好哦)。此時需要的空間為100萬位元組。

如果這100萬個字串的長度分布具有一定特徵呢?比如,1-15位元組長的字串佔90%,其餘的只佔10%,有沒有更好的編碼方式呢?舉個例子,拋磚引玉:

1~15用4bit位來編碼,其中1111用來做特徵碼,表示當前長度不是1-15,需要往後看。16~256用4+8 = 12bit編碼,且前4bit恒為1111,後8位填入實際長度。讓我們來算一算此時消耗掉的位元組數:

0.5byte * 100w * 90% + 1.5byte * 100w * 10% = 60w byte

比直接用1位元組編碼每個長度節約了40萬位元組!

看到這裡,你是不是想到了……

對,huffman編碼!高頻率的資料用較少位編碼,低頻率的資料用較多位編碼。但是,為了提高解壓速度,特別是在資料頻率分布呈現出一定的單調性的時候,我們可以對huffman編碼方法進行化簡,使得解碼時只需要通過判斷特徵碼就可以確定編碼方法。具體該怎麼做呢?留給天才的你來解決咯~~~

note: 長度編碼與huffman編碼的聯絡我起初還沒想到,是在敲這篇文章的時候邊敲邊想,突然聯絡起來的。嗯,一下上公升到規範化的理論階段了^___^

資料編碼技術

資料編碼技術型別和方法 1.資料編碼型別 在計算機中資料是以離散的二進位制0 1位元序列方式表示的。計算機資料在傳輸過程中的資料編碼型別,主要取決於它採用的通訊通道所支援的資料通訊型別。根據資料通訊型別,網路中常用的通訊通道分為兩類 模擬通訊通道與數字通訊通道。相應的用於資料通訊的資料編碼方式也分為...

資料編碼方式

4類資料傳輸方式 1 模擬資料用模擬訊號傳輸 2 模擬資料用數碼訊號傳輸 3 數字資料用模擬訊號傳輸 4 數字資料用數碼訊號傳輸 除第 1 種外,都需要資料編碼 1 模擬資料用模擬訊號傳輸 例如傳統的 2 模擬資料用數碼訊號傳輸 例如數位化 訊號數位化的轉換過程採用脈衝編碼調製 pcm pcm技術以...

資料編碼問題

1.檢查程式設定過濾器配置 一般第一步可能會去看spring專案中的web.xml是否設定了字元過濾器 2 檢查tomcat 配置檔案 server.xml 3 檢查資料庫連線 4 檢查日誌,檢視是否資料本身亂碼 5 追溯建立資料庫時選擇編碼是否正確。6 檢查資料庫整體編碼情況 show varia...