排序算法时间复杂度的下界
《算法导论》中有一节讲的是“(比较)排序算法时间的下界”,本文将论述同一个问题,思路略有差异。本文将从信息熵的角度论述排序算法时间复杂度的下界。若本文论述过程中有错误或是不足,还请各位指正。
1. 问题归约
排序,涉及到被排序的序列和排序的方法。(比较)排序算法时间的下界对被排序的序列和排序方法做了以下限制
- 没有关于被排序序列的先验信息,譬如序列内数据的分布、范围等,即认为序列内元素在一个开区间内均匀分布。同时,序列内元素互异。(可以从两个方面理解元素互异的限制,其一是对于随机的序列而言,两元素相同的概率约为0;其二是比较排序中没有对相同元素的特殊处理)
- 排序方法中仅仅利用了比较运算来确定元素的顺序。不失一般性,假设每次比较仅取2个元素,比较其大小。
那么,对于输入序列为长度为的序列而言,比较的过程可以表示为从序列中选择,判断或是。排序算法的输出是。排序的过程是输入序列位置调整的过程,一旦给定输入序列和算法,那么这个调整的过程是确定的,也就是说,结合排序算法和输出的有序序列,可以知道输入序列的排列方式。
(比较)排序算法的算法时间复杂度等价为确定输入序列的排列方式需要多少次比较操作。
2 . 信息熵
香农对信息的定义是事物运动状态和存在方式的不确定性描述。事件发生所含有的信息量(自信息量)可以表示为
对于随机变量而言,定义其平均自信息量为信息熵,可表示为
对于排序问题,我们可以认为排序算法执行之前,对于待排列数据的没有获得任何信息。在排序过程中,获得了信息使得待排列数据排列方式的不确定度减小了。待排列数据的排列方式共有种,因此其信息量为(单位:比特)
对于每次比较,可以获得或是,因此获得的信息量是(单位:比特)
因此最少需要次比较才能够解决这一问题。对应(比较)排序算法时间的下界为。由于,因此
3. 另一个问题
关于信息、自信息、信息量、信息熵的一个经典的问题可以描述如下
设有12枚同值硬币,其中有一枚为假币。只知道假币的重量和真币的重量不同,但不知道究竟是重还是轻。现采用天平左右两边轻重的方法来测量(没有砝码)。为了在天平上称出哪一枚是假币,试问必须称多少次?
由于不知道假币轻重,因此信息量为,每次测量可以获得的信息(轻-重、重-轻,一样重),因此需要称
我开始一直不觉得这个结果是对的,直到有人给出了各种数量硬币在不同情况下需要称的次数,我才接受了这个方法和结果。也就是说,选择合适的测量方式,称3次一定能够找出哪一枚是假币。