2016-05-27 7 views
0

ログnを取得しましたが、ログnではありません。ログ(ログn)
ですが、なぜですか?どのようにこの関数の複雑さを見つけるのですか?


int function(int n){ 
    return aux(n , 2) 
} 

int aux(int n, int x){ 
    while (n<x) { 
    x *= x; 
    } 
    return x; 
} 

機能の複雑さは何ですか?

+4

Infinite。このアルゴリズムは、 'n'が2より小さい場合は決して終了しません。一方、* code *はあなたのアーキテクチャに応じて5回または6回反復するとオーバーフローします。 – RBarryYoung

+3

実際には、 'x>オーバーフローに必要な操作の数が' n'に依存しないため、 'n> 0'の場合は* O(1)*です。 – user3386109

+2

'x harold

答えて

1

ループの状態がn > xであることを確かめておいてください。私はこの答えで推測しています。

まず、xの値を守ってください。

x1 = x0 * x0 
    = 2 * 2 
    = 2^2 
x2 = x1 * x1 
    = x0 * x0 * x0 * x0 
    = 2 * 2 * 2 * 2 
    = 2^4 
x3 = x2 * x2 
    = x1 * x1 * x1 * x1 
    = x0 * x0 * x0 * x0 * x0 * x0 * x0 * x0 
    = 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 
    = 2^8 

私たちは、指数は、我々はxのための閉じた形の方程式を得ることができるようにtは、ループ内の繰り返しの数である2^tとして成長していることを参照してください。

01:
x = 2^(2^t) 

その後、我々は、反復tの数について解くことができます

必要に応じて

関連する問題