Big-Oh时间复杂度可以包含多个变量吗?


11

例如,让我们说我正在做字符串处理,需要对两个字符串进行一些分析。我没有给出关于它们的长度可能最终是多少的信息,因此它们来自两个不同的家庭。将算法的复杂度称为或(取决于我们使用的是朴素算法还是优化算法)是否可以接受?ØñO(n+m)

同样,让我们​​假设我们选择的算法实际上需要两个阶段-第一个字符串的设置阶段,这使我们能够处理任意数量的其他字符串而不会产生初始成本。说它具有构造,再进行任意数量的计算,是否被认为合适?O m ØñØ

因为两个计算都是线性的,所以仅将它们称为是否合适?Øñ


请参阅答案的评论以了解一些背景知识-我对@corsiKa的尊敬非常勇敢地提出了这样一个有争议的问题。
OldCurmudgeon 2014年

@OldCurmudgeon,我明白了。我不想涉足该评论主题。Oldcurmudgeon,您是否在不理解big-O表示法的情况下争论big-O表示法?确实很尴尬。此外,您和corsiKa正在争论运行时间,而没有定义参数和-导致通讯错误的原因。提示:处理字符串时,一个常见的约定是同意使用表示一个字符串的长度,使用表示另一个字符串的长度-但理想情况下,最好使它明确,因为否则会引起混淆(例如此处说明)。Ñññ
DW

@DW OldCurmudgeon可能在学校只是学到了一个不同的定义...正如我在下面的评论中指出的那样,可以避免使用多个变量,尽管到目前为止我从未真正考虑过这样做。也许这(或类似的东西)曾经是标准的?
Patrick87

2
我认为这里这里都有足够的答案。
拉斐尔

Answers:


14

当然是。很好,完全可以接受。看到算法的运行时间取决于两个参数是常见且标准的。

例如,您经常会看到以表示深度优先搜索的运行时间,其中n是图形中的顶点数,m是图形中的边数。这是完全有效的。这样做的意义是存在一个常数C ^和数字Ñ 00,使得算法的运行时间为至多Ç Ñ + ,对于所有Ñ > Ñ 0> 0Øñ+ñCñ00Cñ+ñ>ñ0>0。换句话说,如果确切的运行时间为,那么我们说f n m = O n + m ),如果存在c n 0m 0使得n > n 0并且> 0意味着˚F ñ ç ñ + Fñf(n,m)=O(n+m)c,n0,m0n>n0m>m0f(n,m)c(n+m)

是的,可以说第一阶段花费时间,第二阶段花费O m 时间是完全适当和可以接受的。O(n)O(m)

重要:请确保定义m。如果不指定n是什么,就不能说“这是O n 时间算法” 。如果问题语句中未指定n,则需要指定它。例如,请参见图算法,其中我们通常定义n =#个顶点和m =#个边。nmO(n)nnn=m=

至于是否可以称它们为时间,当然不能-除非您以某种方式知道m = O n 。当然,如果您知道m = O n ,则随之得出m + n = O n ,因此O m + n 时间算法也是O n 时间算法。但是如果不能保证m = O O(n)m=O(n)m=O(n)m+n=O(n)O(m+n)O(n),则不能将其称为 O n 时间算法。m=O(n)O(n)

这是基本的东西。您会在算法教科书中找到所有内容。


1
@OldCurmudgeon,很有可能您会在许多标准算法教科书中找到此示例。你看了什么?您是否尝试过查看深度优先搜索这一章(我在回答中提到的示例)?
DW

2
@OldCurmudgeon在我的CLRS练习3.1-8中,正是针对许多变量的函数给出了标记的定义。和其上界DFS的运行时间是Ô V + Ë 为一个曲线图V ê ØO(V+E)(V,E)
Kirill 2014年

2
@Kirill我的观点是可以想象的,在过去的某个时候,习惯上只考虑总长度是可以的,否则可能会被认为是错误。如果您要对学生的考试进行评分,并且该学生使用总输入长度作为DFS时间复杂度的变量,那么不考虑二维(V和E)是否会出错?真实的东西和人们愿意承认的东西并不总是一成不变的。ñ
Patrick87

1
我同意,只要每个人都这种方式使用 Landau表示法,但是几乎没有人知道它的实际含义(除非您在功能上进行连接)。另请参阅A. Schulz的答案中链接的文章,该文章首先指出“基本”和“常见”使用是错误的。
拉斐尔

1
@ Patrick87 复杂性理论通过许多著名类的定义,主要使用输入长度(有明显的例外)。算法分析(认真完成)对了解有关实际资源使用情况(在模型允许的范围内)感兴趣,因此其他参数对于绘制整个图片(更准确)变得更加有趣。
拉斐尔
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.