二分探索木 アルゴリズムを実装してみる【python】
今日は、二分探索木のアルゴリズムについて扱っていきます。二分探索木の基本的な考えは、Atcoderでも二分探索木の考えも出てきているのでアウトプットのために書きました。今日は二分探索木を参考書などで調べたので、何か間違えていたら教えてください。
二分探索木
配列内の数を二分探索木で調べる
二分探索木
二分探索木(二分探索木)とは「左の子孫の値<=親の値<=右の子孫の値」という制約を持つ二分木である。
二分探索方の実行時間はO(logn)となっている。また二分探索法は配列がソートされている場合に使用することが大半です。なのでソート時間は含まれていません。
また、これから扱うコード内の配列もソートされている配列前提で話しています。
扱うコード
このコードは配列x内の数(search=54)が配列内の何番目に位置しているかを知れべるコードです。実際はfor文を使うことでも同じようにできますが、atcoderなどではfor文の探索でも10^7で大体実行時間がオーバーしてしまいますが、二分探索木では10^30までは可能です。なのでデータ数が多い場合は二分探索木が有効なのです。
実行結果
こんな感じになりました。
また、10^7でfor文での探査と二分探索木の実行時間を比較してみました
これが二分探索木での実行時間です。
こちらがfor文の実行時間です。
データ数が多いと実行時間に差が出てきますね
何か質問や間違った内容がありましたら教えてください