以下のアルゴリズムの最悪の場合の複雑さを見つけようとしています。このアルゴリズムは、要素が n > 1 である配列 DATA 内の最大要素の位置 LOC1 と 2 番目に大きい要素の位置 LOC2 を見つけます。アルゴリズムの実行中の比較の数として複雑さを取っています。
FIND(DATA, N, LOC1, LOC2)
1. Set FIRST = DATA[1], SECOND = DATA[2], LOC = 1, LOC2 = 2.
2. IF FIRST < SECOND then:
a. Interchange FIRST and SECOND.
b. Set LOC1 = 2 and LOC2 = 1.
[End of If structure.]
3. Repeat for K= 3 to N:
If FIRST < DATA[K], then:
a. Set SECOND = FIRST and FIRST = DATA[k].
b. Set LOC2 = LOC1 and LOC2 = K.
Else if SECOND < DATA[K], then:
Set SECOND = DATA[K] and LOC2 = K.
[End of loop.]
4. Return
比較の数は配列内の要素の配置方法に依存するため、上記のプログラムの複雑さを見つける方法を理解できません。最悪のシナリオでは、SECOND 要素が DATA[K] と比較される else 条件も最大回数実行する必要があります。ただし、DATA 配列の要素によっては、多くの場合が考えられます。
ありがとう、
よろしく
tek3