有人问我,如果时间复杂的话:
该算法的时间复杂度(关于n)是什么?:

k=0
for(i = n / 2 ; i < n ; i++ ) {
   for( j=0 ; j < i ; j++)
      k = k + n / 2
}

选择是:a. O(n)b. O(n/2)c. O(n log(n)d. O(n^2)
can have a multiple answers.
我知道上面的算法是d. O(n^2),但我附带了a. O(n),因为它只寻找complexity of n?是的。
如果你有这个问题的话你怎么回答呢。?我对答案很好奇。

最佳答案

答案是O(nè)。
这很容易理解我会尽力让你明白的。
请参阅,执行外部循环块for次。
当然,这取决于数字n - n/2 = n/2是偶数还是奇数。如果是偶数,则执行外部循环n次。如果是奇数,则执行n/2次。
但对于时间复杂度,我们不考虑这一点。我们只是假设外部(n-1)/2循环执行for次,其中n/2i开始并在n/2结束(因为终止条件是n - 1而不是i < n)。
对于外部循环的每次迭代,内部循环执行i <= n次。
例如,对于每个迭代,内部循环都以ij = 0开始。这意味着它执行j = i - 1次(不是i次,因为i - 1从0开始而不是从1开始)。
因此,对于第一次迭代,执行内部循环j次。i = n / 2用于第二次迭代,以此类推,直至i = n / 2 + 1次。
现在,内环执行的总次数是i = n - 1。这是一个简单的数学公式,它的总和是n/2 + (n/2 + 1) + (n/2 + 2) + ... + (n - 2) + (n - 1)次。
因此,时间复杂度变为O((3n,-n)/ 2)。
但是我们忽略了(3n² - n)/2项,因为n项和常量项,因为对于每个n² > n项,它们将保持不变。
因此,最终的时间复杂度为O(n)。
希望这能帮助你理解。

10-04 21:28