N個の異なる要素からいくつの二分探索木を構築できますか?そして、数学的に証明された式をどのように見つけることができますか?
例: 3つの異なる要素、たとえば1、2、3がある場合、5つの二分探索木があります。
N個の要素が与えられると、それらの要素から作成できる二分探索木の数は、n番目で与えられます カタラン数 (Cで示されます)n)。これは等しい
直感的に、カタラン数は、次の方法で作成されたn個の要素から構造を作成できる方法の数を表します。
このパターンは、n個の要素のセットからBSTを構築する方法と完全に一致します。ツリーのルートとして使用する要素を1つ選択します。小さい要素はすべて左に移動し、大きい要素はすべて右に移動する必要があります。そこから、左右の要素から小さなBSTを構築し、それらをルートノードと融合して全体的なBSTを形成できます。 n個の要素でこれを行うことができる方法の数はCによって与えられますn、したがって、可能なBSTの数は、n番目のカタラン数で与えられます。
お役に立てれば!
この質問は、数式を使って数えるだけではないと確信しています。少し時間を取って、プログラムとその計算の背後にある説明やアイデアを書きました。
再帰と動的計画法の両方でそれを解決してみました。お役に立てれば。
式は前の回答にすでに存在しています:
したがって、ソリューションの学習とアプローチの理解に興味がある場合は、いつでも私の記事を確認できます N個の一意の要素から作成されたバイナリ検索ツリーを数える
T(n)をn個の要素のbstの数とします。
1からnまでの番号が付けられたn個の異なる順序付けられた要素が与えられた場合、ルートとしてiを選択します。
これにより、(1..i-1)がT(i-1)の組み合わせの場合は左側のサブツリーに残り、(i + 1..n)がT(n-i)の組み合わせ。
したがって:
T(n) = sum_i=1^n(T(i-1) * T(n-i))
そしてもちろんT(1) = 1