「令和5年度秋期 応用情報午後問3 - Mae向きなブログ」、「令和5年度秋期 応用情報午後問3(2) - Mae向きなブログ」の続きです。
graphviz
を使うと、2分探索木を見える化できるので、もう少し多くの要素を持つ2分探索木を描いてみました。
プログラム例(r05a_ap_pm3.py
)
127個の要素を持つ2分探索木
127個の要素を、以下の2つの方法でランダムに2分探索木に挿入していきました。
insert
関数を使うinsertB
関数を使う(バランスをとる方法)
プログラム例(r05a_ap_pm3.py
)の107行目以降を以下のように変更します。
import random A = [i for i in range(1, 2**7)] random.shuffle(A) root = None for i in A: # 127個の要素を木に挿入 root = insert(root, i) fig = draw_tree(root) fig.view("fig") rootB = None for i in A: # 127個の要素をバランスをとりながら挿入 rootB = insertB(rootB, i) figB = draw_tree(rootB) figB.view("figB")
実行結果
insert
関数使用
木の高さは、12となりました。14
の検索は1回で済みますが、52
を探すときは、12回の検索回数が必要となります。
insertB
関数使用
木の高さは、7となりました。最悪でも7回の探索でデータを検索することができます。