X^y를 찾으려면 다음 코드를 살펴보십시오.이론적으로는 로그 복잡성이지만 실제로는 선형 일
/* Find exponent in logarithmic complexity */
int findPower(int base, exponent){
if(1 == exponent) return base;
return (findPower(base, exponent/2)*findPower(base, exponent-exponent/2));
}
int main(int argc, char *argv[]){
if(argc < 3) {
printf("Usage :: logpow baseNumber power\n");
return -1;
}
printf("%s^%s = %d\n", argv[1], argv[2], findPow(atoi(argv[1]),
atoi(argv[2])));
return 0;
}
분석 결과 이것이 theta (log (n))의 복잡성을 보여줍니다. 하지만 그것은 여기에 시간을 측정하고 달렸다는 우리가 실제 시간 복잡도는 대수보다는 오히려 선형 동작을 가지고 있음을 알 수 위의 결과
Run 1: (calculating 1^500_million)
user-lm Programming # time ./a.out 1 500000000
1^500000000 = 1
real 0m5.009s
user 0m5.000s
sys 0m0.000s
Run 2: (calculating 1^1_Billion)
user-lm Programming # time ./a.out 1 1000000000
1^1000000000 = 1
real 0m9.667s
user 0m9.640s
sys 0m0.000s
Run 3: (calculating 1^2_Billion)
user-lm Programming # time ./a.out 1 2000000000
1^2000000000 = 1
real 0m18.649s
user 0m18.630s
sys 0m0.000s
있습니다!
이렇게 큰 차이가 나는 이유는 무엇일까요?
감사합니다, 귀하의 분석이 잘못
예! 아래에서 지적한 바와 같이, 측면에서 잘못된 분석이 발생했습니다. T (n) = 2T (n/2) + c => theta (n) @FlopCoder 감사합니다 :) 코드가 놀랍도록 빨리 실행됩니다. – Microkernel
얼마나 많은 시간이 걸렸습니까? 마지막 사건에 걸릴까요? – 0605002
0.02 초 !!! 그게 인상적이야 :) – Microkernel