引子
資訊是什麼?
在夏農的劃時代**發表前,我們對「資訊」這個詞的含義只有乙個模糊的概念。夏農針對「資訊」給出了乙個令人信服的定義,並且說明了如何對資訊進行定量計算,並對這個定義給出了數學證明。之後,我們對「資訊」的識別、傳輸、儲存、加工等才有了堅實的數學基礎;有了堅實的數學基礎,才發展出各種工程應用。
因此,毫不誇張,資訊理論是電腦科學的基石理論之一。
資訊熵
夏農對資訊的定義:資訊是不確定性減少的度量。換句話說,「資訊」,能減少事物的不確定性;如果乙個「資訊」對事物不確定性的減少沒有任何作用,那麼這個「資訊」的資訊量是0。
我非常喜歡這個定義。它如此簡潔美妙、直指本質,簡直已經超越數學,向哲學領域進軍。夏農真是劃時代的天才。
以上只是定性的描述。更偉大的是,夏農還給出了定量的計算公式:
資訊熵h(x)= -σp(x) logp(x)
其中p(x)是某件事情發生的概率。(這句話相對好理解但不夠嚴謹,更嚴謹的說法應為p(x)是x的概率質量函式)
同時夏農在**中給出了證明,為什麼資訊熵公式應該是對數,應該是這個表示式。
以下為夏農的證明,相對枯燥,對數學不感興趣的可以跳過這段,直接看後面結論。
現有一系列隨機事件 p1,p2,…,pn的集合,它們發生的概率已知。假設存在乙個能反映事件被選擇的結果的不確定度的度量 h(p1,p2,…,pn),那麼它應該滿足下列性質:
1.h 應該連續於pi;
2.若所有 pi 相等(都等於 1/n ),則 h應該是 n 的單調遞增函式(當可候選的事件數越多,不確定度相應地也越大)
證明:令 h(1/n,1/n,…,1/n)=a(n)
根據條件3,從事件集合 s中一次選擇 m個事件 sm等價於從 s中選擇 m次乙個事件:
a(sm)=ma(s)
同理,有
a(tn)=na(t)
令 n 足夠大,我們能找到乙個 m 滿足 sm≤tn<sm+1
取對數:m/n≤logt/logs≤(m/n+1/n)
|m/n-logt/logs|<α
其中α是任意小的數。
由 a(n)的單調性:
a(sm)≤a(tn)≤a(sm+1)
ma(s) ≤na(t) ≤(m+1)a(s)
同時除以 na(s):
m/n≤a(t)/ a(s)≤(m/n+1/n)
|m/n- a(t)/ a(s)|<α
| a(t)/ a(s)- logt/logs|<2α
注意到α是任意小的數,因此2α也是任意小的數。
故a(t)=klogt
前面是基於等概率求得的。現在假設我們依然從 n個事件裡選取事件,但這次不再是等概率了,第 i個事件被選取的概率為 pi=ni/σni。再一次使用性質3,將從總共有 σni中可能的事件集中一次選取 n個事件分解為以概率 pi,…,pn 選取 n 次,且第 i 個被選取後,從 ni中選取是等概率的,那麼有:
klogσni=h(p1,…,pn)+kσpilogni
h=k[σpilogσni-σpilogni] = -kσpilog(ni/σni)= -kσpi logpi
(非等概率的這部分證明其實沒有完全看明白,暫時先記到這裡吧。)
至此,得證。
以上的數學證明,簡化一下是這樣子的:
如果我們把資訊定義為乙個度量h。並且h滿足如下性質:
①h 應該連續於pi;②若所有 pi 相等(都等於 1/n ),則 h應該是 n 的單調遞增函式(當可候選的事件數越多,不確定度相應地也越大);③若其中乙個選擇被分解為兩個連續的子選擇,那麼原始的 h 值應該為分解後的 h 值的加權平均和。
這些性質是和我們通俗理解上的「資訊」是一致的。
那麼,夏農就從數學上證明了,這個度量h就必須是夏農給出的對數表達形式:h(x)=-σp(x) logp(x)
夏農公式
夏農資訊理論首先在通訊領域大放異彩,之後在加密解密、壓縮、自然語言識別等多個領域都體現出了巨大價值。
資訊熵是夏農資訊理論中的第乙個重要概念,之後還有另乙個有名的公式:夏農公式。
下一回,我們再說這個著名的夏農公式。
一起來學Go go的變數
變數是幾乎所有程式語言中最基本的組成元素,從根本上說,變數相當於是一塊資料儲存空間的命名,程式可以通過定義乙個變數來申請一塊資料儲存空間,之後可以通過引用變數名來使用這塊儲存空間。go語言中的變數使用方式與c語言接近,但具備更大的靈活性。變數的宣告 go語言引入了關鍵字ver,而型別資訊放在變數名之...
一起來學Go go的變數
變數是幾乎所有程式語言中最基本的組成元素,從根本上說,變數相當於是一塊資料儲存空間的命名,程式可以通過定義乙個變數來申請一塊資料儲存空間,之後可以通過引用變數名來使用這塊儲存空間。go語言中的變數使用方式與c語言接近,但具備更大的靈活性。變數的宣告 go語言引入了關鍵字ver,而型別資訊放在變數名之...
我們一起來學Shell shell的函式
我們一起來學shell 初識shell 我們一起來學shell shell的變數 我們一起來學shell shell的條件判斷 我們一起來學shell shell的迴圈控制 我們一起來學shell shell的陣列 我們一起來學shell shell的函式 我們一起來學shell shell的併發及...