因為壓縮的比例存在著理論上的極限
假如我現在有A B C D 四個符號
要表示成數位資料的話 直觀的方法是讓A=00 B=01 C=10 D=11
ASCII code就是類似的7碼等長度編碼方法
不過呢 這五個符號出現的機率可能不是一樣的
假設Pr(A)=0.5 Pr(B)=0.2 Pr(C)=0.2 Pr(D)=0.1
那麼用上面直觀的方法編碼
我的codeword平均長度是 0.5*2+0.2*2+0.2*2+0.1*2=2
那麼我們有沒有辦法讓我的平均長度變得更小一點呢(也就是達到所謂的資料壓縮)
有的 我們可以善用A B C D四個符號出現機率不相等的特性
A出現的機率最高 所以我直觀上希望表示A的二進位長度可以短一點才有效率
D出現的機率最低 所以我就會希望表示D的二進位長度可以長一點沒關係
那麼換一個方式表示:A=0 B=10 C=110 D=111
這樣表示的話我新的codeword平均長度就是 0.5*1+0.2*2+0.2*3+0.1*3=1.8
比原本每個符號都用2個bits來表現還要更小
(註:這個編碼方法為著名的Huffman code)
所以我們可以發現 如果能善用資料間的相關性
是可以減少用數位來表示這些資料所需要的資料大小
但是當然不可能無限制的縮小
根據偉大的數學家 消息理論的開山始祖 Claude Shannon的source coding theorem
簡單來說
給定一個discrete memoryless source S 就像我上面的四個字母
那麼我們能夠達到的平均codeword長度會大於等於S的entropy
S的entropy定義成 n