真的有可能证明下界吗?


24

给定任何计算问题,为这种计算找到下界的任务确实可行吗?我想它可以归结为如何定义单个计算步骤以及我们用于证明的模型,但是鉴于此,我们是否真的能证明通常的下界?我的意思是,我们能否证明“问题不能比时间更快地解决”而不是“问题可以在时间内或更快地解决”?XŤXXŤX

我试图找到有关下限及其证明的信息,但是我真的找不到任何有趣的东西,关于该主题的书籍/论文/网站有什么建议吗?

Answers:


19

我们绝对可以证明这些事情。

许多问题的下限都很微不足道,例如,找到一组个数的最小值(无论如何都不进行排序/结构化)至少需要Ω n 时间。证明很简单:在o n 时间运行的假设算法无法检查输入中的所有数字。因此,如果我们在某些输入上运行该算法,则可以观察到它从未检查过输入的特定元素。将元素最小化,我们可以使算法失败。nΩ(n)o(n)

较小的下限是在基于比较的模型中进行排序的下限。证明遵循以下几行:给定n个数字的输入,就有n个可能的输出(输入可以是排序列表的任何排列,因此输出也可以是输入的任何排列)。如果我们仅限于进行比较,那么我们的算法(平均)需要至少执行log 2n = Ω n log n 比较,以便能够给出nΩ(nlogn)nn!log2(n!)=Ω(nlogn)不同的输出。n!

下界可能会更强。存在几个指数下界的问题(特别是困难问题)。此类中的问题包括为(通用)国际象棋,跳棋和围棋等游戏计算最佳策略。时间等级理论证明了这一点,该定理指出(受f的某些限制):EXPTIMEf

给定一个函数,存在一个可以在时间O f n 中解决但不能在时间o f n ))中解决的计算问题。fO(f(n))o(f(n)logn)

因此,基本上,如果您可以想到一个函数则存在一个需要花费大量时间才能解决的问题。f

最后,另一条不一定证明时间下限但更强大的方法表明问题的不确定性(例如,暂停,发布信函)。


输入或输出的大小是最常见的下限。
拉斐尔

14

是的,有可能。典型的例子是,任何基于比较的排序算法都需要比较才能对长度为n的列表进行排序。Ω(nlogn)n

但是,下限似乎比上限更难证明。为了证明有一个排序算法需要比较,您只需要展示这种算法即可(合并排序– !)。但是对于下限,您需要以某种方式表明特定类中没有算法可以解决您的问题。这样做的困难是由以下事实说明,我们只知道 大号Ñ 大号PÑ PP 小号P Ç ÈO(nlogn) 尽管我们知道,那些夹杂物中的至少一个是严格(大号P 小号P ç é通过空间层次定理),大多数人认为他们是所有严格。

大号ñ大号PñPP小号P一种CË
大号P小号P一种CË

另一方面,瑞安·威廉姆斯(Ryan Williams)有一篇不错的论文(而且我已经听过几次),叫做《电路算法》和《算法电路》,他在论文中指出,寻找下限和寻找算法从根本上讲并不是全部那不同。例如,他引用了停止问题的不确定性的证明作为算法(通用图灵机)正好用于证明下界(不确定性)的示例。


我认为这是我追求的目标,“ ..您需要证明某种特定类中没有算法可以解决您的问题。”,这是我感到困惑的部分,因为我无法真正直观地看到一个人怎么做至少在一般情况下如此。正如@Tom van der Zanden所描述的,我确实了解发现的最低数量,但是这种方法是否通用?我是说一般的,就像在构造证明时具有这种论点一样?也感谢您的链接。
hsalin

1
@ user1288420你并不孤单。如果有人可以直观地看到如何证明特定类中没有算法可以解决某些问题,那么我们将获得更多的下限结果!通常,您需要提供类中每个算法都具有的一些属性,并表明该属性阻止解决某些问题。例如,每台亚线性时间运行的图灵机都具有无法读取其所有输入的特性。这意味着它不能解决大多数问题。这很简单;不幸的是,更有趣的情况似乎很难。
David Richerby

3

ñ

但是,问题中有一点需要就下限(或通常的复杂性界限)进行更多说明。

实际上,什么是单个计算步骤的选择是无关紧要的,只要可以将计算步骤视为具有恒定的上限(和下限)即可。复杂度结果将是相同的,因为它被定义为一个常数。将3个比较作为单元操作,或者仅一个比较,没有什么区别。

关于用作评估计算成本的参考的数据大小也是如此。以单个整数或两个整数作为大小单位没有区别。

但是,这两个选择必须相关。

ñ日志ñØ日志ñ

是否可以将某项操作视为具有单位成本与哪些数据可以视为具有单位大小紧密相关。这取决于您为计算模型选择的抽象级别。


要查找字符串中某个模式的所有出现,都需要读取整个字符串:如果该模式为“ a”,则不检查字符串中是否每个字符都无法找到所有出现的情况。
大卫·里希比

1
@DavidRicherby实际上并非总是如此。Boyer-Moore算法从模式的结尾开始,因此在字符串中跳跃。如果尝试的匹配失败,则不必读取字符串的开头。而且它还具有类似于Knuth-Morris-Pratt算法的优化,可以跳过由于模式结构而注定要失败的尝试。当然,有些模式确实需要读取整个字符串。
babou 2015年

@DavidRicherby为什么要问,您知道吗?
babou 2015年

我不明白您的第二条评论。您的原始答案包含错误的主张。我当然知道这是不正确的:这就是我指出这一点的方法!其他人可能不知道它是不正确的,因此将答案保持原样会使他们感到困惑。
David Richerby

1
@DavidRicherby我的意思是您了解我的意思。我应该说不得,而不是没有。这并不需要评论风格,使读者认为我在胡说八道。这样做的时候,您犯了完全相同的粗心大意的错误:声明“ 发现字符串中所有模式出现都需要读取整个字符串 ”,而当您说“ 发现字符串中所有模式出现时可能需要阅读整个字符串 ”。我只是想指出,为了减轻前面的示例,不一定总是需要读取输入。
babou 2015年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.