データ構造とアルゴリズム

第八回 (2014年11月14日)

辞書とその実装: 二分木など

http://www.sw.it.aoyama.ac.jp/2014/DA/lecture8.html

Martin J. Dürst

AGU

© 2009-14 Martin J. Dürst 青山学院大学

目次

前回の残り

前回のまとめ

レポートの課題

手作業の場合に効率的な順列アルゴリズムを考えて提案して分析しなさい。

条件は次の通り: 資料がそれぞれ A4 の紙一枚。見やすい位置に10桁の番号が書かれてある。その番号の昇順にソートする。番号の分布については一切不明。二つのケースを想定:

  1. 一人で資料6000枚をソート
  2. 24人で資料60000枚をソート

共通のアルゴリズムでも別々のアルゴリズムでもよい。分析では O() での計算量 (理由つき) と実際に想定される時間、今まで習ったアルゴリズムとの類似点や相違点、手作業の特徴を考慮した点などについても論じる。

レポートの「失敗」の例

O(n log n) より早い整列法

ビンソート

例: 学生番号で整列

基数整列

(radix sort)

辞書の抽象データ型

(dictionary; 注: 実際の辞書とは違う)

辞書の簡単な実装

二分木

二分木の辿り方

二分探索木

(定義・普遍条件)

探索木での探索

探索木への挿入

探索木からの削除

探索木の実装

単純な探索木の評価

平衡木

(balanced tree)

解決策: 完全ではないがある程度平衡性を保つ木

 

トップダウン 2-3-4 木

(top-down 2-3-4 tree)

 

次回への宿題

(提出無し)