データ構造(C記述)アルゴリズムの時間と空間の複雑さ

アルゴリズム:アルゴリズムは、特定の問題を解決するために規定された一連の操作である一連の制限されたルールです。
特性:

1.有限性:有限步骤内正常结束,不能形成无穷循环
2.确定性:算法中的每一个步骤必须有确定含义,无二义性
3.可行性:原则上能精确进行,操作可通过已经实现的基本运算执行有限次而完成
4.输入:有多个或0个输入
5.输出:至少有一个或多个输出

設計要件

正确性
可读性
健壮性(鲁棒性)
高效率和低储存量

費やされたアルゴリズム時間アルゴリズムの実行時間は、アルゴリズム内のすべてのステートメントの実行時間の合計を指します。各ステートメントの実行時間は、ステートメントの実行数に1回の実行に必要な実際の時間を掛けたものに等しくなります。
ステートメントの頻度:ステートメントはアルゴリズムの繰り返し実行回数、アルゴリズムの消費時間は、アルゴリズムのすべての文の頻度の合計です。

時間の複雑さ:
アルゴリズム分析の場合、問題は、アルゴリズムf(n)での文の実行の総数が問題サイズnの関数であり、nでのf(n)の変化を分析し、T(n)の大きさの次数を決定することです。 「O」を使用して、大きさの順序とアルゴリズムの時間の複雑さを表すT(n)= O(f(n));
アルゴリズムの分析では、アルゴリズムの時間の複雑さと時間の複雑さは区別できないことが多く、
最悪の場合次回は、複雑度の観点から最悪の時間の複雑度と呼ばれます
平均時間の複雑さは、考えられるすべての入力インスタンスが等しい確率で現れるときのアルゴリズムの予想実行時間を指します。

一般的に使用される時間の複雑度の頻度の数(増加する数で整理):

O(1)常数阶
O(log2n)对数阶
O(n)线性阶
O(nlog2n)线性对数阶
O(n^2)平方阶
O(n^3)立方阶
O(n^k)K次方阶
O(2n)指数阶

スペースの複雑さ:
アルゴリズムが占めるスペースは、アルゴリズムが実際に占める補助スペースの合計を指します。アルゴリズムのスペース複雑度S(n)は、アルゴリズムによって消費されるストレージスペースの大きさとして定義されます。これは、アルゴリズムの実行に必要な補助スペースの場合、問題サイズnの関数であり、
S(n)= O(f(n))
です。入力データの量に関連して、それは定数なので、このアルゴリズムはその場で機能していると呼ばれ、補助空間はO(1)です。

例:
1)O(1)定数の順序ここに画像の説明を挿入
分岐構造の場合、文がいくつあっても(ループ内ではない)、その時間の複雑さはO(1)です。

2)O(log2n)対数順序
まず、式を確認しましょう。多くの人が
a ^ y = x→y = log(a)(x)を忘れいると思います[式は、y = logがxに基づいていることを意味します対数。ここで、aは底、xは真の数です。さらに、aは0より大きく、aは1に等しくなく、xは0より大きい]
ここに画像の説明を挿入

バイナリ検索の時間の複雑さはO(log2n)で、1つの比較でkの等しい除算を達成できる場合(つまり、k-1の他の等しい長さは除外されます)、時間の複雑さはO(logkn)であり、複雑さの順序は同じです。

3)O(n)線形次数は
ここに画像の説明を挿入
比較的単純で、ループ本体がn回実行されたことは明らかです;
4)O(n ^ 2)平方次数
ここに画像の説明を挿入

ステップループステートメントでは、ループ本体内のステートメントのループ番号のみが考慮されます。明らかに、x ++の頻度はn ^ 2です
。3次と多次はほぼ同じですが、高次には実際的な意味はありません。考慮されていません

5)O(2n)指数オーダー
フィボナッチ数列は非常に明白な例
ここに画像の説明を挿入
です。理解しいないは落胆する必要はありません。次に、ポータルに直接アクセスし、フィボナッチ数列の式の導出プロセス:https: //wenku.baidu.com/view/54aa9443a8956bec0975e350.html

上記はすべて基本的な例ですが、変形するだけで難しいことではない複雑な質問もありますが、数学を必要とする質問もあります。

おすすめ

転載: blog.csdn.net/weixin_47160672/article/details/108674504