1. 程式人生 > >數學中的熵-相關問題

數學中的熵-相關問題

1. 猜數字遊戲

A 寫下一個數 $x$,其取值範圍為 $x\in [1,n]$,B 來猜這個數字是多少,A 會告訴 B 猜的數字比 $x$ 大了還是小了,問 B 最少猜多少次可以猜出這個數字?

把 $x$ 看作一個隨機數,他的取值範圍是$[1,n]$,B 第一次任意猜一個數,猜中的概率是 $P(x) = \frac{1}{n}$。利用數學中的熵的定義,B 猜中的熵是
$$S_{x\in[1,n]} = -\Sigma_{x\in[1,n]}{P(x)\log_2 P(x)} = \log_2 n$$

假如 B 第一次猜的數是 $y$,則 $P(x\in[1,y]) = \frac{y}{n}$,$P(x\in(y,n]) = \frac{n-y}{n}$, 則 條件熵(給定條件下的熵)為 $$S_1 = P(x\in[1,y])S_{x\in[1,y]} + P(x\in(y,n])S_{x\in[y,n]}\ =\frac{y}{n} \log_2 y +\frac{n-y}{n}\log_2 (n-y)$$

求 $y$ 取何值時,熵最小?
$$\frac{dS_1}{dy} = 0\rightarrow y = \frac{n}{2}$$

所以每次都猜一個區間的中間值是最優的選擇。由於 A 會告訴 B 兩種狀態,因此 B 只需要猜 $\lceil\log_2 n \rceil$ 就可以猜出 A 給定的數。n 代表可取的狀態數,2 代表給定資訊的個數

2. 排序問題

有 $n$ 個互不相等的數,需要通過多少次比較才可以將這些數從小到大排序?

比較兩個數 $a,b$ 的大小有兩種狀態,所以對數的底應取為 2,n 個數排序的方式,即可取的狀態數為 $A_n^n = n!$,所以需要比較 $\lceil(\log_2 n!)\rceil$ 次。

3. 猜球問題

有 n 個球,其中有一個球與其他 n-1 個球的重量不一樣,現在有一個天平,問需要稱多少次可以找出這個球?

天平有三種狀態,故對數的底應為3,n 個球要麼重了要麼輕了,故有 2n 中狀態數,所以需要稱 ($\lceil\log_3 2n\rceil$) 次可以找出這個球。