2016-05-03 2 views
-3

ジョブがあり、多くのワーカーが利用可能であると仮定します。 次のコードは、最適化の考え方が悪い可能性があります。 しかし複雑さを分析するためだけです。未知の確率の計算複雑度

A is a set of N worker 
while (A is not empty) 
{ 
    B=empty set 
    foreach a1 in A 
    { 
    foreach a2 in A 
    { 
     b= merge(a1, a2) 
     if (b works better than a1 **and** b works better than a2) 
      add b to B 
    } 
    } 
    A=B 
} 

問題は、「bがa1とa2より優れている」という確率は不明です。 したがって、上記のコードの時間複雑さを見積もるにはどうすればよいですか?

+0

あろう、 'B'は何ですか? – fjardon

+1

定数時間操作のように見えます。だからそれは問題ではない。 @Nico Schertler。 –

+0

。問題を指摘してくれてありがとう。私はコードを修正し、Aはwhileループ内で更新されます。 merge()は、a1とa2が結合されて1組のワーカーであることを示します。すなわち、「A」は当初、単一労働者のグループを含んでいた。それから、「A」は徐々に大きなグループを含む。 複雑さは 'if'ステートメントの数として数えられると仮定します。 –

答えて

-1

2つの内部ループの場合、複雑さはの確率とは無関係です。「bはa1とa2よりも優れています」
しかし、には出口がありませんが、ループは見つからないため、コードが少し壊れているようです。 が Whileループを考慮していない、時間の複雑さは

O(A1 *、A2)= O(N^2)となります。

再発式が ``)(マージされるもの

T(N)= T(N-1)+ C