算法复杂度下界证明---对手论证(adversary argument)基础篇

什么是对手论证?

将算法设计者与算法分析者看作对手,同时扮演两个角色进行算法分析。

  1. 算法设计者:尽量多的创造更多信息
  2. 算法分析者:尽量少的给予信息,拥有着随时合理改变取值的能力

只有这二者做到极致,对手论证才能成立。

注:从分析者的角度可以忽视很多细节,凑出题目所要求的大小即可

从同大小问题引入

问题描述:

给定数列,设计算法输出最大值和最小值,并给出该问题的算法复杂度下界

思路

默认关键操作为比较
每个元素可能有四种状态:W,L,N,W/L,代表曾经在某次比较中胜出败北没有经历过比较胜出和败北都经历过
由于W/L的元素一定不是max/min,所以最终一定是处于两个元素W,L,其余元素W/L的情形
需要获得的信息总量:

  1. n个元素都要从N到W or L n个信息
  2. n-2个元素要从W到W/L n-2个信息
  3. 共计2n-2个

于是我们的对手策略设计如下:

  1. 比较N:N,结果必然是W,L(L,W与之等价),设计者获得两个信息,分析者无法改变这一事实
  2. 比较W,L,分析者让其继续为w,L即可让他徒劳无获
  3. 比较W,W,结果必然是W,W/L分析者无法改变这一事实
  4. 比较W,N,分析者让他是W,L,即可让他只获得一个信息

需要获得的总信息量最少是 2 n − 2 2n-2 2n2

而我们上面的分析可知,最少需 n 2 + n − 2 \frac{n}{2}+n-2 2n+n2次比较才能获得那么多的信息量
于是下界为 O ( 3 n 2 − 2 ) \Omicron(\frac{3n}{2}-2) O(23n2)

“第二大”问题

问题描述:

问题:选出一个数列的第二大元素

给出该问题的算法复杂度下界

思路:

  1. 想选出第二大,必先选出第一大(n-1)
  2. 第二大只有可能是直接输给第一大的那些人里面的人

解:

结论:任何算法都至少要经过 O ( n + l o g n − 2 ) \Omicron(n+logn-2) O(n+logn</

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值