該代碼的漸近運行時是O(1)即不管n
多大,存在一個常數即<=
比執行線arr[j]++;
的次數,而且恆定恰好是相當小。
證明:
#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
它是由硬常數7069,這是從未超過,因爲當n
超過1000時,該商將爲0上界。