《算法導論》中有一節講的是“(比較)排序算法時間的下界”,本文將論述同一個問題,思路略有差異。本文將從信息熵的角度論述排序算法時間復雜度的下界。若本文論述過程中有錯誤或是不足,還請各位指正。
1. 問題歸約
排序,涉及到被排序的序列和排序的方法。(比較)排序算法時間的下界對被排序的序列和排序方法做了以下限制
- 沒有關於被排序序列的先驗信息,譬如序列內數據的分布、范圍等,即認為序列內元素在一個開區間內均勻分布。同時,序列內元素互異。(可以從兩個方面理解元素互異的限制,其一是對於隨機的序列而言,兩元素相同的概率約為0;其二是比較排序中沒有對相同元素的特殊處理)
- 排序方法中僅僅利用了比較運算來確定元素的順序。不失一般性,假設每次比較僅取2個元素,比較其大小。
那么,對於輸入序列為長度為的序列
而言,比較的過程可以表示為從序列中選擇
,判斷
或是
。排序算法的輸出是
。排序的過程是輸入序列位置調整的過程,一旦給定輸入序列和算法,那么這個調整的過程是確定的,也就是說,結合排序算法和輸出的有序序列,可以知道輸入序列的排列方式。
(比較)排序算法的算法時間復雜度等價為確定輸入序列的排列方式需要多少次比較操作。
2 . 信息熵
香農對信息的定義是事物運動狀態和存在方式的不確定性描述。事件發生所含有的信息量(自信息量)可以表示為
對於隨機變量而言,定義其平均自信息量為信息熵,可表示為
對於排序問題,我們可以認為排序算法執行之前,對於待排列數據的沒有獲得任何信息。在排序過程中,獲得了信息使得待排列數據排列方式的不確定度減小了。待排列數據的排列方式共有種,因此其信息量為(單位:比特)
對於每次比較,可以獲得或是
,因此獲得的信息量是(單位:比特)
因此最少需要次比較才能夠解決這一問題。對應(比較)排序算法時間的下界為
。由於
,因此
3. 另一個問題
關於信息、自信息、信息量、信息熵的一個經典的問題可以描述如下
設有12枚同值硬幣,其中有一枚為假幣。只知道假幣的重量和真幣的重量不同,但不知道究竟是重還是輕。現采用天平左右兩邊輕重的方法來測量(沒有砝碼)。為了在天平上稱出哪一枚是假幣,試問必須稱多少次?
由於不知道假幣輕重,因此信息量為,每次測量可以獲得
的信息(輕-重、重-輕,一樣重),因此需要稱
我開始一直不覺得這個結果是對的,直到有人給出了各種數量硬幣在不同情況下需要稱的次數,我才接受了這個方法和結果。也就是說,選擇合適的測量方式,稱3次一定能夠找出哪一枚是假幣。