我们知道有最佳算法的哪些问题?


15

在哪些非平凡问题上,我们知道当前拥有的算法是渐近最优的?(用于图灵机)

以及如何证明呢?


11
图灵机是下界的棘手模型。更改defn可以更改运行时间中的多项式,因此您需要更具体一些。
Suresh Venkat 2012年

您如何定义非平凡的?
funkstar 2012年

1
正如Suresh所说,您使用的TM会有影响。我猜想对于回文语言(可以向后读的单词),我们有一个最优的1-tape TM,它采用步骤来确定语言。对于2磁带TM,它可以在线性时间内确定,因此也非常理想。O(n2)
布鲁诺

Answers:


18

任何需要线性时间并且必须读取其全部输入的算法都必须是渐近最优的。类似地,正如拉斐尔(Raphael)所说,任何运行时间与输出大小相同的算法都是最佳的。


10
同样,任何运行时间与输出大小相同的算法都是最佳的。
拉斐尔2012年

9
我相信这个答案和随之而来的评论是最新的技术。
杰夫斯(Jeffε)2012年

9
嗯,这是dissapointing
Sture专门

1
根据记录,Jɛff E的评论似乎是指Shir在下面的回答。
安德拉斯·萨拉蒙

1
我指的是Max的答案,而不是 Shir 的答案,是指Raphael对Max的答案的评论。
Jeffε

8

如果您正在考虑的复杂性度量是查询复杂性,即机器必须查看输入以解决特定问题的次数,那么对于许多问题,我们都有最佳算法。其原因是,由于包括对手方法在内的一些流行技术,查询复杂度的下限比时间或空间复杂度的下限更容易实现。

但是,不利的一面是,这种复杂性度量几乎可以用于量子信息处理中,因为它提供了一种证明量子与经典计算能力之间差距的简便方法。这个框架中最臭名昭著的量子算法是格罗弗算法。给定一个二进制字符串对于该字符串存在一个i使得x i = n,则需要找到i。传统上(没有量子计算机),最简单的算法是最佳的:您需要平均查询此字符串n / 2次才能找到x1,,xnixi=nin/2。Grover提供了一种在 O i查询字符串。这也被证明是最佳的。O(n)


2
确实,查询复杂度是Max答案的基础。对于大多数问题,任何算法都证明“必须读取整个输入”或至少一定比例的输入。
杰夫斯

6
  • 如果您愿意更改模型,则数据结构中的许多下限都很严格。有关数据结构下限的良好引用的指针,请参见数据结构的下限。
  • 根据一些人在这里提到的比较模型中的边界,通过考虑输入由沿图的点组成的情况,可以得到凸包问题的类似边界。在平面的第一象限中具有递增的功能。Ω(nlogn)

2
+1用于提及数据结构。但我认为不可能通过比较下界进行排序来获得凸包的有用下界。原因是比较模型根本不足以计算凸包。相反,有效的方法是使用更强大的模型(例如可以计算船体的代数决策树),然后使下限适应此更强大的模型。
David Eppstein 2012年

很有道理,感谢您的澄清!
亚伯·莫利纳

3
  1. 使用比较(合并排序,举一个例子进行比较排序是最佳的,证明涉及到简单地用n计算树的高度树叶。O(nlogn)n!

  2. 假设唯一游戏猜想,Khot,Kindler,Mossel和O'donnell表明,Max-Cut比Goemans和Williamson的算法更好地近似于NP。因此,从这个意义上讲,G&W是最佳的(还假定)。PNP

  3. 在某些情况下(例如,对抗性处理器的比例),某些分布式算法可能是最佳的,但是由于您提到了图灵机,所以我想这不是您要查找的示例类型。


2
第2项是否回答问题取决于提问者“最佳”的含义,尽管我怀疑提问者在这种意义上是在问(否则,会有很多紧密的近似结果甚至不需要UGC)。此外,我认为第1项或第3项都无法回答问题。
伊藤刚(Tsuyoshi Ito)2012年

@TsuyoshiIto,很难猜测提问者到底是什么意思,这就是让我尝试从各个方向回答的原因,希望能找到对他/她有用的东西。顺便说一句,是什么使您说(1)不是有效答案?
2012年

2
询问者特别询问了图灵机的最佳算法。
伊藤刚(Tsuyoshi Ito)2012年

6
“比较排序”实际上是一个“问题”吗?还是对计算模型存在问题限制?
杰夫斯(Jeffε)2012年

3

假设你在给定的输入并询问是否RAM机决定中号终止输入X牛逼的步骤。由时间谱系理论,最优的算法来决定,这是模拟的执行中号X 步骤,它可以在短时间内完成ø w=M,x,tMxtM(x)tO(t)

(注意:对于图灵机,模拟的执行需要O t log t 步;我们仅知道Ω t 的下限。因此,这并不是专门针对图灵机的最佳选择。MO(tlogt)Ω(t)

还有一些其他问题,其中包括暂停问题的版本。例如,在决定一个句子是否是WS1S的结果需要时间2 好↑ 好↑ ø | θ |,这是最佳的。θ2↑↑O(|θ|)


3

我不确定您所说的“非平凡”是什么意思,但是这又如何呢?。因此,该语言不是常规语言,任何决定它的TM都必须以Ω n log n )运行。最简单的算法(每隔零个交叉)是最佳的。L={02k|k0}Ω(nlogn)


3

如果允许动态数据结构问题,我们知道一些超线性时间最佳算法。这是在单元探针模型中,其强度与单词RAM一样强,即,它不是诸如代数决策树之类的受限模型。

一个示例是在动态更新下保留前缀和。我们从数字的数组开始,目标是保留一个允许以下操作的数据结构:A[1],,A[n]

  • 给定iΔ,将加到A [ i ]ΔA[i]iΔ
  • 给定i,计算前缀和j=1iA[i]i

您可以使用基于扩展二叉树且叶子处带有A [ i ]的数据结构,轻松地在时间内支持这两种操作。Patrascu和Demaine证明这是最佳选择:对于任何数据结构,都有n个加法和前缀和查询的序列,这些查询的总时间为Ω n log n O(logn)A[i]nΩ(nlogn)

另一个示例是并集查找:从的分区开始为单例,并保留允许两个操作的数据结构:{1,n}

  • 联盟:给Ĵ,替换包含部分和包含部分Ĵ与他们的工会ijij
  • 查找:给定,从包含i的部分输出规范元素ii

Tarjan表明,具有等级和路径压缩启发式并集的经典不相交集森林数据结构每次操作花费时间,其中α是逆阿克曼函数。弗里德曼和Saks表明这是最佳的:对于任何数据结构存在的序列Ñ工会,并找到它必须采取行动Ω Ñ α Ñ 的时间。O(α(n))αnΩ(nα(n))



0

根据输入排序/分配的特定约束,有两种[我的理解是]最佳的搜索算法。然而,算法的介绍通常并不强调这种最优性。

  • 黄金分割搜索以查找单峰函数的最大值或最小值(极值)。假设输入是单峰函数。平均找到对数时间。我记得在abelson&sussman撰写的《计算机程序结构与解释》一书中可能已经证明了最优性。

  • 二分查找法在排序列表中平均找到对数时间点,但需要对输入进行排序。

我在上面引用了Wikipedia,但是它没有证明它们是最优的,也许其他一些可以证明最优性的参考资料也可以被读者找到。


-1

许多亚线性时间算法的上限与下限匹配。


3
标记为重复项。
杰夫斯

亚线性时间算法和流算法是不同的领域。
Bin Bin

1
是的,但是您应该将答案合并为一个。
Suresh Venkat 2012年

最佳亚线性时间算法的一些示例可以是
Bin Fu

1
还不清楚为什么这不是查询复杂性答案的重复项。
Artem Kaznatcheev
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.