Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
指示线运行次数的边界函数(大O)是多少?(C)_C_Runtime_Big O - Fatal编程技术网

指示线运行次数的边界函数(大O)是多少?(C)

指示线运行次数的边界函数(大O)是多少?(C),c,runtime,big-o,C,Runtime,Big O,我试图理解运行时的概念,但在这个问题上我有点困惑。我知道外循环的运行时间是O(n)。我还知道,对于大于1000的n值,内部循环将以恒定时间运行。但是,对于n1000,内环将永远不会运行-在整数除法中进行因式分解时,j的起始值为零。因此,在n超过1000后,内环运行的次数与n完全无关-只有外部循环的前1000次迭代才会执行该内部语句 因为从长远来看,内部循环的迭代次数与n无关,所以在大O意义上,所指示的语句运行O(1)次 但是,如果将n保持为小,则循环运行的次数会出现对数增长。请注意,当i=1时,

我试图理解运行时的概念,但在这个问题上我有点困惑。我知道外循环的运行时间是O(n)。我还知道,对于大于1000的n值,内部循环将以恒定时间运行。但是,对于n<1000的值,内部循环似乎具有对数运行时间。那么,这是否意味着函数的大O将是O(n logn),因为我假设了最坏的情况

for(i = 1; i < n; i++) {
  for(j = 1000/i; j > 0; j--) {
     arr[j]++;     <-------- THIS LINE
     }
 } 
(i=1;i{ 对于(j=1000/i;j>0;j--){
arr[j]+;大O表示法描述了n接近无穷大时的行为。
A=O(B),其中A和B是n的函数,表示当n接近正无穷大时A/B的极限小于正无穷大。

因此,n=1000下的情况不影响大O表示法。

该代码的渐近运行时间是O(1)即,无论
n
有多大,都存在一个常数
请注意,对于任何n>1000,内环将永远不会运行-在整数除法中进行因式分解时,j的起始值为零。因此,在n超过1000后,内环运行的次数与n完全无关-只有外部循环的前1000次迭代才会执行该内部语句

因为从长远来看,内部循环的迭代次数与n无关,所以在大O意义上,所指示的语句运行O(1)次

但是,如果将n保持为小,则循环运行的次数会出现对数增长。请注意,当i=1时,循环运行1000次,当i=2时,循环运行1000/2次,以此类推。忽略舍入的影响,在外循环的k次迭代后,内循环将运行

1000+1000/2+1000/3+…+1000/k

=1000(1/1+1/2+1/3+…+1/k)

=1000HK

次,其中Hk为第k次。第k次谐波数为Θ(logk),因此忽略循环迭代次数的四舍五入影响将对数增长

总之,短期内增长是对数增长,但由于整数除法,答案是O(1)

#include <stdio.h>

long long int test(long long int n) {
   long long int ct = 0;
   long long int i, j;
   for (i = 1; i < n; i++) {
       for (j = 1000/i; j > 0; j--) {
          ct ++;
       }
   }
   return ct;
}

int main(void) {
    long long int n;
    for (n = 1; n < 100000000; n *= 10) {
        printf("testing with n = %lld: ct = %lld\n", n, test(n));
    }
}
testing with n = 1: ct = 0
testing with n = 10: ct = 2827
testing with n = 100: ct = 5132
testing with n = 1000: ct = 7068
testing with n = 10000: ct = 7069
testing with n = 100000: ct = 7069
testing with n = 1000000: ct = 7069
testing with n = 10000000: ct = 7069