BSTでの検索時に可能な検索パスの数


12

次の質問がありますが、答えはありません。私の方法が正しいかどうか私は感謝します:

Q.バイナリサーチツリーでキー値60を検索すると、キー値10、20、40、50、70、80、90を含むノードが、必ずしも指定された順序で移動されるわけではありません。これらのキー値が、値60を含むルートノードからの検索パスで発生する可能性のある順序はいくつありますか?

(A)35(B)64(C)128(D)5040

質問から、与えられたすべてのノードをトラバーサルに含める必要があり、最終的にキー60に到達する必要があることを理解しています。たとえば、そのような組み合わせの1つは次のようになります。

10、20、40、50、90、80、70、60。

上記のすべてのノードをトラバースする必要があるため、10または90から開始する必要があります。20から開始すると、10に到達しません(60> 20であり、20の右サブツリーをトラバースするため)。

同様に、80から始めることはできません。90に到達できないためです。80> 60なので、80の左のサブツリーをトラバースし、90に到達しません。

残りのノードは20、40、50、70、80、90です。次のノードは20または90のいずれかです。前述の同じ理由で他のノードを取得することはできません。

同様に考えると、各レベルで2つの選択肢があります。ノードは7つあるため、最初の6つには2つの選択肢があり、最後の1つには選択肢がありません。だから完全にあります

2222221順列= = 642664

  1. これは正解ですか?

  2. そうでない場合、より良いアプローチは何ですか?

  3. 一般化したいと思います。場合ノードが次に与えられる合計の可能な検索パスは次のようになり2 n 1n2n1

回答:


14

キー60を探す場合、60未満の数値に到達すると、右に進み(大きい数値がある場合)、未満の数値に出会うことはありません。その引数は繰り返すことができるため、10、20、40、50の数字は、検索に沿ってこの順序で出現する必要があります。KKK

同様に、キー60を検索すると、60より大きい数値に到達すると、レフト(小さい数値が存在する場所)に移動し、より大きい数値に出会うことはありません。したがって、90、80、70という数字は、この順序で検索に沿って出現する必要があります。KKK

配列10、20、30、 40、50、90、80、70は、その後限り、それらのサブ配列が無傷に保つように、一緒にシャッフルすることができます。したがって、10、20、40、50、90、80、70だけでなく、10、20、90、30、40、80、70、50も使用できます。

これで、数値を計算して、大きい数値と小さい数値の位置を選択できます。Aryabhataによるコメントを参照してください。4つの数値と3つの数値の2つのシーケンスがあります。いくつの方法でそれらをシャッフルできますか?最後の7つの位置では、大きい数値に対して3つの位置(そして小さい数値に対して残りの4つ)を選択する必要があります。私はこれらを方法でます。これらの位置を修正すると、完全なシーケンスがわかります。たとえば、最初の例ではSSSSLLLの位置があり、2番目の例ではSSLSLL Sです。(73)

一般化を求めます。常に、見つかった数よりも小さい数と、大きい数は、相対的な順序で固定されます。数値が小さいほど増加し、数値が減少する必要があります。数はです。xy(x+yy)

PS(編集)。Gillesに感謝します。Gillesは、30は問題になっていないと述べました。


きっとやってみたいと思います。番号90、80、70は一緒にする必要があるため、それらを単一の番号と見なしてみましょう。6つの場所に配置できます:_ 10 _ 20 _ 30 _ 40 _ 50 _ 同じことを言えば、番号[10,20,30,40,50]を配置できます4か所、 それはですが、発生している一般的な組み合わせで分割する必要があります(これは理解できません)2624
avi

@aviいいえ、それらは一緒である必要はありません。その順序でのみ:10、20、90、30、40、80、70、50は問題ありません。
Hendrik Jan

1
@avi:このように考えてみてください。これで、8つのスポットがあり、5つのスモールと3つのビッグがあります。それらをどのように埋めますか?8は3を選択します。これは56になります。ヘンドリクが得たものもそうだと思います。
Aryabhata

2
@HendrikJan元の質問には30はなく、7つの値しかありませんでした。そして7を選ぶ3は(A)です。
Gilles 'SO-悪をやめる'

1
@HendrikJan-これについて私に説明してもらえますか?見つかった数よりも小さい数と大きい数は常に相対的な順序で固定されますyxy
avi

1

ムーブをテキストに変換します。検索中にこれらのノードをトラバースしたと仮定します

ここに画像の説明を入力してください

赤色のものは60より大きく、青色のものは60より小さいことがわかります。

ノード60へのパスには、これらのノードが含まれています。したがって、問題の可能な解決策の1つは です。他の解決策はこれらの動きのみを含みます。ノードで一度にcozを実行すると、比較時にルートをSまたはLとして取得できます。これらのノードが検出されたため、そのセットからルートが選択されたことを意味します。

{S,S,S,S,L,L,L}

したがって、可能な解の総数=そのセットのすべての順列は、 回答= オプションA

7!4!×3!=35
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.