このトピックについて以前に行ったこと:
私はかなり長い間、このトピックに固執してきました。「Algorithms in Java」と Adam Drozdek の本で単純なアルゴリズムの複雑さを計算する例をいくつか読み、フォーラムを検索しましたが、この質問が見つかりませんでした。
問題:
「Algorithms in Java」などの一部の書籍では、アルゴリズムの時間計算量を計算するために、特定のステートメントを n としています。しかし、「Adam Drozdek」の別の本では、ループの実行回数を n としています。したがって、1 つの n を使用して複雑さを計算すると、別の本では n が別のものとして扱われるため、計算された複雑さが間違っています。例を以下に示します。では、どうすれば同じプログラムの複雑さについて普遍的に合意できるのでしょうか?
例
順次検索の例があります。これがコードです。
static int search(int a[], int v, int l, int r) {
int i;
for (i = l; i <= r; i++)
if (v == a[i]) return i;
return -1;
} `
最悪のケースを考慮して:
r を n に等しいとしました。したがって、ループは n 回実行されます...
1) 比較とインクリメントと比較が n 回実行されるため、3n になります。
2) 初期化と宣言と return -1 が 1 回実行されるため、3 回です。
したがって、方程式は次のようになります
3n+3 で、複雑さは O(n) です。しかし、本はノーを考慮しています。n として比較の