ツリーは有限であり、ラベルは実数であるため、ラベルのセットに最小の要素があることが保証されます(math.SEからのこの質問には、この単純なプロパティの証明があります)。この場合、すべてのラベルが区別されるため、極小値を隣接するものよりも厳密に小さくする必要があります。そうであれば、この条件を「以下」に緩和する必要があります。そうでない場合、解決策がない可能性があります。それにもかかわらず、少なくとも1つの極小値を見つける必要があることはわかっています。
ツリーがルート化されている場合(つまり、親子関係の概念がある場合)、問題をわずかに安く解決できます。ツリーがルート化されていない場合は、漸近的にも同様に実行できますが、より実際のプローブを実行する可能性があります。
最初に、根本的なケースを扱います。
ツリーは(完全な)バイナリツリーであるため、各頂点には最大で3つの隣接ノード、その親と2つの兄弟(ルートには親がありません)があるため、ラベルがラベルよりも小さい場合、頂点は極小になりますその2人の子供と親の。したがって、頂点がローカルミニマムであるかどうかを最大4つのプローブで判断できます(実際には順序付けされた方法でツリーをトラバースするため、ルート付きの場合は最大3つが必要です)。
ローカルミニマムを実際に見つけるには、次の方法で、ルートを現在の頂点として、ツリーをトラバースできます。
- 現在の頂点のラベルとその2つの子のラベルを調べます。
- 現在のラベルが最小の場合、停止し、現在の頂点が局所最小であることを報告します。
- それ以外の場合は、現在の頂点を最小のラベルを持つ子に設定し、手順1に戻ります。
ルートから始めると、親のラベルについて心配する必要はありません。ルートには親がなく、現在の頂点に親がある場合は、前の反復でそれを割り引いていたに違いありません。ステップ2では、最小のラベルを選択する必要は厳密にはありません。現在のラベルよりも小さいラベルで十分です1。最小のラベルを選択すると、明確な選択肢が与えられます(ここでも、ラベルが異なるため)。
2つの子から1つの頂点を選択すると、トラバーサルはルートから(最も遠い)リーフへのパスを選択します。したがって、深さのバイナリツリーがあるので d< ログn + 1 (それは完全なバイナリツリーなので n =2d− 1 頂点)、最大で実行します 3 D∈O (ログn ) プローブ。
ルート化されていないケースでは、そのような便利な開始点はありませんが、(アルゴリズムがそれを知らなくても)ツリー構造はまだあります。次のアルゴリズムを使用できます。
- 任意の頂点を選択して、初期の現在の頂点にします。
- 現在の頂点とその近傍すべてのラベルを調べます。
- 現在の頂点が最も低いラベルを持っている場合、停止し、それを極小値として報告します。
- それ以外の場合は、ラベルが最も低い近傍を新しい現在の頂点として選択し、手順2に戻ります。
各反復では最大4つのプローブしか実行しないため、問題は反復がいくつあるかということです。重要なのは、後戻りできないことを確認することです(元のラベルが大きいことはわかっています)。そのため、グラフ内の単純なパスをたどる必要がありますが、グラフは実際には完全なバイナリツリーなので、最も長い単純なパスです。長さがあります2 D。したがって、根ざしていない場合でも、私たちはせいぜい実行します8 D∈ O (ログn ) プローブ。
正確さを期すために、2番目のアルゴリズムを調べます(根付きの場合は明らかに根なしの特別な場合にすぎません)。
グラフが有限であるため、アルゴリズムが決してバックトラックできないという事実も終了を保証します。これで、頂点がv私たちが終了するのは、実際には極小です。矛盾していないと仮定すると、隣人がいるあなた値が小さいラベルがあります。3つのケースがあります:(1)あなた アルゴリズムがたどったパスの前の頂点です。この場合、アルゴリズムが あなた、選択されなかったでしょう v次の頂点として; (2)あなたはパスに表示されますが、以前の複数の反復、この場合、グラフはツリーではありません。および(3)あなた アルゴリズムがたどったパスにはありませんが、アルゴリズムは あなた ステップ4の次の頂点として、アルゴリズムは v。したがってv 極小値でなければなりません。
これを確認する別の方法は、アルゴリズムによって選択された頂点のラベルのシーケンスが単調減少していることを単に観察することです。これから、終了と正当性の両方がすぐに続きます。
脚注:
- これを可能にするプロパティは、すべてのサブツリーにローカルミニマムがあることです。ここでも、全体の順序付けを持つすべての有限セットには最小の要素があります。したがって、帰納法により、サブツリーを新しいルートと兄弟サブツリーで拡張すると、次の3つのケースがあります。(2)新しいルートは1つの子よりも小さく、他の子よりも小さい場合、アルゴリズムはより大きなルートを選択せず、定義により最小にする必要があります。または(3)両方の子が小さいが、この場合、前述のように、各サブツリーには少なくとも1つの極小値があるため、どちらかを選択できます。