昨日、作成した2分探索木のプログラムを使って、
- 最悪の場合の2分探索木と
- 平衡2分探索木
が作られていく様子を見ていきたいと思います。
プログラム例(r05a_ap_pm3.py
)
最悪の場合
107行目以降を以下のように変更します。
関数insert
を使って、1
から順番に7
までデータを挿入していきます。
# 最悪の場合の時間計算量はO(n)である。 root = None for i in range(1, 8): root = insert(root, i) exec(f"fig{i} = draw_tree(root)") eval(f"fig{i}.view(\"fig{i}\")")
実行の様子
1
と2
が挿入された状態
7
まで挿入された状態
途中、省略しますが、7
まで挿入されると、右側だけに子ノードが存在する状態になります*1。
回転を利用して木のバランスを保つ
今度は、関数insertB
を使って、1
から順番に7
までデータを挿入していきます。
# 回転を利用して木のバランスを保つと計算量はO(log n)となる。 root = None for i in range(1, 8): root = insertB(root, i) exec(f"figB{i} = draw_tree(root)") eval(f"figB{i}.view(\"figB{i}\")")
実行の様子
1
,2
が挿入された状態
3
が挿入された状態
4
が挿入された状態
5
が挿入された状態
6
が挿入された状態
7
が挿入された状態
関連
- 情報処理技術者試験の過去問を実際に動かしてみよう!
- 令和5年度秋期 応用情報午後問3 - Mae向きなブログ
- 令和5年度秋期 応用情報午後問3(3) - Mae向きなブログ
- 平成27年度秋季応用情報午後問3 - Mae向きなブログ
- 平成18年度秋季ソフトウェア開発午後問5 - Mae向きなブログ
- 平成18年度秋季ソフトウェア開発午後問5(2) - Mae向きなブログ
*1:縦に伸びていますが、実際には右側に伸びています