0

2 つの b-tree が同じ値を持ち、形状が異なる可能性があることを確認した場合、値を調べて、両方のツリーが同じキーを持っているかどうかを比較するアルゴリズムはありますか?

ポイントは、異なるキーが含まれている場合に (できるだけ早く) 救済できるようにすることです。

両方の b ツリーで同時にルックアップを実行しない限り、再帰アルゴリズムはおそらく機能しません。

Bツリーをトラバースするアルゴリズムを見てきましたが、両方をトラバースしてからキーを比較したくはありません。違いがある場合はできるだけ早く救済するよりスマートなものが必要です。

基本的に、この関数は true/false を返します。

4

2 に答える 2

2

基本的な手法は、順序通りのトラバーサルで現在のポイントを表すオブジェクトを何とか持つことです。ツリーの各インスタンスに 1 つずつ、2 つ取得したら、次のキーのためにそれらをポンピングし続け、2 つが最初に異なる次のキーを返すと、完了です。

C#yield returnでは、一度に 1 つのキーを生成し、ツリー内の場所を追跡するトラバーサルを作成するために使用します。その後、それらのうちの 2 つを に渡すことができますSequenceEquals。最初の差に遭遇するとすぐに救済されます。Java では、そのメカニズムを自分で構築する必要がありますが、それほど難しくありません。

于 2013-01-31T14:53:59.497 に答える
0

Bツリーを意味すると仮定すると、必要なのは両方を一度に反復することだけです。いずれかのイテレータ間の偏差は、それらの内容が異なることを証明します。ツリーを構築する際に詳細を収集することなく、それよりも優れたアルゴリズムを見つけることはまずありません。

次のように説明されているbツリーについて話していない場合:

... Bツリーは、データをソートしたままにし、対数時間で検索、順次アクセス、挿入、および削除を可能にするツリーデータ構造です。

次に、最初に並べ替えてからトラバースする必要があります。

于 2013-01-31T14:55:43.537 に答える