SlideShare a Scribd company logo
1 of 20
アルゴリズムとデータ構
造
1.「イントロダクショ
ン」2011 年 4 月 19 日(火)
服部 健太
2011/4/19 アルゴリズムとデータ構造 1 2
本講座(全 15 コマ)の目的
 基本的なアルゴリズムとデータ構造について
理解する
 配列,リスト,スタック,キュー,ツリー,ソー
ト,ハッシュ, etc.
 計算量の概念を理解し,与えられたアルゴリ
ズムのおおまかな計算量を見積もれるように
なる
 簡単な問題なら,自分でアルゴリズムを設計
できるようになる
2011/4/19 アルゴリズムとデータ構造 1 3
講義予定
 第1回「イントロダクショ
ン」
 第2回「制御構造,再帰」
 第3回「配列とリスト」
 第4回「スタック,
キュー」
 第5回「ツリー(木)」
 第6回「線形探索と2分探
索」
 第7回「2分探索木」
 第8回「平衡木」
 第9回「ハッシュ法」
 第10回「初等的な整列法」
 第11回「整列アルゴリズム
II」
 第12回「グラフアルゴリズ
ムI」
 第13回「グラフアルゴリズ
ムII」
 第14回「文字列」
 第15回「アルゴリズムの設
計」
2011/4/19 アルゴリズムとデータ構造 1 4
使用テキスト
 本講座の内容は主に以下のテキストにもとづ
く
 石畑清,「アルゴリズムとデータ構造」,岩波講
座ソフトウェア科学3.
 ただし,言語は Python を用いる
 Python 言語の説明は適宜行うので
知らなくてもOK
 ちなみに,上記テキストでは Pascal を
使用している
2011/4/19 アルゴリズムとデータ構造 1 5
なぜアルゴリズムを学ぶのか?
 そもそもプログラミングとは
 アルゴリズムとデータ構造をデザインすることにほかなら
ない
 よくある反論
 ライブラリを使えばいいじゃん
 それに対する反論
 ライブラリが提供するアルゴリズムを正しく使うには知識
が必要
 ライブラリだけですべてが済むとは限らない
 注意点
 ただし,ライブラリで提供されているものはそれを使うこ
と
 業務でプログラムを作成する場合には,自前で実装しない
こと
2011/4/19 アルゴリズムとデータ構造 1 6
アルゴリズムとは何か?
 矛盾なく定義された( well-defined )計算手続き
 入力( input )として,値か値の集合を取り
 出力( output )として,値か値の集合を生成する
 入力から出力へ変換するための一連の計算ステップ
 (計算)問題を解くための道具としてみることもで
きる
 計算機に問題を解かせるために,アルゴリズムをプ
ログラミング言語によって記述したものがプログラ
ムである
 アルゴリズム「でない」ものの例:
 料理のレシピ
2011/4/19 アルゴリズムとデータ構造 1 7
準備体操
 任意桁の2つの正整数の足し算を行う手順
(筆算)を,正確に記述してみよ.
 ただし,小学生は
 1 桁同士の数の足し算は理解してるものとする.
 0 (ゼロ)も繰り上がりも理解している.
 数を(紙に書いておくなどして)記憶することも
できる
 「もし~ならば,~せよ」という指示の理解でき
る.
 「~まで,~を繰り返す」という指示も理解でき
る
2011/4/19 アルゴリズムとデータ構造 1 8
解答例
 足し合わせる2つの数字を,右揃えで縦に並べる.
 1の位から始める
 その位の数をそれぞれ足す.
 もし,繰り上がりがあるなら,次の位に1を立てる.
 全ての位について,上の手順を繰り返す
 厳密に,漏れなく記述しようとすると,すごく面倒
くさい.
 アルゴリズムの記述には曖昧さがあってはならない
2011/4/19 アルゴリズムとデータ構造 1 9
Python について
 本講座では Python でアルゴリズムを記述する
 Python の主な特徴
 オブジェクト指向スクリプト言語
 ただし,本講座では「オブジェクト指向」な機能は用いない
 構文(シンタックス)と意味(セマンティクス)がシンプ
ルで理解しやすい
 ブロック構造をインデントによって表す
 リストやディクショナリなど豊富な組込みデータ型
 動的な型付け
 ・・・
 準備作業:
 各自のPCに Python ( version3.2 推奨)環境をインス
トールせよ
 http://www.python.jp/Zope/download/pythoncore
2011/4/19 アルゴリズムとデータ構造 1 10
Python によるプログラム例
 入力:2組の数列 A と B
 A = [a1,a2,…,an] , B = [b1,b2,…,bm]
 1 の位から左から順に並べる.
 出力:数列 S
 S = [s1,s2,…]
 手続き
def add(A,B):
S = [0]; n = len(A); m = len(B)
for i in range(0,max(n,m)):
if i < n: S[i] = S[i] + A[i]
if i < m: S[i] = S[i] + B[i]
if S[i] >= 10:
S[i] = S[i] - 10; S.append(1)
else:
S.append(0)
return S
2011/4/19 アルゴリズムとデータ構造 1 11
ユークリッドの互除法
 世界最古のアルゴリズムといわれてる
 2つの正整数 p と q の最大公約数を求める
 (1) p を q で割った余りを r とする
 (2) r = 0 ならば q を答えとする
 (3) r ≠0 のときは, q と r を新しい p と q として
(1) へ
 問題: 54 と 39 の最大公約数をユークリッド
の互除法で求めてみよ
2011/4/19 アルゴリズムとデータ構造 1 12
Python によるプログラム例(2)
 ユークリッドの互除法
 入力: 2 組の 1 以上の正整数 p と q
 出力: p と q の最大公約数 r
 手続き
def GCD(p,q):
while True:
r = p % q
if r == 0: return q
p, q = q, r
2011/4/19 アルゴリズムとデータ構造 1 13
アルゴリズムの正しさ
 正しいアルゴリズムとは:
 すべての入力に対して,「停止し」,「正しい答
え」を出力する
 正しくないアルゴリズム
 ある入力に対して,「停止しない」
 停止するが,答えが所望のものではない
⇒ 間違う確率が制御できる場合には,有用な「正し
くないアルゴリズム」もある
例:確率的な素数判定法
2011/4/19 アルゴリズムとデータ構造 1 14
アルゴリズムの応用例
 ヒトゲノムの解読
 30 億もの塩基配列の情報を特定し,データベー
スに格納し,データ解析のツールを開発する.
 インターネットのルーティング
 ネットワークのデータを適切なあて先に届けるた
めの経路を見つける.
 E コマースサービスの基盤
 クレジットカードの番号やパスワード情報を秘密
にしておくための暗号アルゴリズム.
 などなど.
2011/4/19 アルゴリズムとデータ構造 1 15
データ構造とは
 簡単に参照したり変更したりするために,
データを格納し組織化するための方法
 全ての目的に適う,万能のデータ構造は無い
 さまざまなデータ構造の利点と限界を知ることは
非常に重要.
2011/4/19 アルゴリズムとデータ構造 1 16
困難な問題
 世の中には,効率良い解法が見つかっていない問題
もある.
 答えが得られるまで非常に長い時間がかかる
 NP 完全問題
 そのような問題群の重要なサブセット
 これまで, NP 完全問題を解く効率良いアルゴリズムは見つ
かっていないが,かといってそのようなアルゴリズムが存在
しないことは誰も証明していない
 NP 完全問題のうち, 1 つでも問題が効率よく解けるアルゴ
リズムが見つかれば,他の NP 完全問題も効率よく解ける.
 いくつかの NP 完全問題は,それと良く似た形の簡単に解け
る問題がある.
 実世界の問題には, NP 完全な問題も数多く表れる
 NP 完全問題について知ってないと無駄な時間を費やすこと
に...
2011/4/19 アルゴリズムとデータ構造 1 17
NP 完全問題の例
 中央倉庫を持つトラック配送会社
 倉庫でトラックに荷物を積み,配達のためにいく
つかの拠点に積荷を送って回る.
 1 日の割りに,トラックは中央倉庫に戻ってくる
.
 コストを削減するために,なるべく少ない距離で
拠点を訪問したい.
 じつは,「巡回セールスマン問題」として知
られる NP 完全問題
2011/4/19 アルゴリズムとデータ構造 1 18
アルゴリズムの計算量
 一般に同じ問題を解くのにも,様々なアルゴ
リズムが考えられる.
 アルゴリズムの良し悪しの評価基準
 答えを出すまでにどれくらい計算時間がかかるか
 時間計算量と呼ぶ
 Cf. 計算のためにどれくらいメモリを消費するかについ
て,空間計算量という概念もある
2011/4/19 アルゴリズムとデータ構造 1 19
O (オー)記法について
 データサイズに対する計算量の増え方の度合を表し
たもの
 定義:
 関数 g(n) が O(f(n)) であるとは,定数 c0 と n0 が存在
して, n > n0 であるすべての n に対して  g(n) < c0 ・
f(n) が成り立つことである
 アルゴリズムでよく見られるオーダー
 O(1) -定数オーダー,データサイズによらず一定
 O(log N) -対数オーダー,二分探索など.
 O(N) -線形探索など
 O(NlogN) -マージソート,高速フーリエ変換など
 O(N2
) -単純なソート,クイックソートの最悪ケースなど
 O(CN
) -指数オーダー
2011/4/19 アルゴリズムとデータ構造 1 20
計算量と計算時間の関係
 n=100 のときに 1 秒かかるとして計算
 特に明記していない欄の単位は秒
計算量 n=10 20 50 100 200 500 1000 10000
O(1) 1 1 1 1 1 1 1 1
O(log n) 0.5 0.65 0.85 1 1.15 1.35 1.5 2
O(n) 0.1 0.2 0.5 1 2 5 10 100
O(n log n) 0.05 0.13 0.42 1 2.3 6.75 15 200
O(n2
) 0.01 0.04 0.25 1 4 25 100 2.78 時
間
O(n3
) 0.001 0.008 0.125 1 8 125 1000 11.6 日
O(2n
) 0.001 1.02 34.8
年
― ― ― ― ―

More Related Content

What's hot

圏論とHaskellは仲良し
圏論とHaskellは仲良し圏論とHaskellは仲良し
圏論とHaskellは仲良しohmori
 
圏論のモナドとHaskellのモナド
圏論のモナドとHaskellのモナド圏論のモナドとHaskellのモナド
圏論のモナドとHaskellのモナドYoshihiro Mizoguchi
 
OWLで何が言えるか
OWLで何が言えるかOWLで何が言えるか
OWLで何が言えるかKazuro Fukuhara
 
一階述語論理のメモ
一階述語論理のメモ一階述語論理のメモ
一階述語論理のメモKeisuke OTAKI
 

What's hot (6)

圏論とHaskellは仲良し
圏論とHaskellは仲良し圏論とHaskellは仲良し
圏論とHaskellは仲良し
 
圏論のモナドとHaskellのモナド
圏論のモナドとHaskellのモナド圏論のモナドとHaskellのモナド
圏論のモナドとHaskellのモナド
 
ソート
ソートソート
ソート
 
OWLで何が言えるか
OWLで何が言えるかOWLで何が言えるか
OWLで何が言えるか
 
人工知能概論 13
人工知能概論 13人工知能概論 13
人工知能概論 13
 
一階述語論理のメモ
一階述語論理のメモ一階述語論理のメモ
一階述語論理のメモ
 

More from Kenta Hattori

オブジェクト指向入門2
オブジェクト指向入門2オブジェクト指向入門2
オブジェクト指向入門2Kenta Hattori
 
オブジェクト指向入門1
オブジェクト指向入門1オブジェクト指向入門1
オブジェクト指向入門1Kenta Hattori
 
オブジェクト指向入門10
オブジェクト指向入門10オブジェクト指向入門10
オブジェクト指向入門10Kenta Hattori
 
オブジェクト指向入門9
オブジェクト指向入門9オブジェクト指向入門9
オブジェクト指向入門9Kenta Hattori
 
オブジェクト指向入門8
オブジェクト指向入門8オブジェクト指向入門8
オブジェクト指向入門8Kenta Hattori
 
オブジェクト指向入門7
オブジェクト指向入門7オブジェクト指向入門7
オブジェクト指向入門7Kenta Hattori
 
オブジェクト指向入門6
オブジェクト指向入門6オブジェクト指向入門6
オブジェクト指向入門6Kenta Hattori
 
オブジェクト指向入門5
オブジェクト指向入門5オブジェクト指向入門5
オブジェクト指向入門5Kenta Hattori
 
オブジェクト指向入門4
オブジェクト指向入門4オブジェクト指向入門4
オブジェクト指向入門4Kenta Hattori
 
オブジェクト指向入門3
オブジェクト指向入門3オブジェクト指向入門3
オブジェクト指向入門3Kenta Hattori
 
ソフトウェア・テスト入門2
ソフトウェア・テスト入門2ソフトウェア・テスト入門2
ソフトウェア・テスト入門2Kenta Hattori
 
ソフトウェア・テスト入門1
ソフトウェア・テスト入門1ソフトウェア・テスト入門1
ソフトウェア・テスト入門1Kenta Hattori
 
ソフトウェア・テスト入門8
ソフトウェア・テスト入門8ソフトウェア・テスト入門8
ソフトウェア・テスト入門8Kenta Hattori
 
ソフトウェア・テスト入門7
ソフトウェア・テスト入門7ソフトウェア・テスト入門7
ソフトウェア・テスト入門7Kenta Hattori
 
ソフトウェア・テスト入門6
ソフトウェア・テスト入門6ソフトウェア・テスト入門6
ソフトウェア・テスト入門6Kenta Hattori
 
ソフトウェア・テスト入門5
ソフトウェア・テスト入門5ソフトウェア・テスト入門5
ソフトウェア・テスト入門5Kenta Hattori
 
ソフトウェア・テスト入門4
ソフトウェア・テスト入門4ソフトウェア・テスト入門4
ソフトウェア・テスト入門4Kenta Hattori
 
ソフトウェア・テスト入門3
ソフトウェア・テスト入門3ソフトウェア・テスト入門3
ソフトウェア・テスト入門3Kenta Hattori
 
アルゴリズムとデータ構造15
アルゴリズムとデータ構造15アルゴリズムとデータ構造15
アルゴリズムとデータ構造15Kenta Hattori
 
アルゴリズムとデータ構造14
アルゴリズムとデータ構造14アルゴリズムとデータ構造14
アルゴリズムとデータ構造14Kenta Hattori
 

More from Kenta Hattori (20)

オブジェクト指向入門2
オブジェクト指向入門2オブジェクト指向入門2
オブジェクト指向入門2
 
オブジェクト指向入門1
オブジェクト指向入門1オブジェクト指向入門1
オブジェクト指向入門1
 
オブジェクト指向入門10
オブジェクト指向入門10オブジェクト指向入門10
オブジェクト指向入門10
 
オブジェクト指向入門9
オブジェクト指向入門9オブジェクト指向入門9
オブジェクト指向入門9
 
オブジェクト指向入門8
オブジェクト指向入門8オブジェクト指向入門8
オブジェクト指向入門8
 
オブジェクト指向入門7
オブジェクト指向入門7オブジェクト指向入門7
オブジェクト指向入門7
 
オブジェクト指向入門6
オブジェクト指向入門6オブジェクト指向入門6
オブジェクト指向入門6
 
オブジェクト指向入門5
オブジェクト指向入門5オブジェクト指向入門5
オブジェクト指向入門5
 
オブジェクト指向入門4
オブジェクト指向入門4オブジェクト指向入門4
オブジェクト指向入門4
 
オブジェクト指向入門3
オブジェクト指向入門3オブジェクト指向入門3
オブジェクト指向入門3
 
ソフトウェア・テスト入門2
ソフトウェア・テスト入門2ソフトウェア・テスト入門2
ソフトウェア・テスト入門2
 
ソフトウェア・テスト入門1
ソフトウェア・テスト入門1ソフトウェア・テスト入門1
ソフトウェア・テスト入門1
 
ソフトウェア・テスト入門8
ソフトウェア・テスト入門8ソフトウェア・テスト入門8
ソフトウェア・テスト入門8
 
ソフトウェア・テスト入門7
ソフトウェア・テスト入門7ソフトウェア・テスト入門7
ソフトウェア・テスト入門7
 
ソフトウェア・テスト入門6
ソフトウェア・テスト入門6ソフトウェア・テスト入門6
ソフトウェア・テスト入門6
 
ソフトウェア・テスト入門5
ソフトウェア・テスト入門5ソフトウェア・テスト入門5
ソフトウェア・テスト入門5
 
ソフトウェア・テスト入門4
ソフトウェア・テスト入門4ソフトウェア・テスト入門4
ソフトウェア・テスト入門4
 
ソフトウェア・テスト入門3
ソフトウェア・テスト入門3ソフトウェア・テスト入門3
ソフトウェア・テスト入門3
 
アルゴリズムとデータ構造15
アルゴリズムとデータ構造15アルゴリズムとデータ構造15
アルゴリズムとデータ構造15
 
アルゴリズムとデータ構造14
アルゴリズムとデータ構造14アルゴリズムとデータ構造14
アルゴリズムとデータ構造14
 

Recently uploaded

My Inspire High Award 2024  「正義って存在するの?」
My Inspire High Award 2024  「正義って存在するの?」My Inspire High Award 2024  「正義って存在するの?」
My Inspire High Award 2024  「正義って存在するの?」inspirehighstaff03
 
My Inspire High Award 2024    「孤独は敵なのか?」
My Inspire High Award 2024    「孤独は敵なのか?」My Inspire High Award 2024    「孤独は敵なのか?」
My Inspire High Award 2024    「孤独は敵なのか?」inspirehighstaff03
 
My Inspire High Award 2024「スーパーマーケットで回収されたキャベツ外葉は廃棄されているの?」
My Inspire High Award 2024「スーパーマーケットで回収されたキャベツ外葉は廃棄されているの?」My Inspire High Award 2024「スーパーマーケットで回収されたキャベツ外葉は廃棄されているの?」
My Inspire High Award 2024「スーパーマーケットで回収されたキャベツ外葉は廃棄されているの?」inspirehighstaff03
 
ゲーム理論 BASIC 演習105 -n人囚人のジレンマモデル- #ゲーム理論 #gametheory #数学
ゲーム理論 BASIC 演習105 -n人囚人のジレンマモデル- #ゲーム理論 #gametheory #数学ゲーム理論 BASIC 演習105 -n人囚人のジレンマモデル- #ゲーム理論 #gametheory #数学
ゲーム理論 BASIC 演習105 -n人囚人のジレンマモデル- #ゲーム理論 #gametheory #数学ssusere0a682
 
【ゲーム理論入門】ChatGPTが作成した ゲーム理論の問題を解く #3 Slide
【ゲーム理論入門】ChatGPTが作成した ゲーム理論の問題を解く #3 Slide【ゲーム理論入門】ChatGPTが作成した ゲーム理論の問題を解く #3 Slide
【ゲーム理論入門】ChatGPTが作成した ゲーム理論の問題を解く #3 Slidessusere0a682
 
My Inspire High Award 2024 「本当の『悪者』って何?」
My Inspire High Award 2024 「本当の『悪者』って何?」My Inspire High Award 2024 「本当の『悪者』って何?」
My Inspire High Award 2024 「本当の『悪者』って何?」inspirehighstaff03
 
リアル戦国探究in米沢 事前講座2スライド(スタッフ共有用)『両雄の強さの秘密』についてのスライド
リアル戦国探究in米沢 事前講座2スライド(スタッフ共有用)『両雄の強さの秘密』についてのスライドリアル戦国探究in米沢 事前講座2スライド(スタッフ共有用)『両雄の強さの秘密』についてのスライド
リアル戦国探究in米沢 事前講座2スライド(スタッフ共有用)『両雄の強さの秘密』についてのスライドKen Fukui
 
My Inspire High Award 2024      「家族とは何か」
My Inspire High Award 2024      「家族とは何か」My Inspire High Award 2024      「家族とは何か」
My Inspire High Award 2024      「家族とは何か」inspirehighstaff03
 
My Inspire High Award 2024「他者と自分、対立を防ぐには?」
My Inspire High Award 2024「他者と自分、対立を防ぐには?」My Inspire High Award 2024「他者と自分、対立を防ぐには?」
My Inspire High Award 2024「他者と自分、対立を防ぐには?」inspirehighstaff03
 
リアル戦国探究in米沢 事前講座1スライド(スタッフ共有用)『川中島の謎』についてのスライド
リアル戦国探究in米沢 事前講座1スライド(スタッフ共有用)『川中島の謎』についてのスライドリアル戦国探究in米沢 事前講座1スライド(スタッフ共有用)『川中島の謎』についてのスライド
リアル戦国探究in米沢 事前講座1スライド(スタッフ共有用)『川中島の謎』についてのスライドKen Fukui
 
My Inspire High Award 2024「世の中の流行はどのようにして生まれるのか」
My Inspire High Award 2024「世の中の流行はどのようにして生まれるのか」My Inspire High Award 2024「世の中の流行はどのようにして生まれるのか」
My Inspire High Award 2024「世の中の流行はどのようにして生まれるのか」inspirehighstaff03
 
リアル戦国探究in米沢 当日講座1(スタッフ共有用)『兵は詐をもって立つ』についてのスライド
リアル戦国探究in米沢 当日講座1(スタッフ共有用)『兵は詐をもって立つ』についてのスライドリアル戦国探究in米沢 当日講座1(スタッフ共有用)『兵は詐をもって立つ』についてのスライド
リアル戦国探究in米沢 当日講座1(スタッフ共有用)『兵は詐をもって立つ』についてのスライドKen Fukui
 
TEAMIN Service overview for customer_20240422.pdf
TEAMIN Service overview for customer_20240422.pdfTEAMIN Service overview for customer_20240422.pdf
TEAMIN Service overview for customer_20240422.pdfyukisuga3
 
My Inspire High Award 2024 「AIと仲良くなるには?」
My Inspire High Award 2024 「AIと仲良くなるには?」My Inspire High Award 2024 「AIと仲良くなるには?」
My Inspire High Award 2024 「AIと仲良くなるには?」inspirehighstaff03
 
My Inspire High Award 2024「Yakushima Islandってなんか変じゃない?」.pdf
My Inspire High Award 2024「Yakushima Islandってなんか変じゃない?」.pdfMy Inspire High Award 2024「Yakushima Islandってなんか変じゃない?」.pdf
My Inspire High Award 2024「Yakushima Islandってなんか変じゃない?」.pdfinspirehighstaff03
 
My Inspire High Award2024「外国人が日本のテーブルマナーに驚く理由は?」
My Inspire High Award2024「外国人が日本のテーブルマナーに驚く理由は?」My Inspire High Award2024「外国人が日本のテーブルマナーに驚く理由は?」
My Inspire High Award2024「外国人が日本のテーブルマナーに驚く理由は?」inspirehighstaff03
 
My Inspire High Award 2024「なぜ人は他人と違うところがあってもそれをなかなか誇れないのか?」
My Inspire High Award 2024「なぜ人は他人と違うところがあってもそれをなかなか誇れないのか?」My Inspire High Award 2024「なぜ人は他人と違うところがあってもそれをなかなか誇れないのか?」
My Inspire High Award 2024「なぜ人は他人と違うところがあってもそれをなかなか誇れないのか?」inspirehighstaff03
 
リアル戦国探究in米沢 当日講座2スライド(スタッフ共有用)『人を致すも人に致されず』についてのスライド
リアル戦国探究in米沢 当日講座2スライド(スタッフ共有用)『人を致すも人に致されず』についてのスライドリアル戦国探究in米沢 当日講座2スライド(スタッフ共有用)『人を致すも人に致されず』についてのスライド
リアル戦国探究in米沢 当日講座2スライド(スタッフ共有用)『人を致すも人に致されず』についてのスライドKen Fukui
 
リアル戦国探究in米沢 当日講座3スライド(スタッフ共有用)『糧は三度はさいせず』についてのスライド
リアル戦国探究in米沢 当日講座3スライド(スタッフ共有用)『糧は三度はさいせず』についてのスライドリアル戦国探究in米沢 当日講座3スライド(スタッフ共有用)『糧は三度はさいせず』についてのスライド
リアル戦国探究in米沢 当日講座3スライド(スタッフ共有用)『糧は三度はさいせず』についてのスライドKen Fukui
 
My Inspire High Award 2024「老いることは不幸なこと?」
My Inspire High Award 2024「老いることは不幸なこと?」My Inspire High Award 2024「老いることは不幸なこと?」
My Inspire High Award 2024「老いることは不幸なこと?」inspirehighstaff03
 

Recently uploaded (20)

My Inspire High Award 2024  「正義って存在するの?」
My Inspire High Award 2024  「正義って存在するの?」My Inspire High Award 2024  「正義って存在するの?」
My Inspire High Award 2024  「正義って存在するの?」
 
My Inspire High Award 2024    「孤独は敵なのか?」
My Inspire High Award 2024    「孤独は敵なのか?」My Inspire High Award 2024    「孤独は敵なのか?」
My Inspire High Award 2024    「孤独は敵なのか?」
 
My Inspire High Award 2024「スーパーマーケットで回収されたキャベツ外葉は廃棄されているの?」
My Inspire High Award 2024「スーパーマーケットで回収されたキャベツ外葉は廃棄されているの?」My Inspire High Award 2024「スーパーマーケットで回収されたキャベツ外葉は廃棄されているの?」
My Inspire High Award 2024「スーパーマーケットで回収されたキャベツ外葉は廃棄されているの?」
 
ゲーム理論 BASIC 演習105 -n人囚人のジレンマモデル- #ゲーム理論 #gametheory #数学
ゲーム理論 BASIC 演習105 -n人囚人のジレンマモデル- #ゲーム理論 #gametheory #数学ゲーム理論 BASIC 演習105 -n人囚人のジレンマモデル- #ゲーム理論 #gametheory #数学
ゲーム理論 BASIC 演習105 -n人囚人のジレンマモデル- #ゲーム理論 #gametheory #数学
 
【ゲーム理論入門】ChatGPTが作成した ゲーム理論の問題を解く #3 Slide
【ゲーム理論入門】ChatGPTが作成した ゲーム理論の問題を解く #3 Slide【ゲーム理論入門】ChatGPTが作成した ゲーム理論の問題を解く #3 Slide
【ゲーム理論入門】ChatGPTが作成した ゲーム理論の問題を解く #3 Slide
 
My Inspire High Award 2024 「本当の『悪者』って何?」
My Inspire High Award 2024 「本当の『悪者』って何?」My Inspire High Award 2024 「本当の『悪者』って何?」
My Inspire High Award 2024 「本当の『悪者』って何?」
 
リアル戦国探究in米沢 事前講座2スライド(スタッフ共有用)『両雄の強さの秘密』についてのスライド
リアル戦国探究in米沢 事前講座2スライド(スタッフ共有用)『両雄の強さの秘密』についてのスライドリアル戦国探究in米沢 事前講座2スライド(スタッフ共有用)『両雄の強さの秘密』についてのスライド
リアル戦国探究in米沢 事前講座2スライド(スタッフ共有用)『両雄の強さの秘密』についてのスライド
 
My Inspire High Award 2024      「家族とは何か」
My Inspire High Award 2024      「家族とは何か」My Inspire High Award 2024      「家族とは何か」
My Inspire High Award 2024      「家族とは何か」
 
My Inspire High Award 2024「他者と自分、対立を防ぐには?」
My Inspire High Award 2024「他者と自分、対立を防ぐには?」My Inspire High Award 2024「他者と自分、対立を防ぐには?」
My Inspire High Award 2024「他者と自分、対立を防ぐには?」
 
リアル戦国探究in米沢 事前講座1スライド(スタッフ共有用)『川中島の謎』についてのスライド
リアル戦国探究in米沢 事前講座1スライド(スタッフ共有用)『川中島の謎』についてのスライドリアル戦国探究in米沢 事前講座1スライド(スタッフ共有用)『川中島の謎』についてのスライド
リアル戦国探究in米沢 事前講座1スライド(スタッフ共有用)『川中島の謎』についてのスライド
 
My Inspire High Award 2024「世の中の流行はどのようにして生まれるのか」
My Inspire High Award 2024「世の中の流行はどのようにして生まれるのか」My Inspire High Award 2024「世の中の流行はどのようにして生まれるのか」
My Inspire High Award 2024「世の中の流行はどのようにして生まれるのか」
 
リアル戦国探究in米沢 当日講座1(スタッフ共有用)『兵は詐をもって立つ』についてのスライド
リアル戦国探究in米沢 当日講座1(スタッフ共有用)『兵は詐をもって立つ』についてのスライドリアル戦国探究in米沢 当日講座1(スタッフ共有用)『兵は詐をもって立つ』についてのスライド
リアル戦国探究in米沢 当日講座1(スタッフ共有用)『兵は詐をもって立つ』についてのスライド
 
TEAMIN Service overview for customer_20240422.pdf
TEAMIN Service overview for customer_20240422.pdfTEAMIN Service overview for customer_20240422.pdf
TEAMIN Service overview for customer_20240422.pdf
 
My Inspire High Award 2024 「AIと仲良くなるには?」
My Inspire High Award 2024 「AIと仲良くなるには?」My Inspire High Award 2024 「AIと仲良くなるには?」
My Inspire High Award 2024 「AIと仲良くなるには?」
 
My Inspire High Award 2024「Yakushima Islandってなんか変じゃない?」.pdf
My Inspire High Award 2024「Yakushima Islandってなんか変じゃない?」.pdfMy Inspire High Award 2024「Yakushima Islandってなんか変じゃない?」.pdf
My Inspire High Award 2024「Yakushima Islandってなんか変じゃない?」.pdf
 
My Inspire High Award2024「外国人が日本のテーブルマナーに驚く理由は?」
My Inspire High Award2024「外国人が日本のテーブルマナーに驚く理由は?」My Inspire High Award2024「外国人が日本のテーブルマナーに驚く理由は?」
My Inspire High Award2024「外国人が日本のテーブルマナーに驚く理由は?」
 
My Inspire High Award 2024「なぜ人は他人と違うところがあってもそれをなかなか誇れないのか?」
My Inspire High Award 2024「なぜ人は他人と違うところがあってもそれをなかなか誇れないのか?」My Inspire High Award 2024「なぜ人は他人と違うところがあってもそれをなかなか誇れないのか?」
My Inspire High Award 2024「なぜ人は他人と違うところがあってもそれをなかなか誇れないのか?」
 
リアル戦国探究in米沢 当日講座2スライド(スタッフ共有用)『人を致すも人に致されず』についてのスライド
リアル戦国探究in米沢 当日講座2スライド(スタッフ共有用)『人を致すも人に致されず』についてのスライドリアル戦国探究in米沢 当日講座2スライド(スタッフ共有用)『人を致すも人に致されず』についてのスライド
リアル戦国探究in米沢 当日講座2スライド(スタッフ共有用)『人を致すも人に致されず』についてのスライド
 
リアル戦国探究in米沢 当日講座3スライド(スタッフ共有用)『糧は三度はさいせず』についてのスライド
リアル戦国探究in米沢 当日講座3スライド(スタッフ共有用)『糧は三度はさいせず』についてのスライドリアル戦国探究in米沢 当日講座3スライド(スタッフ共有用)『糧は三度はさいせず』についてのスライド
リアル戦国探究in米沢 当日講座3スライド(スタッフ共有用)『糧は三度はさいせず』についてのスライド
 
My Inspire High Award 2024「老いることは不幸なこと?」
My Inspire High Award 2024「老いることは不幸なこと?」My Inspire High Award 2024「老いることは不幸なこと?」
My Inspire High Award 2024「老いることは不幸なこと?」
 

アルゴリズムとデータ構造1

  • 2. 2011/4/19 アルゴリズムとデータ構造 1 2 本講座(全 15 コマ)の目的  基本的なアルゴリズムとデータ構造について 理解する  配列,リスト,スタック,キュー,ツリー,ソー ト,ハッシュ, etc.  計算量の概念を理解し,与えられたアルゴリ ズムのおおまかな計算量を見積もれるように なる  簡単な問題なら,自分でアルゴリズムを設計 できるようになる
  • 3. 2011/4/19 アルゴリズムとデータ構造 1 3 講義予定  第1回「イントロダクショ ン」  第2回「制御構造,再帰」  第3回「配列とリスト」  第4回「スタック, キュー」  第5回「ツリー(木)」  第6回「線形探索と2分探 索」  第7回「2分探索木」  第8回「平衡木」  第9回「ハッシュ法」  第10回「初等的な整列法」  第11回「整列アルゴリズム II」  第12回「グラフアルゴリズ ムI」  第13回「グラフアルゴリズ ムII」  第14回「文字列」  第15回「アルゴリズムの設 計」
  • 4. 2011/4/19 アルゴリズムとデータ構造 1 4 使用テキスト  本講座の内容は主に以下のテキストにもとづ く  石畑清,「アルゴリズムとデータ構造」,岩波講 座ソフトウェア科学3.  ただし,言語は Python を用いる  Python 言語の説明は適宜行うので 知らなくてもOK  ちなみに,上記テキストでは Pascal を 使用している
  • 5. 2011/4/19 アルゴリズムとデータ構造 1 5 なぜアルゴリズムを学ぶのか?  そもそもプログラミングとは  アルゴリズムとデータ構造をデザインすることにほかなら ない  よくある反論  ライブラリを使えばいいじゃん  それに対する反論  ライブラリが提供するアルゴリズムを正しく使うには知識 が必要  ライブラリだけですべてが済むとは限らない  注意点  ただし,ライブラリで提供されているものはそれを使うこ と  業務でプログラムを作成する場合には,自前で実装しない こと
  • 6. 2011/4/19 アルゴリズムとデータ構造 1 6 アルゴリズムとは何か?  矛盾なく定義された( well-defined )計算手続き  入力( input )として,値か値の集合を取り  出力( output )として,値か値の集合を生成する  入力から出力へ変換するための一連の計算ステップ  (計算)問題を解くための道具としてみることもで きる  計算機に問題を解かせるために,アルゴリズムをプ ログラミング言語によって記述したものがプログラ ムである  アルゴリズム「でない」ものの例:  料理のレシピ
  • 7. 2011/4/19 アルゴリズムとデータ構造 1 7 準備体操  任意桁の2つの正整数の足し算を行う手順 (筆算)を,正確に記述してみよ.  ただし,小学生は  1 桁同士の数の足し算は理解してるものとする.  0 (ゼロ)も繰り上がりも理解している.  数を(紙に書いておくなどして)記憶することも できる  「もし~ならば,~せよ」という指示の理解でき る.  「~まで,~を繰り返す」という指示も理解でき る
  • 8. 2011/4/19 アルゴリズムとデータ構造 1 8 解答例  足し合わせる2つの数字を,右揃えで縦に並べる.  1の位から始める  その位の数をそれぞれ足す.  もし,繰り上がりがあるなら,次の位に1を立てる.  全ての位について,上の手順を繰り返す  厳密に,漏れなく記述しようとすると,すごく面倒 くさい.  アルゴリズムの記述には曖昧さがあってはならない
  • 9. 2011/4/19 アルゴリズムとデータ構造 1 9 Python について  本講座では Python でアルゴリズムを記述する  Python の主な特徴  オブジェクト指向スクリプト言語  ただし,本講座では「オブジェクト指向」な機能は用いない  構文(シンタックス)と意味(セマンティクス)がシンプ ルで理解しやすい  ブロック構造をインデントによって表す  リストやディクショナリなど豊富な組込みデータ型  動的な型付け  ・・・  準備作業:  各自のPCに Python ( version3.2 推奨)環境をインス トールせよ  http://www.python.jp/Zope/download/pythoncore
  • 10. 2011/4/19 アルゴリズムとデータ構造 1 10 Python によるプログラム例  入力:2組の数列 A と B  A = [a1,a2,…,an] , B = [b1,b2,…,bm]  1 の位から左から順に並べる.  出力:数列 S  S = [s1,s2,…]  手続き def add(A,B): S = [0]; n = len(A); m = len(B) for i in range(0,max(n,m)): if i < n: S[i] = S[i] + A[i] if i < m: S[i] = S[i] + B[i] if S[i] >= 10: S[i] = S[i] - 10; S.append(1) else: S.append(0) return S
  • 11. 2011/4/19 アルゴリズムとデータ構造 1 11 ユークリッドの互除法  世界最古のアルゴリズムといわれてる  2つの正整数 p と q の最大公約数を求める  (1) p を q で割った余りを r とする  (2) r = 0 ならば q を答えとする  (3) r ≠0 のときは, q と r を新しい p と q として (1) へ  問題: 54 と 39 の最大公約数をユークリッド の互除法で求めてみよ
  • 12. 2011/4/19 アルゴリズムとデータ構造 1 12 Python によるプログラム例(2)  ユークリッドの互除法  入力: 2 組の 1 以上の正整数 p と q  出力: p と q の最大公約数 r  手続き def GCD(p,q): while True: r = p % q if r == 0: return q p, q = q, r
  • 13. 2011/4/19 アルゴリズムとデータ構造 1 13 アルゴリズムの正しさ  正しいアルゴリズムとは:  すべての入力に対して,「停止し」,「正しい答 え」を出力する  正しくないアルゴリズム  ある入力に対して,「停止しない」  停止するが,答えが所望のものではない ⇒ 間違う確率が制御できる場合には,有用な「正し くないアルゴリズム」もある 例:確率的な素数判定法
  • 14. 2011/4/19 アルゴリズムとデータ構造 1 14 アルゴリズムの応用例  ヒトゲノムの解読  30 億もの塩基配列の情報を特定し,データベー スに格納し,データ解析のツールを開発する.  インターネットのルーティング  ネットワークのデータを適切なあて先に届けるた めの経路を見つける.  E コマースサービスの基盤  クレジットカードの番号やパスワード情報を秘密 にしておくための暗号アルゴリズム.  などなど.
  • 15. 2011/4/19 アルゴリズムとデータ構造 1 15 データ構造とは  簡単に参照したり変更したりするために, データを格納し組織化するための方法  全ての目的に適う,万能のデータ構造は無い  さまざまなデータ構造の利点と限界を知ることは 非常に重要.
  • 16. 2011/4/19 アルゴリズムとデータ構造 1 16 困難な問題  世の中には,効率良い解法が見つかっていない問題 もある.  答えが得られるまで非常に長い時間がかかる  NP 完全問題  そのような問題群の重要なサブセット  これまで, NP 完全問題を解く効率良いアルゴリズムは見つ かっていないが,かといってそのようなアルゴリズムが存在 しないことは誰も証明していない  NP 完全問題のうち, 1 つでも問題が効率よく解けるアルゴ リズムが見つかれば,他の NP 完全問題も効率よく解ける.  いくつかの NP 完全問題は,それと良く似た形の簡単に解け る問題がある.  実世界の問題には, NP 完全な問題も数多く表れる  NP 完全問題について知ってないと無駄な時間を費やすこと に...
  • 17. 2011/4/19 アルゴリズムとデータ構造 1 17 NP 完全問題の例  中央倉庫を持つトラック配送会社  倉庫でトラックに荷物を積み,配達のためにいく つかの拠点に積荷を送って回る.  1 日の割りに,トラックは中央倉庫に戻ってくる .  コストを削減するために,なるべく少ない距離で 拠点を訪問したい.  じつは,「巡回セールスマン問題」として知 られる NP 完全問題
  • 18. 2011/4/19 アルゴリズムとデータ構造 1 18 アルゴリズムの計算量  一般に同じ問題を解くのにも,様々なアルゴ リズムが考えられる.  アルゴリズムの良し悪しの評価基準  答えを出すまでにどれくらい計算時間がかかるか  時間計算量と呼ぶ  Cf. 計算のためにどれくらいメモリを消費するかについ て,空間計算量という概念もある
  • 19. 2011/4/19 アルゴリズムとデータ構造 1 19 O (オー)記法について  データサイズに対する計算量の増え方の度合を表し たもの  定義:  関数 g(n) が O(f(n)) であるとは,定数 c0 と n0 が存在 して, n > n0 であるすべての n に対して  g(n) < c0 ・ f(n) が成り立つことである  アルゴリズムでよく見られるオーダー  O(1) -定数オーダー,データサイズによらず一定  O(log N) -対数オーダー,二分探索など.  O(N) -線形探索など  O(NlogN) -マージソート,高速フーリエ変換など  O(N2 ) -単純なソート,クイックソートの最悪ケースなど  O(CN ) -指数オーダー
  • 20. 2011/4/19 アルゴリズムとデータ構造 1 20 計算量と計算時間の関係  n=100 のときに 1 秒かかるとして計算  特に明記していない欄の単位は秒 計算量 n=10 20 50 100 200 500 1000 10000 O(1) 1 1 1 1 1 1 1 1 O(log n) 0.5 0.65 0.85 1 1.15 1.35 1.5 2 O(n) 0.1 0.2 0.5 1 2 5 10 100 O(n log n) 0.05 0.13 0.42 1 2.3 6.75 15 200 O(n2 ) 0.01 0.04 0.25 1 4 25 100 2.78 時 間 O(n3 ) 0.001 0.008 0.125 1 8 125 1000 11.6 日 O(2n ) 0.001 1.02 34.8 年 ― ― ― ― ―