2016-09-21 7 views
1

私はツリー上のBFSのバリエーションのようなアルゴリズムを開発しましたが、確率的要因が含まれています。探しているノードがノードであるかどうかをチェックするために、統計的なテストが実行されます(これについてあまり詳しく説明しません)。テスト結果が肯定的である場合、ノードは別のキュー(tested)に追加されます。しかし、ノードがテストに失敗すると、testedのノードを再度テストする必要があるため、このキューはまだテストされていないノードがあるノードに追加されます。アルゴリズムは確率的である可変長キューBFSのアルゴリズム複雑度解析

... 
tested = [] 
while q: 
    curr = q.pop(0) 
    p = statistical_test(curr) 
    if p: 
     tested.append(curr) 
    else: 
     q.extend(curr.children()) 
     q.extend(tested) 
     tested = [] 
return tested 

として、複数のノードを検索した後testedにあるかもしれないが、それが期待されている:キューqは、ルートノードから始まることを考慮すると、Pythonで

、。私が直面している問題は、単純にBFSの複雑さを使うことができないので、このアルゴリズムの複雑さを見積もることです。qtestedは可変長です。

これについては、明確な回答は必要ありません。私が必要とするのは、このような状況に対処する方法に関するいくつかの洞察です。

+2

最悪の場合、プログラムは決して終了しません。 – Tempux

+0

キューのサイズは関係ありません。問題は統計部分のエラー率は何ですか? –

+0

どのように終了しませんか?テストで同じ入力に対して異なる結果が得られない限り、どのように終了しないかはわかりません。 –

答えて

0

最悪のシナリオは、次のプロセスである。

  1. 全ての要素1:N-1は、試験に合格し、testedキューに追加されます。
  2. 要素Nがテストに失敗し、qから除去され、そしては、n-1 testedから要素はqに押し戻されます。
  3. とステップ1に戻るN = N-1

これは古典的なO(N )プロセスです。

+0

キューがすべての要素で初期化されていると仮定しています。キューがルートノードのみで初期化されている(古典的なBFSのように)場合、アルゴリズムは最初のノードがテストに合格するとすぐに戻ります。 – Munir

+1

@ムニール - それは最悪の場合の分析のポイントです。「最良のケース」は無関係です。 – Amit

+0

私はあなたの分析ではなく、すべての要素でキューが初期化されていると仮定しています。 OPは、ループの開始時にキューがどのように設定されているかについては言及していません。 – Munir

関連する問題