Submit Search
programming camp 2008, introduction of programming, algorithm
0 likes
•
303 views
Hiro Yoshioka
プログラミング入門、アルゴリズム
Technology
Read more
1 of 27
Download now
Download to read offline
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
More Related Content
PDF
すごいHaskell読書会 第六章 発表資料
Hiromasa Ohashi
PDF
Rubyによるデータ解析
Shugo Maeda
PDF
Pythonデータ分析 第4回勉強会資料 12章
Makoto Kawano
PDF
数式をnumpyに落としこむコツ
Shuyo Nakatani
PDF
Pythonデータ分析 第3回勉強会資料 8章
Makoto Kawano
PPTX
HashMapとは?
Trash Briefing ,Ltd
PDF
NumPy闇入門
Ryosuke Okuta
PDF
Tokyo.R 41 サポートベクターマシンで眼鏡っ娘分類システム構築
Tatsuya Tojima
すごいHaskell読書会 第六章 発表資料
Hiromasa Ohashi
Rubyによるデータ解析
Shugo Maeda
Pythonデータ分析 第4回勉強会資料 12章
Makoto Kawano
数式をnumpyに落としこむコツ
Shuyo Nakatani
Pythonデータ分析 第3回勉強会資料 8章
Makoto Kawano
HashMapとは?
Trash Briefing ,Ltd
NumPy闇入門
Ryosuke Okuta
Tokyo.R 41 サポートベクターマシンで眼鏡っ娘分類システム構築
Tatsuya Tojima
What's hot
(20)
PDF
Hash mapとは
Kuroiwa Takumi
PDF
Rustで始める競技プログラミング
Naoya Okanami
PDF
Intoroduction of Pandas with Python
Atsushi Hayakawa
PDF
200319 eash python_shareslide_functions
Hiroki Katayama
PDF
MP Joinを使った類似データ抽出
JAVA DM
PDF
R による文書分類入門
Takeshi Arabiki
PPT
Tokyo r#10 Rによるデータサイエンス 第五章:クラスター分析
hnisiji
PDF
パターン認識 08 09 k-近傍法 lvq
sleipnir002
PDF
パターン認識02 k平均法ver2.0
sleipnir002
PPTX
Analyze by StatsModels or Numpy
Toshiki NOGUCHI
PDF
プログラミングコンテストでの動的計画法
Takuya Akiba
PDF
プログラミングコンテストでのデータ構造 2 ~動的木編~
Takuya Akiba
PDF
SVM実践ガイド (A Practical Guide to Support Vector Classification)
sleepy_yoshi
PPTX
Vanishing Component Analysis
Koji Matsuda
PDF
動的計画法
京大 マイコンクラブ
PPTX
LINQ概要
ShinichiAoyagi
PPTX
LINQ の概要とかもろもろ
ShinichiAoyagi
PDF
BASEでデータ処理の幅を広げよう
koutarou watanabe
PDF
Infer.NETを使ってLDAを実装してみた
正志 坪坂
PDF
Divisor
oupc
Hash mapとは
Kuroiwa Takumi
Rustで始める競技プログラミング
Naoya Okanami
Intoroduction of Pandas with Python
Atsushi Hayakawa
200319 eash python_shareslide_functions
Hiroki Katayama
MP Joinを使った類似データ抽出
JAVA DM
R による文書分類入門
Takeshi Arabiki
Tokyo r#10 Rによるデータサイエンス 第五章:クラスター分析
hnisiji
パターン認識 08 09 k-近傍法 lvq
sleipnir002
パターン認識02 k平均法ver2.0
sleipnir002
Analyze by StatsModels or Numpy
Toshiki NOGUCHI
プログラミングコンテストでの動的計画法
Takuya Akiba
プログラミングコンテストでのデータ構造 2 ~動的木編~
Takuya Akiba
SVM実践ガイド (A Practical Guide to Support Vector Classification)
sleepy_yoshi
Vanishing Component Analysis
Koji Matsuda
動的計画法
京大 マイコンクラブ
LINQ概要
ShinichiAoyagi
LINQ の概要とかもろもろ
ShinichiAoyagi
BASEでデータ処理の幅を広げよう
koutarou watanabe
Infer.NETを使ってLDAを実装してみた
正志 坪坂
Divisor
oupc
Ad
Viewers also liked
(20)
PPT
[12-D-7]デブサミ2009コミュニティLT勉強会勉強会
Hiro Yoshioka
PDF
Internet and Opensource at Security and Programming camp 2011
Hiro Yoshioka
PDF
Code Reading at Security and Programming camp 2011
Hiro Yoshioka
PDF
勉強会カンファレンス2011、企業と勉強会
Hiro Yoshioka
PDF
History of IT industry, Internet and Hacker Culture
Hiro Yoshioka
PDF
Introduction to Git and GitHub #git_nyan
Hiro Yoshioka
PDF
1000 speakers conference in English, 2nd, 1/20/2013
Hiro Yoshioka
PDF
Rakuten Corporate profile
Hiro Yoshioka
PDF
CUI -- How to Analyze History command
Hiro Yoshioka
ODP
Sourcecode Reading Workshop2010
Hiro Yoshioka
PDF
Hacker centric culture @devlove 110423
Hiro Yoshioka
PDF
Jslinux
Hiro Yoshioka
PDF
Security and Programming Camp 2011, Programming Course 2011/12/17
Hiro Yoshioka
PDF
ハッカー中心の企業文化を日本で根付かせるには。TechLION vol.5 12/14/2011
Hiro Yoshioka
ODP
Programming camp 共通科目オープンソース
Hiro Yoshioka
PDF
Progcamp studygroup 100814
Hiro Yoshioka
PDF
Progcamp internet 100801
Hiro Yoshioka
PDF
HTC Welding Supervisor
BhUsHaN Lokhande
PDF
consoliddated edison 2006 EIX Fin Stat-a
finance20
POT
Plantilla Power XL
Fernando Zeledón
[12-D-7]デブサミ2009コミュニティLT勉強会勉強会
Hiro Yoshioka
Internet and Opensource at Security and Programming camp 2011
Hiro Yoshioka
Code Reading at Security and Programming camp 2011
Hiro Yoshioka
勉強会カンファレンス2011、企業と勉強会
Hiro Yoshioka
History of IT industry, Internet and Hacker Culture
Hiro Yoshioka
Introduction to Git and GitHub #git_nyan
Hiro Yoshioka
1000 speakers conference in English, 2nd, 1/20/2013
Hiro Yoshioka
Rakuten Corporate profile
Hiro Yoshioka
CUI -- How to Analyze History command
Hiro Yoshioka
Sourcecode Reading Workshop2010
Hiro Yoshioka
Hacker centric culture @devlove 110423
Hiro Yoshioka
Jslinux
Hiro Yoshioka
Security and Programming Camp 2011, Programming Course 2011/12/17
Hiro Yoshioka
ハッカー中心の企業文化を日本で根付かせるには。TechLION vol.5 12/14/2011
Hiro Yoshioka
Programming camp 共通科目オープンソース
Hiro Yoshioka
Progcamp studygroup 100814
Hiro Yoshioka
Progcamp internet 100801
Hiro Yoshioka
HTC Welding Supervisor
BhUsHaN Lokhande
consoliddated edison 2006 EIX Fin Stat-a
finance20
Plantilla Power XL
Fernando Zeledón
Ad
Similar to programming camp 2008, introduction of programming, algorithm
(20)
PPT
アルゴリズムとデータ構造1
Kenta Hattori
PPT
アルゴリズムとデータ構造2
Kenta Hattori
PPT
アルゴリズムとデータ構造10
Kenta Hattori
PPT
アルゴリズムとデータ構造6
Kenta Hattori
PPT
Pythonintro
Mikio Kubo
PPT
Algorithm 速いアルゴリズムを書くための基礎
Kenji Otsuka
PPT
アルゴリズムとデータ構造15
Kenta Hattori
PDF
Processing
Akifumi Nambu
PDF
アルゴリズムを楽しく!@PiyogrammerConference
Kensuke Otsuki
PPTX
プログラミング模擬授業20180724
義広 河野
PDF
プログラミング入門
Kenji Azami
PPTX
純粋関数型アルゴリズム入門
Kimikazu Kato
PDF
#6:実数と繰り返し
長岡技術科学大学 自然言語処理研究室
PDF
アルゴリズムのお勉強 アルゴリズムとデータ構造 [素数・文字列探索・簡単なソート]
hixi365
PDF
データ構造と全探索
京大 マイコンクラブ
PDF
関数型プログラミング入門 with OCaml
Haruka Oikawa
PPT
アルゴリズムとデータ構造3
Kenta Hattori
PPT
アルゴリズムとデータ構造11
Kenta Hattori
PDF
[CE94] 高等学校での「プログラミング」教育の導入– PEN を用いて (発表資料)
Ryota Nakamura
PDF
アルゴリズム+データ構造勉強会(1)
noldor
アルゴリズムとデータ構造1
Kenta Hattori
アルゴリズムとデータ構造2
Kenta Hattori
アルゴリズムとデータ構造10
Kenta Hattori
アルゴリズムとデータ構造6
Kenta Hattori
Pythonintro
Mikio Kubo
Algorithm 速いアルゴリズムを書くための基礎
Kenji Otsuka
アルゴリズムとデータ構造15
Kenta Hattori
Processing
Akifumi Nambu
アルゴリズムを楽しく!@PiyogrammerConference
Kensuke Otsuki
プログラミング模擬授業20180724
義広 河野
プログラミング入門
Kenji Azami
純粋関数型アルゴリズム入門
Kimikazu Kato
#6:実数と繰り返し
長岡技術科学大学 自然言語処理研究室
アルゴリズムのお勉強 アルゴリズムとデータ構造 [素数・文字列探索・簡単なソート]
hixi365
データ構造と全探索
京大 マイコンクラブ
関数型プログラミング入門 with OCaml
Haruka Oikawa
アルゴリズムとデータ構造3
Kenta Hattori
アルゴリズムとデータ構造11
Kenta Hattori
[CE94] 高等学校での「プログラミング」教育の導入– PEN を用いて (発表資料)
Ryota Nakamura
アルゴリズム+データ構造勉強会(1)
noldor
More from Hiro Yoshioka
(20)
PDF
Infra study 2nd #1 人生100年時代の学び方,定年後の大学院生活
Hiro Yoshioka
PDF
Infra study 2nd #1「インフラ技術者・研究者としてのキャリア」
Hiro Yoshioka
PDF
不揮発性メモリ(NVM)とはなにか
Hiro Yoshioka
PDF
続・人生100年時代の学び方
Hiro Yoshioka
PDF
人生100年時代における学び方 定年後の学生生活
Hiro Yoshioka
PDF
Thesis introduction "RECIPE : Converting Concurrent DRAM Indexes to Persisten...
Hiro Yoshioka
PDF
人生100年時代の学び方、脳には可塑性がある
Hiro Yoshioka
PDF
エンジニア人生と定年退職、人生100年時代のエンジニアの生き方、「私のような仕事につく方法」、2019/06/23 DevLOVE X Day 1 D-7
Hiro Yoshioka
PDF
OSSとの付き合い方。OSSから学んだこと。OSS貢献者賞受賞講演
Hiro Yoshioka
PDF
エンジニア人生と定年退職、人生100年時代のエンジニアの生き方、デブサミ 2019 【15-A-8】
Hiro Yoshioka
PDF
未経験プログラマがコボルコンパイラを作った話 #compiler_study
Hiro Yoshioka
PDF
Godel, Escher, Bach: an Eternal Golden Braid, reading club, Chapter 12
Hiro Yoshioka
PDF
海外から見た東京 〜人生100年時代の働き方〜 #efsta56
Hiro Yoshioka
PDF
理科系の作文技術
Hiro Yoshioka
PDF
Agile Software Development advanced course (PBL) at AIIT, 2015
Hiro Yoshioka
PDF
質問される力 #TechGirls
Hiro Yoshioka
PDF
Oracle vs Google API 著作権裁判を考える
Hiro Yoshioka
PDF
Using oss at an internet company and hacker culture
Hiro Yoshioka
PDF
Be Hacker
Hiro Yoshioka
PDF
Project Based Learning using by PaaS
Hiro Yoshioka
Infra study 2nd #1 人生100年時代の学び方,定年後の大学院生活
Hiro Yoshioka
Infra study 2nd #1「インフラ技術者・研究者としてのキャリア」
Hiro Yoshioka
不揮発性メモリ(NVM)とはなにか
Hiro Yoshioka
続・人生100年時代の学び方
Hiro Yoshioka
人生100年時代における学び方 定年後の学生生活
Hiro Yoshioka
Thesis introduction "RECIPE : Converting Concurrent DRAM Indexes to Persisten...
Hiro Yoshioka
人生100年時代の学び方、脳には可塑性がある
Hiro Yoshioka
エンジニア人生と定年退職、人生100年時代のエンジニアの生き方、「私のような仕事につく方法」、2019/06/23 DevLOVE X Day 1 D-7
Hiro Yoshioka
OSSとの付き合い方。OSSから学んだこと。OSS貢献者賞受賞講演
Hiro Yoshioka
エンジニア人生と定年退職、人生100年時代のエンジニアの生き方、デブサミ 2019 【15-A-8】
Hiro Yoshioka
未経験プログラマがコボルコンパイラを作った話 #compiler_study
Hiro Yoshioka
Godel, Escher, Bach: an Eternal Golden Braid, reading club, Chapter 12
Hiro Yoshioka
海外から見た東京 〜人生100年時代の働き方〜 #efsta56
Hiro Yoshioka
理科系の作文技術
Hiro Yoshioka
Agile Software Development advanced course (PBL) at AIIT, 2015
Hiro Yoshioka
質問される力 #TechGirls
Hiro Yoshioka
Oracle vs Google API 著作権裁判を考える
Hiro Yoshioka
Using oss at an internet company and hacker culture
Hiro Yoshioka
Be Hacker
Hiro Yoshioka
Project Based Learning using by PaaS
Hiro Yoshioka
Recently uploaded
(6)
PDF
20250730_QiitaBash_LT登壇資料_PDC_Kurashina.pdf
pdckurashina
PDF
20250729_Devin-for-Enterprise
Masaki Yamakawa
PDF
【学会聴講報告】CVPR2025からみるVision最先端トレンド / CVPR2025 report
Sony - Neural Network Libraries
PDF
TaketoFujikawa_ComicComputing12th_inKumamoto
Matsushita Laboratory
PPTX
baserCMS『カスタムコンテンツ』徹底活用術〜あなただけの管理画面を自由自在に〜
Ryuji Egashira
PDF
MahiroYoshida_セリフに着目したキャラクタロール推定に関する基礎検討_sigcc12th2025
Matsushita Laboratory
20250730_QiitaBash_LT登壇資料_PDC_Kurashina.pdf
pdckurashina
20250729_Devin-for-Enterprise
Masaki Yamakawa
【学会聴講報告】CVPR2025からみるVision最先端トレンド / CVPR2025 report
Sony - Neural Network Libraries
TaketoFujikawa_ComicComputing12th_inKumamoto
Matsushita Laboratory
baserCMS『カスタムコンテンツ』徹底活用術〜あなただけの管理画面を自由自在に〜
Ryuji Egashira
MahiroYoshida_セリフに着目したキャラクタロール推定に関する基礎検討_sigcc12th2025
Matsushita Laboratory
programming camp 2008, introduction of programming, algorithm
1.
セキュリティ&プログラミングキャンプ
2008 プログラミング入門2 アルゴリズムとデータ構造 ミラクル・リナックス株式会社 よしおかひろたか Copyright 2008 Hiro Yoshioka All rights reserved 1
2.
Contents • はじめに • アルゴリズムとは
3.
はじめに •
アルゴリズムとは – 問題を解くための手 順を定式化して表現 したもの – コンピュータにアルゴ リズムを指示するた めの命令をプログラ ムという
4.
アルゴリズムの例 • ユークリッドの互除法
二つの自然数の最大公約数を求める – 入力をm,n (m ≧ n) – n =0 なら、 m を出力して終了 – n が m を割り切るなら、 n を出力して終了 – m を n で割った余りを新たに m とし、更に m と n を取り替えて、一つ前に戻る。
5.
プログラムの例 #include<stdio.h> int main(void) { int m, n, tmp; scanf("%d %d", &m, &n); if(m < 0 || n < 0){ puts("Error"); return 1; } while(n){ tmp = m % n; m = n; n = tmp; } printf("%dn", m); return 0; }
6.
なぜアルゴリズムを学ぶのか • 優れた先達の知恵がある –
優れたアルゴリズムはシンプルで美しい • 優れたアルゴリズムとは何かを学ぶため – 優れたアルゴリズムもそうでないアルゴリズムもあ る?? – アルゴリズムの解析
7.
アルゴリズムとデータ構造 • 優れたアルゴリズムやデータ構造を利用すれ
ば、問題をあっという間に解けてしまう場合が ある。 – どんなことが解明されているかを調べてみなけれ ばならない。 – さもないと、優れた手法が存在するのに、自己流 の下手なやり方を考案するのに時間を無駄にする 。 – 自己流のアルゴリズムは • 開発に時間がかかって • 実行時間も遅くて • バグも多く、拡張性も低い
8.
アルゴリズムとデータ構造 • アルゴリズムとデータ構造をまったく新たに考
案しなければならないということはめったにな い。 • 基本的なアルゴリズムとデータ構造の組み合 わせで、多くの問題は解ける。
9.
基本的なアルゴリズムとデータ構造 •
検索 • ソーティング(並べ替え) • O記法 • リスト • ツリー • ハッシュテーブル 参考文献:プログラミング作法、Kernighan & Pike
10.
検索 • 配列:静的な表形式のデータを格納する • 逐次検索:個々の要素を順番に調べていって
希望の要素かどうか調べる /* lookup: 配列中の単語を逐次検索する */ int lookup(char *word, char *array[]) { int i; for (i = 0; array[i] != NULL; i++) if (strcmp(word, array[i]) == 0) return i; return 1; }
11.
検索 • 逐次検索:特徴 –
データ量が少ないときには十分高速 – 実装例:strchr, strstr – 作業量(実行時間):データ量に比例 • データ量が倍になれば検索時間も倍
12.
検索 • 二分検索 –
表のデータがソート(小さい順に並んでいる)され ていると仮定する。 – まず真ん中の要素を調べて、その値が自分が探し ている値より大きかったら前半を調べ、小さければ 後半を調べる。 – 辞書を引くようなもの。justはquiteより前にあって、 actuallyより後ろにある。 actually, ... , just, ... , quite, ... , really, ... , zeta
13.
二分検索 int binary_lookup(char *name, char *array[], int ntab) { int low, high, mid, cmp; low = 0; high = ntab 1; while (low <= high) { mid = (low + high) / 2; cmp = strcmp(name, array[mid]); if (cmp < 0)
high = mid 1; else if (cmp > 0) low = mid + 1; else return mid; } return 1; }
14.
検索 • 二分検索 –
作業量:データ量のlog2(n)に比例 • 作業量の比較 – 1000個のデータの比較 • 逐次検索:最大1000回 • 二分検索:最大約10回 – 100万個のデータの比較 • 逐次検索:最大100万回 • 二分検索:最大約20回
15.
ソーティング • ソーティング:レコードの集まりをキーの値の大
小関係によって並べ替えること。 • アルゴリズムの例 – 配列の要素を1個選択する(ピボット) – その他の要素を2つのグループに分割する • ピボット値より小さい「チビ」 • ピボット値より大きいか等しい「デカ」 – 個々のグループを上記のアルゴリズムでソートす る
16.
ソーティング void quicksort(int v[], int n) { int i, last; if (n <= 1) return; swap(v, 0, rand() % n); last = 0; for (i = 1; i < n; i++) if (v[i] < v[0]) swap(v, ++last, i); swap(v, 0, last); quicksort(v, last); quicksort(v+last+1, nlast1); } void swap(int v[], int i, int j) { int temp; temp = v[i]; v[i] = v[j]; v[j] = temp; }
17.
O記法 • O記法:計算量(実行時間)を入力のサイズnの
関数で表現する。 • 例:入力に含まれる要素数nによって、特定の アルゴリズムによって処理される作業量を表 す。例えば、逐次検索の作業量はnに比例す るし、二分検索の作業量はlog2(n)に比例する。 この時、逐次検索はO(n)のアルゴリズムであ ると言う。二分検索はO(log2(n))のアルゴリズム である。
18.
O記法 •
記法 名称 アルゴリズム例 • O(1) 定数 配列インデックス • O(log(n)) 対数 二分検索 • O(n) 1次 文字列比較 • O(nlog(n)) nlog(n) クイックソート • O(n²) 2次 単純なソート • O(n³) 3次 行列乗算 • n O(2 ) 指数 集合分割問題
19.
リスト • 単一リンクリスト:データと次の項目へのポイン
タを含んでいる項目の集合 • サイズ: – 配列:固定長 – リスト:可変長 ポインタ ヘッド NULL データ データ データ データ データ
20.
配列とリスト • 順序の変更
– 配列:ブロック移動 – リスト:ポインタのつけかえ • 項目の追加(サイズの変更) – 配列:通常は静的なサイズなのでできない – リスト:項目の追加、削除は容易 ポインタ ヘッド NULL データ データ データ データ データ
21.
リスト typedef struct Name Name; struct Name { Name *next;
next: NULL char *name; name: データ }; Name *newitem(char *name) { Name *newp; newp = (Name *) malloc(sizeof(Name)); if (newp == NULL) exit(2); newp>next = NULL; newp>name = name; return newp; }
22.
リスト:先頭に追加 Name *addfront(Name *listp, Name *newp) { newp>next = listp; return newp; } /* 使用例 */ nvlist = addfront(nvlist, newitem("smiley")); ①
nvlist NULL ② next: NULL nvlist NULL name:”smiley” ③ nvlist next: NULL name:”smiley”
23.
リストの検索 Name *lookup(Name *listp, char *name) { for ( ; listp != NULL; listp = listp>next) if (strcmp(name, listp>name) == 0) return listp; return NULL; }
24.
ツリー • 二分木
25.
ハッシュテーブル • 要素数Nの配列を用意し、キーの値を元に、0
からN-1までの値を取る関数(ハッシュ関数)に よってレコード(キーと値のペア)を格納する。 出典:Wikipedia:ハッシュテーブル
26.
まとめ • 様々なアルゴリズムがある。 • 使えそうなアルゴリズムとデータ構造を選択し
よう。 • 配列、リスト、ツリー、ハッシュテーブルが基本 だ。
27.
参考文献 • プログラミング作法、Braian W.
Kernighan, Rob Pike, ISBN 4-7561-3649-4
Download