我正在忙于一项任务,但有一个问题困扰着我。我知道不应该直接问作业问题,所以如果我没有得到明确的答案,我也理解。但是还是想问一下。
我们需要计算不同算法的运行时间复杂度,我卡在了这个上面。
for(int i = 1 ; i < n ; i++)
for(int j = 0 ; j < i ; j +=2)
sum++;
根据我的理解,我认为时间复杂度应该低于O(n2),因为嵌套循环没有完全运行n次,而且j变量在每次循环中增加2,而不是像普通for循环一样迭代。然而,当我对N=10、N=100、N=1000等进行了一些代码模拟时,输出sum变量时我得到了以下结果。
N = 10 : 25,
N = 100 : 2500,
N = 1000 : 250000,
N = 10000 : 25000000
当我看到这些结果时,O符号似乎应该比O(n)大得多。
在这个任务中,我们被给予了4个选项:O(1),O(n2),O(n)和O(logn)。就像我先前所说的,我无法理解它为什么会像O(n2)那样大,但是结果指向那里。所以我认为我没有完全理解这个问题,或者我错过了一些关键点。
任何帮助都将不胜感激!
j*=2
是翻倍;j+=2
是增加两个。 - Kevin3n * ln n
也介于线性和二次之间,尽管在技术上它属于 O(n^2),但这不是一个紧密的边界(通常我们谈论的是紧密的边界)。它是 O(n log n) 的。 - user395760