[資格]ソフトウェア開発技術者#2 ソフトウェア編

| コメント(0) | トラックバック(0)
○スケジューリングアルゴリズム
実行可能状態にあるプロセスの内、どのプロセスを実行するか
・到着順方式
 先に起動したプロセスを先に実行する方法
 先に到着したプロセスがCPUを長く利用するプロセスの場合、システムの応答性が低くなる
・処理時間方式
 プロセスが必要とする処理時間の短い順に実行する
・ラウンドロビン方式
 処理を一定時間行い、時間切れになったら実行可能状態に戻して列の最後に
・優先度順方式
 プロセスに優先度をつけ、優先度の高いプロセスから順に実行する
 優先度が低いプロセスがなかなか実行されない
・多重待ち行列方式
 ラウンドロビン方式に優先度順方式を取り入れたもの
 最初は高い優先順位と短いCPU時間を割り当て、その後は優先度を低くしてCPU時間を長くしていく

○排他制御
・デッドロック
 複数のプロセスがお互いにロック解除を待ち、先に進まない状態
・セフォマ
 排他制御を実行するための変数
 0ならロック状態、1ならロック取得可能
・P操作
 セフォマが0より大きければ1減らしてロック取得。0なら待機
・V操作
 セフォマを1増やし、ロック解除

○データ構造
・リスト
・LIFO(スタック)
 逆ポーランド記法で使う
・FIFO

○木
・2分木
 親の持つ子要素が2つ以下で左右の子を区別する木
・2分探索木
 各接点が持つデータについて、『左部分木の値<親<右部分木の値』が成り立つ』木
 親が削除された場合、左部分木の最大値か右部分木の最小値を親にする
・ヒープ
 各接点について、『親≦子』または『親≧子』の関係が成り立っている2分木
 左右の子の大小は問わない
・AVL木
 各接点について左部分木と右部分木の高さの差が±1までに収まる2分探索木
 挿入や削除の後に最適化を行う必要あり
・B木
 子の最大数がm、最少数がm/2となるタ分木
 データは葉に格納

○探索
・線形探索法
 前から順にデータをデータを調べていく。データ右端に番兵と呼ばれる目的のデータを入れて終了判定
 O(n)
・2分探索法
 ソート済みのデータに対し、真ん中の値を調べ、調べる範囲を半分にしていく
 O(log n)
・ハッシュ表
 データをハッシュ関数(データを配列の長さで割った余り)で求めた場所に格納する
 値によって衝突が起こる。衝突時の処理として、オープンアドレス法とチェイン法がある
・オープンアドレス法
 衝突が発生した時、別の関数でサイド計算し、そのアドレスに格納する
・チェイン法
 衝突が発生した時、その場所にリストを作り、リストに格納する
・ハッシュ法
 O(1)で追加、削除、嘆息を行えるが、衝突が多いとこの限りではない

○ソート
・選択整列法
 先頭から順に最小値を探し、先頭を交換
 比較回数O(n^2)
・交換法(バブルソート)
 隣り合わせになっているデータの大小を正していく
 比較回数O(n^2)
・挿入整列法
 整列部分にデータを挿入する方法。前から順位整列していって、次のデータをその中に挿入する
 比較回数O(n^2)
・シェルソート
 挿入整列法を改良したもの
 データをいくつかの部分列に分割し、分割したデータに対し挿入整列法を行う
・ヒープソート
 ヒープ木を作成し、根の値を最大値としれ取り出す、残りを再構築し、これを繰り返す
 計算量は、O(n log n)
・クイックソート
 基準となる値を決め、それより大きいか小さいかで分割し、この分割を最後まで繰り返す分割統治法
 計算量はO(n log n)
 最も高速なソートだが、データが整列済みだとオワッテル
・マージソート
 データを最後まで分割し、併合しながらソートしていく分割統治法
 大量のメモリが必要
 計算量は(n log n)
・安定な整列法
 同じ値が含まれている場合、ソート前とソート後でその順序が保たれているものを安定という
 安定:バブルソート、納入整列法、シェルソート、マージソート
 不安定:ヒープソート、クイックソート

○文字列探索
・力任せ法
 前から順に比較し、違ったら比較する位置を1つずらす
・KMP法
 前から順に比較し、違ったら、そこから比較しなおす
・BM法
 見つけたい文字列の右から比較する。違ったら見つけたい文字列分ずらして比較

トラックバック(0)

トラックバックURL: http://blog.isocchi.com/MovableType/mt-tb.cgi/207

コメントする

このブログ記事について

このページは、isocchiが2007年10月20日 14:41に書いたブログ記事です。

ひとつ前のブログ記事は「[資格]ソフトウェア開発技術者#1 ハードウェア編」です。

次のブログ記事は「[OCaml]#7 List.map List.fold_right List.fold_leftを使ってみる」です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。

ウェブページ

Powered by Movable Type 5.0