Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 具有超指数运行时间的算法?_Algorithm_Big O - Fatal编程技术网

Algorithm 具有超指数运行时间的算法?

Algorithm 具有超指数运行时间的算法?,algorithm,big-o,Algorithm,Big O,前几天我和一个学生讨论了算法的常见复杂性类别,如O(n)、O(nk)、O(n lg n)、O(2n)、O(n!)等等。我试图提出一个问题的例子,对于这个问题,最著名的运行时间是超指数的解决方案,例如O(22n),但仍然是可判定的(例如,不是停止问题!)我所知道的唯一一个例子是,我认为任何一个intro CS的学生都不会真正理解或理解它 我的问题是是否有一个众所周知的问题,其最著名的解决方案具有超指数的运行时间至少ω(n!)或ω(nn)。我真的希望有一些“合理”的问题符合这个描述,但我不知道有任何

前几天我和一个学生讨论了算法的常见复杂性类别,如O(n)、O(nk)、O(n lg n)、O(2n)、O(n!)等等。我试图提出一个问题的例子,对于这个问题,最著名的运行时间是超指数的解决方案,例如O(22n),但仍然是可判定的(例如,不是停止问题!)我所知道的唯一一个例子是,我认为任何一个intro CS的学生都不会真正理解或理解它


我的问题是是否有一个众所周知的问题,其最著名的解决方案具有超指数的运行时间至少ω(n!)或ω(nn)。我真的希望有一些“合理”的问题符合这个描述,但我不知道有任何问题。

显示长度为n的字符串的所有排列都是n!,求哈密顿圈为n!,最小图着色

编辑:更快。事实上,它们似乎没有约束函数

A(x,y) = y+1 (if x = 0)
A(x,y) = A(x-1,1) (if y=0)
A(x,y) = A(x-1, A(x,y-1)) otherwise.

from wiki:
A(4,3) = 2^2^65536,...

将实数计算到一定精度的算法是否计数?Mandelbrot集的面积公式;10118个词代表两个数字,101181个词代表三个数字。

是找到连接n个DNA序列(代表物种)的进化树的问题,它需要最少的单核苷酸突变。n个给定序列被限制出现在叶子上;树拓扑和内部节点的序列是我们可以选择的

在更多的CS术语中:我们得到一组必须出现在某棵树的叶子上的长度为k的字符串,我们必须选择一棵树,加上树中每个内部节点的长度为k的字符串,以便最小化所有边上的长度总和

当一个固定的树也被给出时,序列到内部节点的最优分配可以非常有效地使用该算法来确定。但在通常情况下,没有给出一棵树(即,我们被要求找到最优树),这使得问题NP难,这意味着原则上必须尝试每棵树。即使进化树有根(代表假设祖先),我们只需要考虑不同的未根树,因为所需的最小突变数量不受根的位置影响。对于n物种,有3*5*7*..*(2n-5)叶标记的无根二叉树。(只有一棵这样的树有3个物种,它有一个内部顶点和3条边;第4个物种可以插入3条边中的任何一条,生成一棵独特的5条边树;第5个物种可以插入这5条边中的任何一条,依此类推——这个过程只生成一次所有树。)这有时被写成(2n-5),带!!意思是“双阶乘”


实际上,使用了分支和绑定,在大多数真实数据集上,这可以避免评估大多数树。但高度“非树型”随机数据需要全部或几乎全部(2n-5)!!需要检查的树——因为在这种情况下,许多树的最小变异数几乎相等。

这不是一个实际的日常问题,但它是一种构造相对简单且日益复杂的问题的方法

  • Kolmogorov复杂度K(x)是在预先确定的通用计算机U上输出字符串$x$的最小程序的大小。很容易证明大多数字符串根本无法压缩(因为长度为n的字符串比长度为n的程序多)
  • 如果我们给U一个最大运行时间(比如某个多项式函数P),我们就得到了一个有时间界的Kolmogorov复杂度。同样的计数参数也成立:在这个有时间限制的Kolmogorov复杂性下,有些字符串是不可压缩的。让我们调用第一个这样的字符串(长度为n)xP
  • 由于有时间限制的Kolmogorov复杂性是可计算的,我们可以测试所有字符串,并找到xP
  • 查找xP不能在多项式时间内完成,或者我们可以使用此算法对其进行压缩,因此查找xP必须是一个超多项式问题。不过,我们知道我们可以在exp(P)时间内找到它。(这里跳过一些技术细节)
  • 现在我们有了一个时间范围E=exp(P)。我们可以重复这个过程来找到xE,等等

这种方法为每个时间可构造函数F提供了一个可判定的super-F问题:找到在时间界F下不可压缩的长度n的第一个字符串(某个大常数)。

所有置换都在O(n n!)中运行,就像找到哈密顿循环一样。这确实是w(n!),但我所希望的是比这更快的增长。不过,谢谢你发这个帖子;你完全正确!Hamilton循环和图着色有指数时间DPs。@user635541,我不知道HC有任何指数时间DP(我认为没有),但如果有,它就足够大了,而且在OP想要更好的例子之后,我建议使用ackerman函数。@user635541,是的,你是对的,HC可以有一个运行时间为2^n*poly(n)的简单DP而且可能有更好的算法使用图分解。@j_random_hacker-我的理解是n!!N对于所有n>0。事实上,我不确定最严格的“规范”大O复杂性度量是什么。@j_random_hacker-我认为这个“规范”大O应该是O(2^n!),因为双阶乘的每一项都是它在常规阶乘中的对应项的两倍多,并且有n个。这看起来是一个很好的答案;谢谢你发帖!谢谢我对你的大O型表情一窍不通。有意思的问题。除此之外:是否有任何程序可以保证为任何有限的输入符号组合终止,但其对于给定输入大小的最坏情况时间和空间要求不能用bo计算