Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
CTRL - 2016/03/02 DP勉強会
Search
h1dia
March 02, 2016
Programming
0
160
CTRL - 2016/03/02 DP勉強会
h1dia
March 02, 2016
Tweet
Share
More Decks by h1dia
See All by h1dia
アレ
h1dia
0
130
slide
h1dia
0
180
Other Decks in Programming
See All in Programming
要求定義・仕様記述・設計・検証の手引き - 理論から学ぶ明確で統一された成果物定義
orgachem
PRO
1
160
疑似コードによるプロンプト記述、どのくらい正確に実行される?
kokuyouwind
0
390
AIで開発はどれくらい加速したのか?AIエージェントによるコード生成を、現場の評価と研究開発の評価の両面からdeep diveしてみる
daisuketakeda
1
2.5k
Honoを使ったリモートMCPサーバでAIツールとの連携を加速させる!
tosuri13
1
180
MUSUBIXとは
nahisaho
0
140
AI によるインシデント初動調査の自動化を行う AI インシデントコマンダーを作った話
azukiazusa1
1
740
CSC307 Lecture 01
javiergs
PRO
0
690
Apache Iceberg V3 and migration to V3
tomtanaka
0
160
今こそ知るべき耐量子計算機暗号(PQC)入門 / PQC: What You Need to Know Now
mackey0225
3
380
例外処理とどう使い分ける?Result型を使ったエラー設計 #burikaigi
kajitack
16
6.1k
登壇資料を作る時に意識していること #登壇資料_findy
konifar
4
1.4k
ぼくの開発環境2026
yuzneri
0
240
Featured
See All Featured
Neural Spatial Audio Processing for Sound Field Analysis and Control
skoyamalab
0
170
SERP Conf. Vienna - Web Accessibility: Optimizing for Inclusivity and SEO
sarafernandez
1
1.3k
[RailsConf 2023 Opening Keynote] The Magic of Rails
eileencodes
31
9.9k
Conquering PDFs: document understanding beyond plain text
inesmontani
PRO
4
2.3k
16th Malabo Montpellier Forum Presentation
akademiya2063
PRO
0
51
Making Projects Easy
brettharned
120
6.6k
Stop Working from a Prison Cell
hatefulcrawdad
273
21k
BBQ
matthewcrist
89
10k
My Coaching Mixtape
mlcsv
0
48
What does AI have to do with Human Rights?
axbom
PRO
0
2k
Writing Fast Ruby
sferik
630
62k
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
46
2.7k
Transcript
みなさん
None
None
頭の体操
フィボナッチ数
フィボナッチ数 • f(n) = f(n-1) + f(n-2) • f(0) =
0 • f(1) = 1 • f(7) = ?
フィボナッチ数 • f(n) = f(n-1) + f(n-2) • f(0) =
0 • f(1) = 1 • f(7) = 13
フィボナッチ数列 • 実装してみよう • 入力 N に対して f(N) となるような出力を返すよ うなプログラム
一般項
実装 • 定義通りにやる – 再帰 • ループによる実装
テスト • ideone.com • N = 10000のとき、このプログラムは動作する?
CTRL春のDP祭り 2016/03/02 h1dia
None
None
DP?
DP(Dynamic Programing) • どうも動的計画法とかいうのが分かってないと 予選突破ができないっぽい • せめて本戦くらいには出たいよね – だって本戦行けばタダで音ゲーできるんだよ!!
None
None
計算量 • 再帰による実装はf(0) または f(1) になるまで収束しない • f(5)のとき 5
計算量 • 再帰による実装はf(0) または f(1) になるまで収束しない • f(5)のとき 5 4
3
計算量 • 再帰による実装はf(0) または f(1) になるまで収束しない • f(5)のとき 5 4
3 3 2 1 2
計算量 • 再帰による実装はf(0) または f(1) になるまで収束しない • f(5)のとき 5 4
3 3 2 1 2 2 1 0 1 1 0
計算量 • 再帰による実装はf(0) または f(1) になるまで収束しない • f(5)のとき 5 4
3 3 2 1 2 2 1 0 1 1 0 0 1
計算量 • 再帰による実装はf(0) または f(1) になるまで収束しない • f(5)のとき 5 4
3 3 2 1 2 2 1 0 1 1 0 0 1 O(2^n)
計算量 • 配列とループによる実装 • f(n-1) と f(n-2) を逐一計算する • f(5)のとき
計算量 • 配列とループによる実装 • f(n-1) と f(n-2) を逐一計算する • f(5)のとき
1
計算量 • 配列とループによる実装 • f(n-1) と f(n-2) を逐一計算する • f(5)のとき
1 1
計算量 • 配列とループによる実装 • f(n-1) と f(n-2) を逐一計算する • f(5)のとき
1 1 2
計算量 • 配列とループによる実装 • f(n-1) と f(n-2) を逐一計算する • f(5)のとき
1 1 2 3
計算量 • 配列とループによる実装 • f(n-1) と f(n-2) を逐一計算する • f(5)のとき
1 1 2 3 5 O(n)
ポイント • 計算結果を逐一メモしていくことで 計算量を減らす
リスの問題 • N (1≤N≤1000) 匹のリスが一列に並んでいる。左 から i 匹目のリスには、整数 a i
が書かれている。 この中から何匹かのリスにぶどうをのせ、ぶどう の乗ったリスにかかれた整数が左から昇順に並ん でいるようにしたい。最大何匹のリスにぶどうを 乗せられるか。
リスの問題 0 1 2 3 4 5 6 1 2
3 4 5 学生 リス • N (1≤N≤1000) 匹のリスが一列に並んでいる。
リスの問題 0 1 2 3 4 5 6 1 2
3 4 5 リス リス • リスにぶどうを乗せる • ぶどうを乗せたリスの高さが左から昇順に並んで いるようにしたい
リスの問題 0 1 2 3 4 5 6 1 2
3 4 5 リス リス • 最大何匹のリスにぶどうを乗せられる?
リスの問題 0 1 2 3 4 5 6 1 2
3 4 5 リス リス • 解
まともに解こうとする • N = 5 のとき、2 から 5 の範囲で全探索 –
5C2 + 5C3 + 5C4 + 5C5 = 10 + 10 + 5 + 1 – O(n^2) • もう少し計算量を減らしたい
よく考える 0 1 2 3 4 5 6 7 8
1 2 3 4 5 6 7 リス リス • なんか増えた
よく考える 0 1 2 3 4 5 6 7 8
1 2 3 4 5 6 7 リス リス • 3匹目に着目する
よく考える 0 1 2 3 4 5 6 7 8
1 2 3 4 5 6 7 リス リス • 3匹目にぶどうが乗っているとき、1匹目には必ずぶどう が乗る
よく考える 0 1 2 3 4 5 6 7 8
1 2 3 4 5 6 7 リス リス • 4匹目に着目する
よく考える 0 1 2 3 4 5 6 7 8
1 2 3 4 5 6 7 リス リス • 4匹目にぶどうが乗っているとき、3匹目には必ずぶどう が乗る -> 1匹目にも乗っている
漸化式 0 1 2 3 4 5 6 7 8
1 2 3 4 5 6 7 リス リス • リスの番号 n は、自分よりも高さの低い リスの番号 1 ~ n – 1までのぶどうの最大数 + 1 をとる 1 2 3 2
わかりづらいので 0 1 2 3 4 5 6 7 8
1 2 3 4 5 6 7 リス リス • n = 1 1
わかりづらいので 0 1 2 3 4 5 6 7 8
1 2 3 4 5 6 7 リス リス • n = 2 1 2
わかりづらいので 0 1 2 3 4 5 6 7 8
1 2 3 4 5 6 7 リス リス • n = 3 2 1 2
わかりづらいので 0 1 2 3 4 5 6 7 8
1 2 3 4 5 6 7 リス リス • n = 4 2 1 2 3
わかりづらいので 0 1 2 3 4 5 6 7 8
1 2 3 4 5 6 7 リス リス • n = 5 2 1 2 3 1
わかりづらいので 0 1 2 3 4 5 6 7 8
1 2 3 4 5 6 7 リス リス • n = 6 2 1 2 3 1 2
わかりづらいので 0 1 2 3 4 5 6 7 8
1 2 3 4 5 6 7 リス リス • n = 7 2 1 2 3 1 2 4
もういちど 0 1 2 3 4 5 6 7 8
1 2 3 4 5 6 7 リス リス • リスの番号 n は、自分よりも高さの低い リスの番号 1 ~ n – 1までのぶどうの最大数 + 1 をとる 1 2 3 2
実装してみよう • N n_1, n_2, n_3 … n_N の形で値が与えられます。 リスの数
N(3 ≦ N ≦ 1000) リスの高さ(整数) 乗せられるぶどうの最大数を出力してください。 例 7 3 6 4 5 1 2 7 出力 4
AOJ
フォーラムに2問 • Kannondou • The First Grade • 解いてみよう
観音堂
Kannondou • 階段は 1 ~ 30段 • 飛び方は3種類 – 1段進む
– 2段進む – 3段進む • 30段目に行くために、3種類の飛び方を組み合わせた 飛び方の数は…?
Kannondou 0段目 1段目 2段目 3段目 4段目
Kannondou 0段目 1段目 2段目 3段目 4段目 1
Kannondou 0段目 1段目 2段目 3段目 4段目
Kannondou 0段目 1段目 2段目 3段目 4段目 2
Kannondou 0段目 1段目 2段目 3段目 4段目
Kannondou 0段目 1段目 2段目 3段目 4段目
Kannondou 0段目 1段目 2段目 3段目 4段目
Kannondou 0段目 1段目 2段目 3段目 4段目 4
Kannondou 0段目 1段目 2段目 3段目 4段目
Kannondou 0段目 1段目 2段目 3段目 4段目
Kannondou 0段目 1段目 2段目 3段目 4段目
Kannondou 0段目 1段目 2段目 3段目 4段目
Kannondou 0段目 1段目 2段目 3段目 4段目
Kannondou 0段目 1段目 2段目 3段目 4段目
Kannondou 0段目 1段目 2段目 3段目 4段目 7
Kannondou • N 段目に到達できるのは、N-1 N-2 N-3段目のみ • N-1 N-2 N-3段目までの数の和
• N = N-1 + N-2 + N-3 – トリボナッチ数列
1ねんせい
A First Grader • 計算の組み合わせの数?
A First Grader • 計算の組み合わせの数? 4 3 7
A First Grader • 計算の組み合わせの数? 4 3 7 + -
A First Grader • 計算の組み合わせの数? – すべての計算式の数は2^n個 4 3 7
+ - + - + -
A First Grader • 計算結果を保存していく! – Ex) 1 1 1
1 1 1 – DP[N][21] のような2次元配列を用意する
A First Grader • 計算結果を保存していく! – Ex) 1 1 1
1 1 1 » (1 + 0)と(1 - 0)として考える 0 1 2 3 4 5 6 1
A First Grader • 計算結果を保存していく! – Ex) 1 1 1
1 1 1 » (1 + 1) , (1 – 1) 0 1 2 3 4 5 6 1 1 1
A First Grader • 計算結果を保存していく! – Ex) 1 1 1
1 1 1 • (2 + 1), (2 – 1), (0 + 1), (0 – 1) 0 1 2 3 4 5 6 1 1 1 2 1
A First Grader • 計算結果を保存していく! – Ex) 1 1 1
1 1 1 0 1 2 3 4 5 6 1 1 1 2 2 3 1 1
A First Grader • 計算結果を保存していく! – Ex) 1 1 1
1 1 1 0 1 2 3 4 5 6 1 1 1 2 2 3 5 1 1 4 1
A First Grader • 計算結果を保存していく! – Ex) 1 1 1
1 1 1 (配列のインデックスが解答になる) 0 1 2 3 4 5 6 1 1 1 2 2 3 5 1 1 4 1