当一件事情有多种可能情况时,这件事情对某人而言具体是哪种情况的不确定性叫作熵。而能够消除该人对这件事情不确定性的事物叫作信息。熵和信息数量相等,意义相反,获取信息意味着消除熵。
熵和信息都是可以度量的。
当一件事情是每种情况的概率分布是 时,它的熵就是
其中 一般以 为底。这其中的道理是把抛一枚硬币的不确定性看作单位 ,而因为不确定性的组合具有指数关系,所以要取一个 。
我们经常会遇到对一件大的不确定事件询问局部信息的情况,这时它提供的信息量就是当前这个局部的熵。
用例子来理解:基于比较的排序算法为什么下界 ?可以用鸽巢原理,但我们用信息熵来分析一下。这整个排列的熵是 ,而一次比较相当于是抛一次硬币,最多提供 的信息(我们在分析下界时都是假设我们对当前询问的局部一无所知,即每种情况的概率都相等,此时熵最大,得到信息最多)。于是我们就得到了下界。
而基数排序为什么可以更快?基数排序的基本操作是将一个数放到它对应的桶里。假设桶有 个,则最多提供 的信息。那么次数就可以分析为 ?那么 取 即可得到 ,明显错误。根据经验我们知道它还与值域有关,分析一下发现我们最后不仅得到了位置关系,还得到了每个数的值。那么假设值域为 ,最初的熵就是 ,次数为 。于是当值域小时可以做到 。
有趣的是,当我们对各种排序算法的每步提供的信息进行更细化的分析时,可以得到它们本质上为什么优和为什么劣。
还有一个比较有意思的结论是如果对一个符号系统(文字系统)求熵,那么它就等于这个符号系统的哈夫曼编码的平均长度。(这大概也是用bit这个单位的其中一个原因)
例题
交互题。
有一张试卷上有 道判断题,答案只有对与错。我们每次可以填写所有题的答案(不允许不填),交上去之后系统会反馈答对多少道题。要求在 次交卷之内获得满分。
或
这是 zzq在冬令营讲的,特别神仙的题。
考虑第一次询问都填对,这样可以得到对的题目的个数,设为 。然后接下来每次询问时把一个大小为 的集合填成对,其他填成错。这时我们可以通过解方程得到 中对的个数。具体地,若返回 ,则个数为
注意到这个除 ,因为个数必须是整数,所以 一定是偶数。这或许能提供更多的信息,若我们能得到这样的式子:,其中 是已经通过询问已知的, 是需要解方程求出的, 是一个未知的零一变量,那么我们就可以通过奇偶性得到 和 。
注意到我们现在把询问转化为对一个集合的询问,所以可以考虑递归划分子问题。
设 为一个子集的列表,执行这些询问之后可以得到子集 的完整正确答案。
考虑将 划分为两个大小相等的子集 ,那么可以递归处理。然而如果直接做的话与暴力 没有任何区别/cy。我们考虑上面的思路,需要构造 。这个看起来就是解方程得到的,所以我们考虑来构造一个方程。在 中分别拿出集合 。然后询问 。我们如果事先知道 中的对的个数那么就可以解出 了。注意要构造 ,那么我们在其中一个询问集合中加入一个元素,即询问 。
这时我们就构造出了那样的形式,即我们可以得到一个元素作为“赠品”。
来分析一下复杂度,用 表示(元素个数,询问次数),那么我们可以有 。即 是得到正确答案的同时还要问一次整个 个元素时的次数,那么转移时可以问一次 个元素,问一次 个元素,另外 个元素的个数就已知了。剩下的 个询问每两个都有一个赠品。
设 ,则 。即 是随着迭代线性增长,而 是指数增长,所以 ,,求反函数主要是注意到 和 是同阶的。
我们得到了一个询问次数为 的算法,打表一下发现可以通过。
现在用信息熵来分析一下,对于这张试卷,它的熵相当于 个硬币,是 ,而一次询问可以得到的信息最多为 ,因为最多区分了 种等概率事件。那么复杂度下界就是 。这表明这个算法的阶达到了下界,是一个非常优秀的算法。
一道趣题
这题我想到了5胜3的其中一种做法,但是我并不会扩展QAQ,去翻了翻这个人下面的评论,有人给出了5胜3另一种解法,还扩展到了 胜 ,即解决了第一问。
先说我的做法。考虑我们显然可以至少胜 次,即甲在第 次提示乙第 次上帝出什么。怎么改进呢?注意到如果有连续相同颜色,那么可能只需要一次提示就可以得到超过 分。基于这个思路:
甲观察上帝的序列,如果第 和 相同,那么在第一次提示乙 的颜色, 和 得分, 提示 的颜色, 得分。
否则,如果 和 相同,那么分别在 得分,不再赘述。
否则,即 和 分别不同色,那么甲在 分别提示乙 的颜色。注意到这时甲 出的颜色不同,而乙 与甲 出的相同,于是 不可能得分。这时乙就可以分辨出这是第三种情况,从而推断出 颜色不同,得知 的颜色,可以在 得分。
评论中的做法就更加简洁:
甲第一次提示乙 中颜色较多的那个,乙在 都出这个颜色,可以得到至少 分。而甲在 中颜色不同的那个位置提示乙 的颜色,可以在 得分。这个做法可以容易扩展:将 个位置掐头去尾之后 个一组,首尾各成一组,第 组提示第 组,即可得到 分。
考虑用信息熵去分析:我们如果用这样的模型:一个位置如果没有得分,那么可以提供 的信息(因为上帝给出的颜色是初始随机的,所以没有意义),如果得分,那么乙已知这个位置,所以没有提供信息。
我们会疑惑地发现这样分析,这个问题是无解的!信息不够!而上面已经有了两个解决问题的实例,它们是如何工作的呢?
对于做法二,它的想法比较简单: 的信息不一定只能支持得到一分。它提高了信息的利用率。
对于做法一,它的想法就比较牛逼了:注意当上帝是第三种情况时,我们真的通过前两次得到了 的信息!(第 位、第 位、 不同)这是怎么做到的?注意在如此制定策略的情况下,一种进入情况三的情况出现的的概率是 。这时套用上面的公式得到它的信息量确实是 。而相应地,其他情况下得到的信息就会更少。
这就比较神奇了,我们通过对问题进行分析,设计一个更合理的策略,在需要更多信息的情形提供更多信息,在其他情形减少冗余的信息!这里的策略可能可以用语言来类比,因为在分析某种语言的熵时,并不是用它图像上的像素点或什么东西分析,而是套用上面的公式:一个字出现的概率越高,提供的信息就越少。(当然,我在想出这个做法时并没知道这背后有这么深刻的原理/cy,又经过一番思考之后才得到的)
对于解决 胜 的终极问题,我觉得应该是需要综合这两种想法的。不过实在太过困难,等up更题解了。。
up主更了,很牛逼!其实这两种想法都是同一种想法,即对信息量公式的运用。对于做法二,它是给一些位置赋予了概率。比如给一个 ,是说接下来三个位置有两个 ,即每个位置有 的概率是 。这样是利用了信息的公式,仍然是可以解释的。