Algorithm O(n)或O(n)^2算法的时间复杂度?
以下算法的时间复杂度是多少Algorithm O(n)或O(n)^2算法的时间复杂度?,algorithm,Algorithm,以下算法的时间复杂度是多少 int j = 0; while (j<n) { for (int i = 0; i < n; i++) { x++; j++; } } intj=0; 而(j它实际上只是O(n)…(不是O(n+n),不是O(2n),不是O(n^n),只是O(n)) 因为在内部循环中将j增加到n 一旦你完成了n元素的内部循环,外部条件将为false。因此,在n迭代之后,它将退出我认为你对使用包含循环的程序确定时间复杂度的理
int j = 0;
while (j<n) {
for (int i = 0; i < n; i++) {
x++;
j++;
}
}
intj=0;
而(j它实际上只是O(n)…(不是O(n+n),不是O(2n),不是O(n^n),只是O(n))
因为在内部循环中将j
增加到n
一旦你完成了n
元素的内部循环,外部条件将为false。因此,在n
迭代之后,它将退出我认为你对使用包含循环的程序确定时间复杂度的理解有点不正确。通常的方法是计算迭代次数通用程序的定义:
Loop until SomeCondition:
DoStuff()
是O([#迭代]*[DoStuff的复杂度]
。因此,如果迭代次数与某个变量n
成正比,DoStuff
与某个变量m
成正比,那么这个程序就是O(n*m)
回到您的问题:我们看到内部for循环与变量n
成比例。现在我们问自己“while循环需要多少次迭代才能达到其条件?”。这取决于每次迭代的j
增长量!正如CaldasGM所指出的那样,j
对于内部for循环的每次迭代都会增加一个。这意味着j
每次迭代都会增长n
,因此while循环将在一次迭代后退出
所以这个程序的复杂性是O([#迭代]*[循环内容的复杂性])=O([1*n]*[1])=O(n)
希望这有助于您理解:)运行代码并在完成后查看X是什么。这就是你的答案。如果你在两天后有考试,那么你肯定有一本教科书可以查阅,或者你可以问一位教授或同学。我投票把这个问题作为离题题题来结束,因为它属于cs.stackexchange.com。@Thirty340这并不能解释为什么它不属于本网站。问题被关闭是因为它们不适合他们所在的站点,而不是因为它们可能适合其他站点。这就是说,这个问题在CS.SE上甚至都不是一个合适的问题(至少现在是这样)。你不应该把低质量的问题导向其他网站,他们也会在那里被枪杀。这个问题不应该得到10次机会!您可以非常轻松地测试它,将“WriteLine”放在while循环中(但不在for循环中),它只会写一次:)很高兴我能帮上忙!:)