算法时间分析“输入大小”与“输入元素”


13

在分析和描述算法的无症状上限时,我仍然对术语“输入长度”和“输入大小”感到困惑

似乎算法的输入长度取决于您所讨论的数据和算法的种类。

一些作者将输入长度称为表示输入所需的字符大小,因此,如果在算法中用作输入集,则“ abcde”将具有6个字符的“输入长度”。

如果不是字符而是数字(例如整数),则有时使用二进制表示形式代替字符,因此“输入长度”被计算为(等于输入集中的最大数字L)。Nlog(L)

还有其他问题,即使输入集是数字,它们也会将“输入长度”描述为“决策变量”,因此对于长度为N且数字范围为的输入集,输入长度为只是N(例如,子集和),甚至使陈述问题所用的二进制位值的数量更加复杂(我相信这与) N l o g L 0232Nlog(L)

所以:

  • 这取决于算法?
  • 什么意思以及何时使用每个输入长度“版本”
  • 我可以使用一些规则来决定使用哪个规则吗?

Answers:


10

从最正式的意义上讲,输入的大小是参考该算法的Turing Machine实现来测量的,它是对输入进行编码所需的字母符号的数量。

这当然是相当抽象的,并且在实践中很难操作,或者至少非常烦人-我们将需要考虑如何指定分度数等。然后,在实践中通常会发生的是寻找一个代理输入的测量尺寸-这是更方便和容易,但不引起我们的分析任何数学问题。

以您的“ abcde”示例为例,通常情况下,我们用于输入的字母很小,因此即使使用字符的代理度量,我们也知道即使在Turing Machine上,只要打扰一下,指定一个输入编码,它将“ abcde”转换为某种编码形式,对于某些常数,其长度最多为。由于我们通常会抛弃常数因子,因此常数的扩展通常不会对我们的渐近分析产生任何影响。55×c c

在另一种情况下,我们通常通过顶点数来衡量输入图的大小。显然,如果我们要指定任意大的图,则编码输入的大小不只是例如,边缘发生了什么?我们所知道的是,我们可以使用一种合理的编码方案,以位表示图。与常量相比,这更多的是扩展,但是在很多有趣的情况下,我们仅以多项式的粒度处理事物,并且多项式的组合方式非常好-特别是例如我们确定运行时间为,其中是一个多项式,那么我们知道存在一些多项式nnN=cn2lognO(p(n))pp使得,所以当我们回到输入的形式度量时,我们仍处于多项式时间。O(p(n))=O(p(N))

当您使用数字时,这可能会下降。由于大小为的数字可以编码为比特,因此如果我们的运行时间为,则将为 -实际输入大小的指数-将使幅度为输入尺寸的代理一个不错的选择,如果我们要谈论的成员例如(当你来到Strongly- -完整和Weakly-完成,请记住这一点。另一方面,如果我们只对可判定性感兴趣,那么这将是一个足够好的代理度量。mn=O(logm)O(m)O(2n)mPNPNP

因此,虽然没有为输入大小选择代理度量的明确规则,但要求是代理大小相对于输入大小的扩展或收缩应与您要​​证明的兼容。根据经验,恒定因数的变化几乎无关紧要,较小的多项式因数通常很好,并且适用于您所看到的大多数基本理论,较大的多项式因数可能仍适用于理论,但在实践中可能令人讨厌,指数变化通常太极端了。


感谢您的回答。您谈论的是选择正确的代理来谈论输入的P或NP成员资格,这真的很有趣,这可能是一个全新的问题!除此之外,回到前面的问题。您认为哪一个输入将是一组整数,才是该算法的最佳代理?我想可能取决于算法吗?我看到3个可能的选项:N(为集合的长度)N * Log(L)(L为最大值)和Log(Sum(集合))。
耶稣萨拉斯2014年

@JesusSalas,它肯定可以取决于您对它们的处理方式,但是是最简单的“足够接近TM编码”答案,但是用来查看运行时间仍然很有趣。或以及最大数量的大小-当然只是,但有时使用非显而易见的量度来分析事物可能会更容易。N N 2 log LNlogLNN 2logL
2014年

这涵盖了基础,但存在一些错误。在图灵机上代表“ abcde” 的字母不占用字符:如果选择正确的字母,则需要5个字符。而且您不需要位来表示一个顶点图:邻接矩阵恰好是位。c n 2日志n n n 25ccn2lognnn2
David Richerby 2014年

也许何时使用N或N log L可能取决于算法在每个输入元素上进行操作的成本。我猜想,如果我们假设算法使用恒定时间来独立于每个输入元素的大小(不滥用)对每个输入元素执行其工作,那么N可能是正确的,导致O(N) 。另一方面,如果以位为单位的输入元素大小增加了操作成本,则N log L似乎更准确,因为我们应该在上限中表达输入中涉及增长的哪些属性
Jesus Salas 2014年

@DavidRicherby是的,如果您选择字母时需要符号,但这正是,如果由于其他原因我们使用不同的字母(例如二进制),则认为可以说我们更有用可以使用二进制编码所有内容而又不失一般性,则,但是很容易且有趣的是,使用常数为任何非疯狂字母相对容易做到。同样,确实,您可能不需要位,但这是一个相当健壮的上限,可以处理两种常规编码。c = 1 c = log 2 5 5 O n 2 log n 5c=1c=log255 O(n2logn)
卢克·马西森

8

它取决于您的计算模型,有时还取决于算法本身。

  • 如果您的计算模型是图灵机,那么输入的大小就是输入所占据的像元数。因此,如果您输入的内容是则输入的长度为6。ababcd
  • 如果您的模型是RAM,那么输入的大小就是输入最初保留的寄存器/内存单元的数量。这可能会被滥用,因为从技术上讲您可以将整个输入写入一个寄存器。但是,如果使用对数成本模型,则计算成本会更高。
  • 如果您的计算模型是word-RAM,那么您还需要对存储单元进行计数,但是它们只能存储位整数,因为是模型的参数。www

但是,没有针对“实际”输入大小来度量许多算法。然后,您必须仔细查看分析语句所指的内容。

  • 通常,您对该问题有一个隐含的假设。当说对项目进行排序需要时间时,则假定可以在时间中比较两个项目。当然,如果您排序,说很长的字符串,那么这可能不是正确的。n O 1 nO(nlogn)nO(1)n
  • 出于传统原因,有时会根据输入的不同参数进行测量。例如,通常分析矩阵乘法以将两个 ×矩阵相乘。n×n

一条规则:使用所需的任何内容,但在结果说明中明确指出。因此,如果有误解的机会,请说出确切的是什么。n


1
说出是什么,无论是否有误会!“在时间算法运行是没有意义的,如果”尚未定义,即使“是输入的长度”是唯一明智的猜测。O n 3n nnO(n3)nn
David Richerby 2014年
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.