web-dev-qa-db-ja.com

二分探索木の検索時間

二分探索木(つまり、最悪の場合、最良の場合、平均の場合)の検索時間を把握する方法を知っている人はいますか?

15
jobe

これに「宿題」のタグを付けたいと思うかもしれません。ここに良い出発点があります: http://en.wikipedia.org/wiki/Binary_search_tree

一般に、balancedバイナリ検索ツリーでは、最悪の場合はO(log n)、最良の場合はO(1)(目的の値がルートの場合)およびO(log n)の平均ケース(葉には親よりも指数関数的に多くの値が含まれます)。

最悪のケースは最も興味深いものであり、バイナリツリーの最初のレベルには1つのノードがあり、2番目のレベルには2つ、3番目のレベルには4というように認識されることで簡単にわかります。したがって、深さnの二分木のノード数は正確に2 ^ n -1。指数関数の数学的な逆関数は対数です。したがって、O(log n)です。

不均衡なツリーは、リンクリストと同じくらい悪い場合があり、次のような形になる場合があります。

  1
 / \
    2
   / \
      3
     / \
        4
       / \

この状況では、最悪の場合のアクセス時間はO(n)です。

12
Daniel Spiewak

最良のケースはO(1)です。最初の要素はあなたが探しているアイテムかもしれません。最悪の場合はO(n)つまり、歪んだツリーで、平均的な場合はO(lg n)です。

2
sjsupersumit