Skip to content.

kagome.lab.tkikuchi.net

Sections
Personal tools
You are here: Home » Members » tkikuchi's Home » 授業 » アルゴリズムとデータ構造C » 整列・探索
Views

整列・探索

Document Actions

整列

  • bubble sort (あまり使ってはいけない例)
  • quick sort (と、言う名前のライブラリがある)

バブルソート

  • データの交換で整列を行う
  • メモリー領域が少なくて済む

バブルソートのアルゴリズム

  • 配列にデータが入っている
  • 隣同士を比較して、順が違えば交換。
  • 1回走査すると最後に最大(又は最小)が収まる。
  • 2回目の走査は配列の最後からひとつ手前までやればよい。
  • 比較・交換の回数は O( n2 )

バブルソートのプログラム例

クイックソート

  • 中間値を決める
  • 小さいものが左に、大きいもの右に行くように、交換する。
  • 左、右、それぞれに入ったものを上記と同様にして分けていく。
  • この再帰的操作を繰り返すことで全体が整列される。
  • 比較・交換の回数は O( n log n )

クイックソートのプログラム例

  • quicksort.py
  • 上の例は「中間値」がわかっている(ので簡単になっている)
  • 実際に使われている例: FreeBSD qsort()

探索(データ検索)

  • 探索しやすい構造にデータを入れていく
  • 二分探索(整列済みのデータ)
  • ハッシュ法
  • B 木

線形探索

  • どれくらい遅いか
  • Python のリストを in で探す spell.py
  • 比較:Python のディクショナリを has_key() で探す spelld.py

二分探索

  • データは整列済み
  • 配列の中央にあるデータと比較
  • 大小によって右又は左を探す
  • 以上の繰り返し
  • 探索は O( log n ) データの追加は O(n)

ハッシュ法

  • データを配列に入れれば、探索は「配列の要素指定」と同じ
  • 探索鍵となるデータが疎であると配列空間(メモリー)が無駄
  • 鍵 -> ハッシュ関数で探索空間を圧縮する
  • ハッシュ関数の例: 剰余
  • ハッシュの衝突:工夫が必要

B 木

  1. 根以外の節には、m個以上、2m個以下のキー(n個)... a[i]
  2. 根には 1個以上 2m個以下のキー
  3. 葉はすべて同一レベル
  4. 葉以外の節には、部分木へのポインタが n+1個 ... p[i]
  5. 任意の節において、キーは昇順に整列
  6. p[i-1]に属するキー < a[i] < p[i] に属するキー

m 次の B-tree

2次の B-tree

キーの追加

  • 単純な例

キーの追加

  • 葉の分割

キーの削除

  • 単純な例

キーの削除

  • アンダーフロー

キーの削除

問題

  • 次のうちデータ数が多くなると比較的に遅くなるものを選べ
  1. バブルソート
  2. クィックソート
  3. 線形探索
  4. ハッシュ法探索
Created by tkikuchi
Last modified 2006-07-11 10:21
 

Powered by Plone

This site conforms to the following standards: