用信息论玩猜数字
Posted Jie Qiao
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了用信息论玩猜数字相关的知识,希望对你有一定的参考价值。
看到3b1b用信息论玩Wordle,这里写一个玩猜数字的简化版本.
用信息论玩猜数字
信息论中衡量一个事件的信息是否丰富是从概率出发,在信息论中,1bit的信息量对应着 − log 2 1 2 \\displaystyle -\\log_2\\frac12 −log221,意味着,这个事情发生的概率是 1 2 \\displaystyle \\frac12 21,且发生之后将能够帮助我们筛选掉一半的搜索空间。
直观来看,如果一个事件发生的概率越小,那么发生之后提供的信息就越多,而如果一个事件是常常发生的,那么其发生之后带来的信息也是不多的。
举个例子,一个猜数字游戏,在1-10中随机选择一个数字,然后每次会告诉你是否猜对,如果没猜对则告诉你比它大还是比它小。假设我们一开始猜5,然后告诉我们比5大,于是这个数字一定是[6,7,8,9,10]之中的一个,因此该事件发生的概率是
5
10
\\displaystyle \\frac510
105,而该事件蕴含的信息量就是1bit!它成功将空间减少了一半。
那如果比5小呢?意味着数字一定是[1,2,3,4]中的一个,概率是
4
10
\\displaystyle \\frac410
104,其信息量是
−
log
2
4
10
=
1.321928
b
i
t
\\displaystyle -\\log_2\\frac410 =1.321928\\ bit
−log2104=1.321928 bit,可以发现这个事件缩减的搜索空间更多,因此提供的信息量更大!
最后,如果结果是5猜对了,那么概率是 1 10 \\displaystyle \\frac110 101,信息量是 − log 2 1 10 = 3.321928 b i t \\displaystyle -\\log_2\\frac110 =3.321928\\ bit −log2101=3.321928 bit,是信息量最大的情况,这也是显然的,因为这个事件将搜索空间降低到了只有1个。
所以,就猜5而言,比它小跟比它大又或者猜对了所提供的信息量是不同的,那么这个策略能给我们的平均信息量是多少呢?显然将所有可能根据其发生的概率平均起来,就得到平均的信息量:
− 1 2 log 2 1 2 − 4 10 log 2 4 10 − 1 10 log 2 1 10 = 1.360964 b i t -\\frac12\\log_2\\frac12 -\\frac410\\log_2\\frac410 -\\frac110\\log_2\\frac110 =1.360964\\ bit −21log221−104log2104−101log2101=1.360964 bit
而这个就是熵的定义了!
这时候如果我们需要判断,猜哪个数字的决策最好?是不是相当于问,猜哪个数字,将搜索空间平均减少的最多,也就是猜哪个数据的平均信息量(熵)是最大的!因此,用类似的方法,我把所有的猜的数字的熵计算一下,可以得到如下表:
猜哪个数字 | 熵 |
---|---|
1 | − 1 10 log 2 1 10 − 9 10 log 2 9 10 = 0.4689956 -\\frac110\\log_2\\frac110 -\\frac910\\log_2\\frac910 =0.4689956 −101log2101−109log2109=0.4689956 |
2 | − 1 10 log 2 1 10 − 8 10 log 2 8 10 − 1 10 log 2 1 10 = 0.9219281 -\\frac110\\log_2\\frac110 -\\frac810\\log_2\\frac810 -\\frac110\\log_2\\frac110 =0.9219281 −101log2101−108log2108−101log2101=0.9219281 |
3 | − 2 10 log 2 2 10 − 7 10 log 2 7 10 − 1 10 log 2 1 10 = 1.15678 -\\frac210\\log_2\\frac210 -\\frac710\\log_2\\frac710 -\\frac110\\log_2\\frac110 =1.15678 −102log2102−107log2107−101log2101=1.15678 |
4 | − 3 10 log 2 3 10 − 6 10 log 2 6 10 − 1 10 log 2 1 10 = 1.295462 -\\frac310\\log_2\\frac310 -\\frac610\\log_2\\frac610 -\\frac110\\log_2\\frac110 =1.295462 −103log2103−106log2106−101log2《LeetCode之每日一题》:201.猜数字游戏 |