O(mn)被认为是“线性”或“二次”增长吗?


24

如果我有一个函数,其时间复杂度为O(mn),其中mn是其两个输入的大小,我们将其时间复杂度称为“线性”(因为在mn中均为线性)或“二次”(因为它是两种尺寸的产品)?或者是其他东西?

我觉得称它为“线性”是令人困惑的,因为O(m + n)也是线性的,但速度要快得多,但是我觉得称其为“二次数”也是很奇怪的,因为它在每个变量中都是线性的。


7
这是非常重要的线性说什么。例如,如果我们有一个具有m边和n个顶点的图,则O(m+n)的边数是线性的,但是(可能)顶点数是二次的。
拉斐尔

3
我认为拉斐尔的评论是当场的。必须相对于某些东西(通常是输入大小)使用“线性”。如果要转置m×n矩阵,则O(mn)是“线性的”,因为输入的大小为O(mn)。如果要搜索在m n字符串中出现的n个字符串,则O m n 不是线性的-O m + n 会是线性的。mO(mn)O(m+n)
SamM

3
我也同意@Raphael的评论,但是与此同时,听到人们说特定的时间复杂度是“线性的”却没有提及什么相对并不少见。在某些情况下,这并不重要,例如O(m + n)相对于所有输入都是线性的,因此,我不会像上面SamM那样三思而后行地称其为线性。但这引出了一个问题:是什么使O(mn)非线性?
Mehrdad 2013年

3
@Mehrdad:我认为基线是“假设输入被编码为二进制字符串(在图灵机磁带上),输入大小”。然后,此输入大小是m本身的函数。SamM给出了很好的例子。nm
拉斐尔

Answers:


18

在数学中,这样的函数称为多线性函数。但是计算机科学家可能一般不会知道该术语。绝对不能在数学或计算机科学中将此函数称为线性函数,除非您可以合理地将n之一视为常数。mn


是什么使考虑n中的一个常数合理呢?mn
user2768

11

为了阐明评论中的讨论,衡量相对增长是很重要的。

如@Kaveh所述,并非同时呈线性,但如果一个为常数而另一个为增长,则为线性。O(mn)

另一方面,可能被认为是线性的。直观地,如果m加倍,或者n加倍,或者即使mn都加倍,则m + n不能超过一倍。m n并非如此;如果mn都加倍,则m n增加4。这就是为什么在许多情况下,该运行时间将被视为平方的原因。我在几个段落中给出了一个字符串匹配的例子。O(m+n)mnmnm+nmnmnmn

但是通常在使用Big- 表示法时,是将其用于特定的引用。由于我们大多是理论家,因此通常是问题输入的大小。O

让我们以矩阵加法为例。将两个矩阵相加需要O m n 时间。但是我们输入的每个元素仅被触摸一次,因此通常将其称为线性。换句话说放,我们的输入是大小为ø Ñ ,因此运行时间ø Ñ 是线性的输入的大小。m×nO(mn)O(mn)O(mn)

现在让我们看一下字符串匹配-即,给我们一个大小为的字符串和一个大小为n的字符串,我们想看看在较大的字符串中是否存在较小的字符串。我们可以在O m n 时间里天真地检查它;通常将其视为二次方。为什么?如果mn可以为任意值,则设置m = n。那么我们的运行时间为O m 2,我们的输入大小为2 mmnO(mn)mnm=nO(m2)2m

另一方面,如果使用Rabin-Karp算法,则(平均)时间。我们的输入包含两个字符串,因此我们的输入大小也为O m + n 。因此,通常将其称为线性。O(m+n)O(m+n)

总结一下: 对于矩阵乘法之类的事物,通常被称为线性,因为它在输入大小上是线性的,但是对于字符串匹配之类的事物,由于输入较小,通常被称为二次数。哪个术语合适取决于您在其中使用的上下文。O(mn)


8

如果正在测量在运行时间然后Ô Ñ 以线性函数Ñ 。如果mn之间没有关系,则该函数通常可以二次方增长。(m,n)O(mn)(m,n)mn

但是,在每个变量中它都是线性函数,即,如果您固定其中一个变量并查看另一个变量的增长,则在另一个变量中它是线性函数。


3

要衡量具有多个输入的问题的复杂性,一种方法是找到主导变量,然后基于该变量绑定其他输入。使用这种方法,您可以具有基于单个变量的复杂度函数。


2
可能没有主要变量,例如,如果您有节点和边的数量。
拉斐尔

0

给定某种语言和一个函数˚F使得分钟{ | w 1 | | w 2 | } ˚F |瓦特|为每瓦特= 瓦特1瓦特2大号L={w1#w2|wi(Σ{#}),}fmin{|w1|,|w2|}f(|w|)w=w1#w2L您可以估计算法的运行时间,该算法将L识别为 Of | w || w |f | w |= Of | w || w |f | w | O(|w1||w2|)LO(f(|w|)(|w|f(|w|))=O(f(|w|)|w|f(|w|)2)=O(f(|w|)|w|)

这意味着您获得线性时间,如果输入的一小部分是恒定的(相对于整个输入),则它是次线性的,介于两者之间(例如),如果它是线性的,则为二次运行时间。O(nlogn)

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.