ハッシュ法
ここまでの授業では、配列(データ検索は、登録順保存ならO(N)、2分探索ならO(log N)となる、2分探索ができるのは配列がランダムアクセスができるからこそ)、単純リスト(データ検索(シーケンシャルアクセスしかできない […]
コンパイラと正規表現とBNF記法
コンパイラと言語処理系 2分木の応用の構文木について、この後説明を行うが、構文木を使うコンパイラなどの一般知識を事前に説明しておく。 高級言語で書かれたプログラムを計算機で実行するソフトウェアは、言語処理系と呼ばれる。そ […]
2分木による構文木とデータベースとB木
コンパイラの処理の流れ 構文の構造を表すために、2分木を使うという話をこの後に行うが、その前にコンパイラが機械語を生成するまでの処理の流れについて説明をする。 Cコンパイラのソース ↓ プリプロセッサ (#defin […]
意思決定木と演算子
データをO(log N)で検索するための2分探索木以外の2分木のデータ構造について解説を行う。 意思決定木 意思決定木の説明ということで、yes/noクイズの例を示しながら、2分木になっていることを 説明しプログラムを紹 […]
AVL木と2分ヒープ
2分探索木へのデータ追加と不均一な木の成長 先週の講義で説明していた、entry() では、データを追加すべき末端を探し、追加する処理であった。 しかし、前回のプログラムで、以下のような順序でデータを与えたら、どのような […]
2分探索木
配列やリスト構造のデータの中から、目的となるデータを探す場合、配列であれば2分探索法が用いられる。これにより、配列の中からデータを探す処理は、O(log N)となる。(ただし事前にデータが昇順に並んでいる必要あり) // […]
双方向リストとdeque
番兵と双方向循環リスト 前述の bd_insert() だが、データの先頭にデータを挿入したい場合は、どう呼び出せば良いだろうか? bd_insert() で、末尾にデータを挿入する処理は、正しく動くだろうか? 同じく、 […]
ランダムアクセス・シーケンシャルアクセスから双方向リスト
ランダムアクセスO(1)とシーケンシャルアクセスO(N)の説明を踏まえ、リスト構造のO(N)の改善にむけた解説を行う。 リスト構造の利点と欠点 リストを使った集合演算のように、データを連ねたリストは、単純リストとか線形リ […]
集合とリスト処理
リスト構造は、必要に応じてメモリを確保するデータ構造であり、データ件数に依存しないプログラム が記述できる。その応用として、集合処理を考えてみる。集合処理の記述には、2進数を使った方式やリストを用いた方法が一般的である。 […]
スタックと待ち行列
前回の授業では、リストの先頭にデータを挿入する処理と、末尾に追加する処理について説明したが、この応用について説明する。 計算処理中に一時的なデータの保存として、スタック(stack)と待ち行列・キュー(queue)がよく […]