応用情報技術者試験
情報技術者試験まとめへ

アルゴリズムとプログラム(1)

データ構造

配列とリスト


複数のデータを効率よく処理するためのデータ構造

配列リスト
順序の示し方添え字を利用ポインタを利用
メモリへの格納方法連続した領域に格納順序は無関係で空き領域に格納
データアクセス添え字によるランダムアクセスが可能先頭から順にたどる必要がある
データの挿入挿入位置により後ろのデータを後ろにずらしておく必要があるポインタの付け替えだけで可能
データの削除削除したデータより後ろのデータを前に詰めておく必要があるポインタの付け替えだけで可能
メモリ使用量
データ数あらかじめ決めておく可変

スタックとキュー


リストにデータの挿入や削除を行う考え方

スタック

リストにデータの挿入や削除を行う考え方
後に入れたデータが先に取り出される
データを入れることをPush(プッシュ)、データを取り出すことをPop(ポップ)という

スタック

キュー

リストにデータの挿入や削除を行う考え方
先に入れたデータが先に取り出される
データを入れることをEnqueue(エンキュー)、データを取り出すことをDequeue(デキュー)という

キュー

スタック:後入れ先出し
    PUSH:データ挿入
    POP:最後のデータ削除
キュー:先入れ先出し
    ENQUEUE:データ挿入
    DEQUEUE:最初のデータ削除

木構造


木構造

データを階層構造で管理するときに使用される図のこと
各要素を「(ノード)」、最上位の節を「(ルート)」、最下位の節を「(リーフ)」という。また各節を関連付ける線を「(ブランチ)」という。ルートからそのノードまでにたどる経路の長さを「深さ」という。また、木の中の一つのノードとその先にあるすべてのノードを「部分木」という

木の巡回法

木構造からデータを読み出すこと

幅優先探索
幅優先検索

根を開始地点として同じレベルにある節や葉を左から右に巡回してデータを読み出す方法

深さ優先検索

根から葉までの深さを探索したうえで、順に巡回してデータを読み出す方法
深さ優先探索は木を巡回する順番によって以下のように分類される

先行順探索親、左部分木、右部分木の順にデータを読み出す
中間順探索左部分木、親、右部分木の順にデータを読み出す
後行順探索左部分木、右部分木、親の順にデータを読み出す

深さ優先探索

2分木

節から分岐する枝が2本以下の構造の木のこと

完全2分木

根からすべての深さが等しい2分木のこと
根からすべての葉までの深さの差が1以下で、葉が左にひとつだけ配置されている
 2分木

2分木・完全2分木
木の深さ=n の時
   同じ深さの節点の個数(葉の個数) ⇒2n
   節点の全個数          ⇒2n+1−1
   枝の全個数           ⇒節点の全個数−1=2n+1−2

多分木

節から分岐する枝が2つより多い木構造のこと

多分木

2分探索木

節のデータを昇順または降順に並べておくことで、効率的に探索できる2分木のこと。すべての節で「左部分木<親<右部分木」が成立するようにする

2分探索木

ヒープ

すべての節で親と子の間に親≧子 または 親≦子」が成立する完全2分木のこと

ヒープ

AVL木

どの節点においても、その「左部分木の高さ」と「右部分木の高さ」の差が1以下となる木のこと

AVL木

B木

すべての節で左部分木と右部分木のレベルが同じ多分木
多分岐の平衡木(バランス木)である。1 ノードから最大m個の枝が出るとき、これをオーダーmのB木という
 1.各ノードは最大でm本の枝を持つ(m≧3)
 2.根以外の各ノードは、m/2本の枝を持つ
 3.ノード内のキー値は常に昇順で整列されている
 4.m個の枝を持つノードはm+1個の子を持つ
 5.葉はすべて同じレベルになる
各ノードのつながりに、一定の大小関係をもって構成されている。ノード間に一定の大小関係があるおかげで、データ検索時に余計なノードにアクセスすることなく、確実にデータのあるノードに近づくことができる。2分探索木が、下に伸びるリンクが2つなのに対して、B木は下方へのリンク数を増やして、木の高さを抑え、データ探索時にアクセス回数を大幅に減らせるというメリットが生まれる

B木

 

ページトップへ 次へ