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
izumin5210のプロポーザルのネタ探し #tskaigi_msup
izumin5210
1
140
KIKI_MBSD Cybersecurity Challenges 2025
ikema
0
1.3k
Claude Codeと2つの巻き戻し戦略 / Two Rewind Strategies with Claude Code
fruitriin
0
140
【卒業研究】会話ログ分析によるユーザーごとの関心に応じた話題提案手法
momok47
0
200
15年続くIoTサービスのSREエンジニアが挑む分散トレーシング導入
melonps
2
220
なるべく楽してバックエンドに型をつけたい!(楽とは言ってない)
hibiki_cube
0
140
IFSによる形状設計/デモシーンの魅力 @ 慶應大学SFC
gam0022
1
310
Best-Practices-for-Cortex-Analyst-and-AI-Agent
ryotaroikeda
1
110
AIエージェント、”どう作るか”で差は出るか? / AI Agents: Does the "How" Make a Difference?
rkaga
4
2k
CSC307 Lecture 05
javiergs
PRO
0
500
登壇資料を作る時に意識していること #登壇資料_findy
konifar
4
1.5k
AIフル活用時代だからこそ学んでおきたい働き方の心得
shinoyu
0
140
Featured
See All Featured
Measuring Dark Social's Impact On Conversion and Attribution
stephenakadiri
1
130
A Guide to Academic Writing Using Generative AI - A Workshop
ks91
PRO
0
210
We Have a Design System, Now What?
morganepeng
54
8k
Mobile First: as difficult as doing things right
swwweet
225
10k
Unlocking the hidden potential of vector embeddings in international SEO
frankvandijk
0
170
Unsuck your backbone
ammeep
671
58k
Kristin Tynski - Automating Marketing Tasks With AI
techseoconnect
PRO
0
150
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
47
7.9k
Embracing the Ebb and Flow
colly
88
5k
The Web Performance Landscape in 2024 [PerfNow 2024]
tammyeverts
12
1k
jQuery: Nuts, Bolts and Bling
dougneiner
65
8.4k
Site-Speed That Sticks
csswizardry
13
1.1k
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