このバブルソートの疑似コードを考えてみましょう:
FOR i := 0 TO arraylength(list) STEP 1
switched := false
FOR j := 0 TO arraylength(list)-(i+1) STEP 1
IF list[j] > list[j + 1] THEN
switch(list,j,j+1)
switched := true
ENDIF
NEXT
IF switched = false THEN
break
ENDIF
NEXT
平均的な時間の複雑さを評価するために覚えておかなければならない基本的なアイデアは何でしょうか?最悪のケースと最良のケースの計算はすでに完了していますが、内部ループの平均的な複雑さを評価して方程式を作成する方法を検討しています。
最悪の場合の方程式は次のとおりです。
ここで、内側のシグマは内側のループを表し、外側のシグマは外側のループを表します。私は両方のシグマを変更する必要があると思います。これは、外側のシグマに影響を与える可能性のある「if-then-break」節のためだけでなく、ループ中に実行されるアクションに影響を与える内側のループのif節のためにもです(4つのアクション+ trueの場合は1つの比較、それ以外の場合は1つの比較のみ)。
平均時間という用語を明確にするために、この並べ替えアルゴリズムでは、リストが完全に整うまでループ内またはループ内でステップが多少増減する可能性があるため、(同じ長さの)異なるリストでは異なる時間が必要になります。私は必要なそれらのラウンドの平均を評価する数学的(非統計的な方法)を見つけようとします。
このため、どの注文でも同じ可能性があると期待しています。