Submit Search
アルゴリズム+データ構造勉強会(1)
•
4 likes
•
2,407 views
N
noldor
Follow
1 of 14
Download now
Downloaded 13 times
More Related Content
アルゴリズム+データ構造勉強会(1)
1.
アルゴリズム+データ構造
勉強会(1) 2013-01-28 アロハ)竹腰 彰成
2.
この勉強会について • 予定回数)全15回 • 参加対象)PHPの文法を理解していること •
進め方)講義+実習 • 参加資格)初回は自由参加 2回目からは前回参加分の実習に合格していること
3.
15回の内容 • 第1回. 整列とは
• 第9回. 配列(リスト・スタック・待ち行列) • 第2回. バブルソート • 第10回. リングバッファ • 第3回. 選択ソート • 第11回. 木構造 • 第4回. クイックソート • 第12回. 木構造(2) • 第5回. マージソート • 第13回. 二分探索木 • 第6回. 分布数え上げソート • 第14回. バックトラック法 • 第7回. 基数ソート • 第15回. バックトラック法(2) • 第8回. usort()を使ったソート
4.
アルゴリズム+データ構造 とは • ニクラウス・ヴィルトの書籍名
「アルゴリズム+データ構造=プログラム」 • アルゴリズム=処理手順 • データ構造=データの持ち方 • 「PHPを覚えたのにプログラムできない」 • 「英語覚えたのにコミュニケーションできない」にさも似たり • 文法がわかっていても使い方をわかっていない • アルゴリズムとデータ構造がわかればプログラムを書ける
5.
第1回 整列(ソート)とは
6.
ソートの種類はたくさん • Wikipediaに記載されているだけでも20種類 • 何が違うか?
たとえば…… • データを持つ場所 • 汎用的か特殊か • 2回並べなおしたときの動作
7.
ソートの種類(1) データを持つ場所 • 内部整列:主記憶(メモリ)上でソートする
• ランダムアクセスができる • =データ構造に自由度がある • =速いアルゴリズムを組める • メモリ上にある=がんばっても数GBまで(昔は数MBまで) • 外部整列:外部記憶(ディスク)上でソートする • シーケンシャルアクセスになる • =データ構造に制限がある • =遅いアルゴリズムになりがち • ディスク上にある=容量がいっぱい
8.
ソートの種類(2) 汎用性 • 比較による整列
• 大小を比較して交換をする • 汎用的に使える • 計算量はO(n log n)が最小 • 比較によらない整列 • 大小を比較しない整列 • データの特殊性を利用する • 例)テストの点数は0~100点の整数101種類しかなく、件数は生徒数×教科数だけ • 計算量はO(n)が可能
9.
計算量とは • アルゴリズムの速さの指標 • 処理個数が増えた時の処理時間の増え方を示す
10.
ソートの種類(3) 2回並べなおすとき • 安定なソート:ソート前の順序がソート後にも保たれている •
不安定なソート:ソート前の順序はソート後に破壊される • 例)テストの成績順 名前でソートした後で点数でソートしたとき、 同じ点数の生徒の順番が名前順になっているかどうか 安定なソート 不安定なソート 100点 できすぎ 100点 できすぎ 85点 みなもと 85点 みなもと 10点 ごうだ 10点 ごうだ 10点 のび 10点 ほねかわ 10点 ほねかわ 10点 のび
11.
ソート関数 • PHPにはすでに用意されている •
sort() • 他言語でも同様 • Linuxにもsortコマンド • ほとんどの用途に使えて、自分で作るより高速 • 中身はクイックソート(最速の汎用ソートアルゴリズム) • 普段はこれを使おう • これでダメなときはソートの種類を吟味して自作する • この勉強会の第7回までは「勉強のために」自分で作っていきます
12.
自作するにあたり • バグがあってはいけません • コードを書いたら動作検証(単体テスト)をします
13.
実習:ソート前後のデータを表示する • 次回からsort()を自作するので、その検証ができるようにテストコード
を作りましょう • ランダムなデータを配列に20個用意する • ソート前データを表示する(ランダムであることを目視できるようにする) • sort()でソートする • ソート後のデータを表示する(整列されたことを目視できるようにする) • 勉強会の残り時間を使って書いてください。時間のある限り質問を 受け付けます • できあがったら提出してください • 時間に間に合わない場合は宿題にします
14.
今日の単語まとめ • 主記憶装置、外部記憶装置(補助記憶装置) • シーケンシャルアクセス、ランダムアクセス •
計算量 • 安定なソート、不安定なソート
Download