コース: 「複雑さの分析 (パート 2): 最良、最悪、平均、および償却時間複雑さの簡単な分析」の概要
環境によって、コードの時間計算量が大きさ異なることがあります。コードの時間計算量をより包括的かつ正確に説明するには、次の概念を導入する必要があります。
複雑性分析の 4 つの概念
- ベストケースの時間計算量
最も理想的な状況で実行されるコードの時間計算量。 - 最悪の場合の時間計算量
最悪の場合のコード実行の時間計算量。 - 平均ケース時間複雑さ (平均ケース時間複雑さ)
すべてのケースにおけるコードの複雑さの加重平均、つまり 加重平均 時間計算量 または 予想時間計算量 - 償却時間計算量 (償却時間計算量)
タイミング関係のある連続操作のグループでは、この操作グループを全体としてみなした場合、実行時間を償却できます。複雑さの高いコードから複雑さの低いコードへ。次に、複雑度分析を実行した後の平均時間複雑度が得られます。この分析方法は償却分析と呼ばれます。 a>。 通常、この特殊な状況では、償却時間計算量が最良の場合の時間計算量になります。
以下は放課後の質問の事例分析です。
// 全局变量,大小为10的数组array,长度len,下标i。
int array[] = new int[10];
int len = 10;
int i = 0;
// 往数组中添加一个元素
void add(int element) {
if (i >= len) { // 数组空间不够了
// 重新申请一个2倍大小的数组空间
int new_array[] = new int[len*2];
// 把原来array数组中的数据依次copy到new_array
for (int j = 0; j < len; ++j) {
new_array[j] = array[j];
}
// new_array复制给array,array现在大小就是2倍len了
array = new_array;
len = 2 * len;
}
// 将element放到下标为i的位置,下标i加一
array[i] = element;
++i;
}
-
最良の場合の時間計算量
最良の場合は、現在の配列に追加データを保存するのに十分な領域があることです。つまり、データの追加操作が直接実行されるため、コードの実行回数の合計は定数レベルであるため、最適な時間計算量は O(1) です。 -
最悪の場合の時間計算量
最悪の場合は、配列がいっぱいで、新しい配列スペースを 2 倍再適用し、現在の配列の要素をコピーするためにループする必要がある場合です。新しいアレイに。現在の配列の長さが n であると仮定すると、Big O の複雑性分析手法によれば、コードの時間計算量は となります。 O(n)。 -
ケースの平均時間計算量
分析の結果、追加された要素の可能な格納場所は0、1、2、3、4 であることがわかりました。 .n -1 このn 状況と、配列がいっぱいで新しいアプリケーション領域が必要な状況つまり、1/(n+1) であり、各状況の確率が同じであると仮定します。つまり、 O(n) で、時間計算量 (つまり、最悪の時間計算量) ) スペースを申請するときの値は O(1) 計算量は n ケースの合計、スペースの申請が必要な前のケースでの時間n+1平均時間計算量は次のようになります。 T(n) = n 件 ( O(1) x 1 n + 1 {1 \over n + 1}
n+11 ) + ( 配列がいっぱいの場合は O(n) x 1 n + 1 {1 \over n + 1} n+11 ) 即ち
T(n) = O(1) x 1 n + 1 {1 \over n + 1} n+11 + O(1) x 1 n + 1 {1 \over n + 1} n+11 … O(1) x 1 n + 1 {1 \over n + 1} n+11 + O(n) x 1 n + 1 {1 \over n + 1} n+11 = O( 2 n n + 1 {2n \over n + 1} n+12n ) = O(1)
-
償却時間計算量
コードを分析すると、毎回n 回< a i =4>O(1) 操作の後には、O(n) の操作が続きます。これらの操作全体で、O(n) の操作に費やされる平均時間は n 操作。これは、もう 1 回のコード実行に相当します。O(1) 回 演算、つまり O(1) + O(1) = O(2) = O(1)< /span>。 -
以下は時間計算量の意味に基づいた私の分析です:
私たちは知っています ビッグオータイム複雑さ は、 データ サイズの増加に伴う コード実行時間の変化傾向を表します 。この観点から、このコードを見てください。配列のサイズが大きく、追加されたデータを格納するのに十分な領域がある場合、コードの実行回数は一定になります。したがって、平均時間計算量は O(1) です、平均時間計算量も O(1) になります。 a>.
前の記事:「データ構造とアルゴリズムの美しさ」学習ノート 2 日目
次の記事:「データ構造とアルゴリズムの美しさ」学習ノート 4 日目