Slide 1

Slide 1 text

30 分でわかる! アルゴリズムの基本 Forkwell Library #1 基調講演 米田 優峻(E869120)

Slide 2

Slide 2 text

1 162 自己紹介 2 米田 優峻(よねだ まさたか) • 2002年生まれ • 2021年東京大学入学 主な実績 • AtCoder には E869120 として参加(レッドコーダー) • 国際情報オリンピック‘18,‘19,‘20 金メダル • 著書「アルゴリズム×数学」6 刷 2 万部突破

Slide 3

Slide 3 text

1 162 目次 3 アルゴリズムとは アルゴリズムの例 A:迷路の探索 アルゴリズムの例 B:プログラムのデバッグ アルゴリズムの例 C:映画鑑賞の最適化 講演のまとめ 第 1 章 第 2 章 第 3 章 第 4 章 第 5 章 ・・・・・・・・・・・・・・ ・・・・・・・ ・・ ・・・・ ・・・・・・・・・・・・・・・・ 5 20 80 127 155

Slide 4

Slide 4 text

1 162 • 本スライドは入門的なものであるため、すべてのアルゴリズムを網羅して いないことに注意してください。 • スライドは全部で 160 枚ありますが、アニメーションと図が多いので、枚 数相応よりは速く読めると思います。 諸注意 4 なお、本スライドは、2022/4/14 に開催されたイベント『Forkwell Library #1 - 「アルゴリズム×数学」が 基礎からしっかり身につく本』の基調講演を加筆修正したものです。 実際の講演(35分)を見たい方は、以下のリンクからご覧ください。 → https://www.youtube.com/watch?v=2OrsR37_GdM

Slide 5

Slide 5 text

5 第 1 章 アルゴリズムとは

Slide 6

Slide 6 text

1 162 問題を解く手順のことを アルゴリズムとは 6 アルゴリズム といいます

Slide 7

Slide 7 text

1 162 問題を解く手順のことを アルゴリズムとは 7 アルゴリズム といいます 1 から 100 までの整数を すべて足す問題を考えよう 具体例

Slide 8

Slide 8 text

1 162 アルゴリズムとは 8 1 + 2 = 3 … 1 + 2 の値 単純な方法として、1 つずつ足していくと答えがわかる

Slide 9

Slide 9 text

1 162 アルゴリズムとは 9 1 + 2 = 3 3 + 3 = 6 … 1 + 2 の値 … 1 + 2 + 3 の値 単純な方法として、1 つずつ足していくと答えがわかる

Slide 10

Slide 10 text

1 162 アルゴリズムとは 10 1 + 2 = 3 3 + 3 = 6 6 + 4 = 10 … 1 + 2 の値 … 1 + 2 + 3 の値 … 1 + 2 + 3 + 4 の値 単純な方法として、1 つずつ足していくと答えがわかる

Slide 11

Slide 11 text

1 162 アルゴリズムとは 11 1 + 2 = 3 3 + 3 = 6 6 + 4 = 10 10 + 5 = 15 … 1 + 2 の値 … 1 + 2 + 3 の値 … 1 + 2 + 3 + 4 の値 … 1 + 2 + 3 + 4 + 5 の値 単純な方法として、1 つずつ足していくと答えがわかる

Slide 12

Slide 12 text

1 162 アルゴリズムとは 12 1 + 2 = 3 3 + 3 = 6 6 + 4 = 10 10 + 5 = 15 15 + 6 = 21 21 + 7 = 28 28 + 8 = 36 36 + 9 = 45 45 + 10 = 55 55 + 11 = 66 66 + 12 = 78 78 + 13 = 91 91 + 14 = 105 105 + 15 = 120 120 + 16 = 136 136 + 17 = 153 153 + 18 = 171 171 + 19 = 190 190 + 20 = 210 210 + 21 = 231 231 + 22 = 253 253 + 23 = 276 276 + 24 = 300 300 + 25 = 325 325 + 26 = 351 351 + 27 = 378 378 + 28 = 406 406 + 29 = 435 435 + 30 = 465 465 + 31 = 496 496 + 32 = 528 528 + 33 = 561 561 + 34 = 595 595 + 35 = 630 630 + 36 = 666 666 + 37 = 703 703 + 38 = 741 741 + 39 = 780 780 + 40 = 820 820 + 41 = 861 231 + 22 = 253 253 + 23 = 276 276 + 24 = 300 300 + 25 = 325 325 + 26 = 351 351 + 27 = 378 378 + 28 = 406 406 + 29 = 435 435 + 30 = 465 465 + 31 = 496 496 + 32 = 528 528 + 33 = 561 561 + 34 = 595 595 + 35 = 630 630 + 36 = 666 666 + 37 = 703 703 + 38 = 741 741 + 39 = 780 780 + 40 = 820 820 + 41 = 861 1891 + 62 = 1953 1953 + 63 = 2016 2016 + 64 = 2080 2080 + 65 = 2145 2145 + 66 = 2211 2211 + 67 = 2278 2278 + 68 = 2346 2346 + 69 = 2415 2415 + 70 = 2485 2485 + 71 = 2556 2556 + 72 = 2628 2628 + 73 = 2701 2701 + 74 = 2775 2775 + 75 = 2850 2850 + 76 = 2926 2926 + 77 = 3003 3003 + 78 = 3081 3081 + 79 = 3160 3160 + 80 = 3240 3240 + 81 = 3321 3321 + 82 = 3403 3403 + 83 = 3486 3486 + 84 = 3570 3570 + 85 = 3655 3655 + 86 = 3741 3741 + 87 = 3828 3828 + 88 = 3916 3916 + 89 = 4005 4005 + 90 = 4095 4095 + 91 = 4186 4186 + 92 = 4278 4278 + 93 = 4371 4371 + 94 = 4465 4465 + 95 = 4560 4560 + 96 = 4656 4656 + 97 = 4753 4753 + 98 = 4851 4851 + 99 = 4950 4950 + 100 = 5050

Slide 13

Slide 13 text

1 162 アルゴリズムとは 13 1 + 2 = 3 3 + 3 = 6 6 + 4 = 10 10 + 5 = 15 15 + 6 = 21 21 + 7 = 28 28 + 8 = 36 36 + 9 = 45 45 + 10 = 55 55 + 11 = 66 66 + 12 = 78 78 + 13 = 91 91 + 14 = 105 105 + 15 = 120 120 + 16 = 136 136 + 17 = 153 153 + 18 = 171 171 + 19 = 190 190 + 20 = 210 210 + 21 = 231 231 + 22 = 253 253 + 23 = 276 276 + 24 = 300 300 + 25 = 325 325 + 26 = 351 351 + 27 = 378 378 + 28 = 406 406 + 29 = 435 435 + 30 = 465 465 + 31 = 496 496 + 32 = 528 528 + 33 = 561 561 + 34 = 595 595 + 35 = 630 630 + 36 = 666 666 + 37 = 703 703 + 38 = 741 741 + 39 = 780 780 + 40 = 820 820 + 41 = 861 231 + 22 = 253 253 + 23 = 276 276 + 24 = 300 300 + 25 = 325 325 + 26 = 351 351 + 27 = 378 378 + 28 = 406 406 + 29 = 435 435 + 30 = 465 465 + 31 = 496 496 + 32 = 528 528 + 33 = 561 561 + 34 = 595 595 + 35 = 630 630 + 36 = 666 666 + 37 = 703 703 + 38 = 741 741 + 39 = 780 780 + 40 = 820 820 + 41 = 861 1891 + 62 = 1953 1953 + 63 = 2016 2016 + 64 = 2080 2080 + 65 = 2145 2145 + 66 = 2211 2211 + 67 = 2278 2278 + 68 = 2346 2346 + 69 = 2415 2415 + 70 = 2485 2485 + 71 = 2556 2556 + 72 = 2628 2628 + 73 = 2701 2701 + 74 = 2775 2775 + 75 = 2850 2850 + 76 = 2926 2926 + 77 = 3003 3003 + 78 = 3081 3081 + 79 = 3160 3160 + 80 = 3240 3240 + 81 = 3321 3321 + 82 = 3403 3403 + 83 = 3486 3486 + 84 = 3570 3570 + 85 = 3655 3655 + 86 = 3741 3741 + 87 = 3828 3828 + 88 = 3916 3916 + 89 = 4005 4005 + 90 = 4095 4095 + 91 = 4186 4186 + 92 = 4278 4278 + 93 = 4371 4371 + 94 = 4465 4465 + 95 = 4560 4560 + 96 = 4656 4656 + 97 = 4753 4753 + 98 = 4851 4851 + 99 = 4950 4950 + 100 = 5050 全部で 99 回の計算が必要

Slide 14

Slide 14 text

1 162 アルゴリズムとは 14 そこで、合計が 101 となるペアを作ると… 1 100 2 99 3 98 50 51 … ← 合計 101 ← 合計 101 ← 合計 101 ← 合計 101

Slide 15

Slide 15 text

1 162 アルゴリズムとは 15 そこで、合計が 101 となるペアを作ると… 1 100 2 99 3 98 50 51 … ← 合計 101 ← 合計 101 ← 合計 101 ← 合計 101 全部で 50 個のペア 101 × 50 = 5050 すべて足すと

Slide 16

Slide 16 text

1 162 アルゴリズムとは 16 そこで、合計が 101 となるペアを作ると… 1 100 2 99 3 98 50 51 … ← 合計 101 ← 合計 101 ← 合計 101 ← 合計 101 全部で 50 個のペア 101 × 50 = 5050 すべて足すと たった 1 回の計算で良い ※ どこから 101 や 50 が出てきたかの計算を含めても数回であり、99 回よりは格段に高速です。

Slide 17

Slide 17 text

1 162 • 計算の手順のことをアルゴリズムという 第 1 章のまとめ 17

Slide 18

Slide 18 text

1 162 • 計算の手順のことをアルゴリズムという • アルゴリズムを変えてみると… 第 1 章のまとめ 18 2 週間 0.01 秒 かかる問題 になることも ※ 本スライド 5 章の最後で紹介します。 今日一番伝えたいこと

Slide 19

Slide 19 text

1 162 第 2 章以降について 19 2~4 章では、アルゴリズムが使える身近な問題を 3 つ紹介します 第 2 章 第 3 章 第 4 章 迷路の問題 プログラムのデバッグ 映画鑑賞の最適化

Slide 20

Slide 20 text

第 2 章 事例 A:迷路の問題

Slide 21

Slide 21 text

2 162 事例 A:迷路の問題 21 S G スタートから ゴールまで 最短手数で移動しよう

Slide 22

Slide 22 text

2 162 事例 A:迷路の問題 22 S G スタートから ゴールまで 最短手数で移動しよう これが良さそう?

Slide 23

Slide 23 text

2 162 事例 A:迷路の問題 23 S G スタートから ゴールまで 最短手数で移動しよう これも良さそう?

Slide 24

Slide 24 text

2 162 事例 A:迷路の問題 24 S G スタートから ゴールまで 最短手数で移動しよう これも良さそう?

Slide 25

Slide 25 text

2 162 事例 A:迷路の問題 25 S G スタートから ゴールまで 最短手数で移動しよう これも良さそう? 移動方法は全部で 216 通り 全部調べるのはつらい!

Slide 26

Slide 26 text

2 162 事例 A:迷路の問題 26 そこで、アルゴリズムを 変えてみよう

Slide 27

Slide 27 text

2 162 アルゴリズムを変えてみよう 27 0 スタートに 0 を書く 手順 1

Slide 28

Slide 28 text

2 162 アルゴリズムを変えてみよう 28 0 1 手順 2 00 のとなりに 01 を書く

Slide 29

Slide 29 text

2 162 アルゴリズムを変えてみよう 29 0 1 2 手順 2 01 のとなりに 02 を書く

Slide 30

Slide 30 text

2 162 アルゴリズムを変えてみよう 30 0 1 2 3 3 手順 2 02 のとなりに 03 を書く

Slide 31

Slide 31 text

2 162 アルゴリズムを変えてみよう 31 0 1 2 3 4 3 4 4 手順 2 03 のとなりに 04 を書く

Slide 32

Slide 32 text

2 162 アルゴリズムを変えてみよう 32 0 1 2 3 4 5 3 4 5 4 手順 2 04 のとなりに 05 を書く

Slide 33

Slide 33 text

2 162 アルゴリズムを変えてみよう 33 0 1 2 3 4 5 6 3 4 6 5 4 手順 2 05 のとなりに 06 を書く

Slide 34

Slide 34 text

2 162 アルゴリズムを変えてみよう 34 0 1 2 3 4 5 6 3 4 7 6 5 4 7 手順 2 06 のとなりに 07 を書く

Slide 35

Slide 35 text

2 162 アルゴリズムを変えてみよう 35 0 1 2 3 4 5 6 3 4 7 8 6 5 4 8 7 8 手順 2 07 のとなりに 08 を書く

Slide 36

Slide 36 text

2 162 アルゴリズムを変えてみよう 36 0 1 2 3 4 5 6 3 4 7 8 9 6 5 4 9 8 7 8 9 手順 2 08 のとなりに 09 を書く

Slide 37

Slide 37 text

2 162 アルゴリズムを変えてみよう 37 0 1 2 3 4 5 6 10 3 4 7 8 9 6 5 4 10 9 8 10 7 8 9 10 手順 2 09 のとなりに 10 を書く

Slide 38

Slide 38 text

2 162 アルゴリズムを変えてみよう 38 0 1 2 3 4 5 6 10 11 3 4 7 8 9 6 5 4 10 9 8 10 7 11 8 9 10 11 11 手順 2 10 のとなりに 11 を書く

Slide 39

Slide 39 text

2 162 アルゴリズムを変えてみよう 39 0 1 2 3 4 5 6 10 11 12 3 4 7 8 9 6 5 4 10 9 8 10 7 12 11 8 12 9 10 11 12 11 12 手順 2 11 のとなりに 12 を書く

Slide 40

Slide 40 text

2 162 アルゴリズムを変えてみよう 40 0 1 2 3 4 5 6 10 11 12 13 3 4 7 8 9 6 5 4 10 9 8 10 7 12 11 8 13 12 13 9 13 10 11 12 11 12 13 手順 2 12 のとなりに 13 を書く

Slide 41

Slide 41 text

2 162 アルゴリズムを変えてみよう 41 0 1 2 3 4 5 6 10 11 12 13 14 3 4 7 8 9 6 5 4 10 9 8 10 7 12 11 8 14 13 12 13 14 9 13 10 11 12 11 12 13 手順 2 13 のとなりに 14 を書く

Slide 42

Slide 42 text

2 162 アルゴリズムを変えてみよう 42 0 1 2 3 4 5 6 10 11 12 13 14 3 4 7 8 9 15 6 5 4 10 9 8 10 7 12 11 8 14 13 12 13 14 15 9 13 15 10 11 12 11 12 13 手順 2 14 のとなりに 15 を書く

Slide 43

Slide 43 text

2 162 アルゴリズムを変えてみよう 43 0 1 2 3 4 5 6 10 11 12 13 14 3 4 7 8 9 15 6 5 4 10 9 8 10 16 7 12 11 8 14 13 12 13 14 15 16 9 13 15 16 10 11 12 16 11 12 13 手順 2 15 のとなりに 16 を書く

Slide 44

Slide 44 text

2 162 アルゴリズムを変えてみよう 44 0 1 2 3 4 5 6 10 11 12 13 14 3 4 7 8 9 15 6 5 4 10 9 8 10 17 16 7 12 11 8 14 13 12 13 14 15 16 9 13 15 16 17 10 11 12 17 16 11 12 13 17 手順 2 16 のとなりに 17 を書く

Slide 45

Slide 45 text

2 162 アルゴリズムを変えてみよう 45 0 1 2 3 4 5 6 10 11 12 13 14 3 4 7 8 9 15 6 5 4 10 9 8 10 18 17 16 7 12 11 8 14 13 12 13 14 15 16 9 13 15 16 17 10 11 12 18 17 16 11 12 13 18 17 18 手順 2 17 のとなりに 18 を書く

Slide 46

Slide 46 text

2 162 アルゴリズムを変えてみよう 46 0 1 2 3 4 5 6 10 11 12 13 14 3 4 7 8 9 15 6 5 4 10 9 8 10 18 17 16 7 12 11 19 8 14 13 12 13 14 15 16 9 13 15 16 17 10 11 12 18 17 16 11 12 13 19 18 17 18 19 手順 2 18 のとなりに 19 を書く

Slide 47

Slide 47 text

2 162 アルゴリズムを変えてみよう 47 0 1 2 3 4 5 6 10 11 12 13 14 3 4 7 8 9 15 6 5 4 10 9 8 10 18 17 16 7 12 11 20 19 8 14 13 12 13 14 15 16 20 9 13 15 16 17 10 11 12 18 17 16 11 12 13 19 18 17 18 19 20 手順 2 19 のとなりに 20 を書く

Slide 48

Slide 48 text

2 162 アルゴリズムを変えてみよう 48 0 1 2 3 4 5 6 10 11 12 13 14 3 4 7 8 9 15 6 5 4 10 9 8 10 18 17 16 7 12 11 20 19 8 14 13 12 13 14 15 16 20 21 9 13 15 16 17 10 11 12 18 17 16 11 12 13 19 18 17 18 19 20 21 手順 2 20 のとなりに 21 を書く

Slide 49

Slide 49 text

2 162 アルゴリズムを変えてみよう 49 0 1 2 3 4 5 6 10 11 12 13 14 3 4 7 8 9 15 6 5 4 10 9 8 10 18 17 16 7 12 11 20 19 8 14 13 12 13 14 15 16 20 21 22 9 13 15 16 17 22 10 11 12 18 17 16 22 11 12 13 19 18 17 18 19 20 21 22 手順 2 21 のとなりに 22 を書く

Slide 50

Slide 50 text

2 162 アルゴリズムを変えてみよう 50 0 1 2 3 4 5 6 10 11 12 13 14 3 4 7 8 9 15 6 5 4 10 9 8 10 18 17 16 7 12 11 20 19 8 14 13 12 13 14 15 16 20 21 22 9 13 15 16 17 22 23 10 11 12 18 17 16 22 11 12 13 19 18 17 18 19 20 21 22 23 手順 2 22 のとなりに 23 を書く

Slide 51

Slide 51 text

2 162 アルゴリズムを変えてみよう 51 0 1 2 3 4 5 6 10 11 12 13 14 3 4 7 8 9 15 6 5 4 10 9 8 10 18 17 16 7 12 11 20 19 8 14 13 12 13 14 15 16 20 21 22 9 13 15 16 17 22 23 10 11 12 18 17 16 22 24 11 12 13 19 18 17 18 19 20 21 22 23 手順 2 23 のとなりに 24 を書く

Slide 52

Slide 52 text

2 162 アルゴリズムを変えてみよう 52 0 1 2 3 4 5 6 10 11 12 13 14 3 4 7 8 9 15 6 5 4 10 9 8 10 18 17 16 7 12 11 20 19 8 14 13 12 13 14 15 16 20 21 22 9 13 15 16 17 22 23 10 11 12 18 17 16 22 24 11 12 13 19 18 17 18 19 20 21 22 23 手順 2 23 のとなりに 24 を書く 最短手数は 23 手!

Slide 53

Slide 53 text

2 162 アルゴリズムを変えてみよう 53 0 1 2 3 4 5 6 10 11 12 13 14 3 4 7 8 9 15 6 5 4 10 9 8 10 18 17 16 7 12 11 20 19 8 14 13 12 13 14 15 16 20 21 22 9 13 15 16 17 22 23 10 11 12 18 17 16 22 24 11 12 13 19 18 17 18 19 20 21 22 23 手順 2 23 のとなりに 24 を書く 最短手数は 23 手! どうやって 23 手で 移動できる?

Slide 54

Slide 54 text

2 162 アルゴリズムを変えてみよう 54 0 1 2 3 4 5 6 10 11 12 13 14 3 4 7 8 9 15 6 5 4 10 9 8 10 18 17 16 7 12 11 20 19 8 14 13 12 13 14 15 16 20 21 22 9 13 15 16 17 22 23 10 11 12 18 17 16 22 24 11 12 13 19 18 17 18 19 20 21 22 23 手順 3 ゴールから出発し 数字が減る方向に移動

Slide 55

Slide 55 text

2 162 アルゴリズムを変えてみよう 55 0 1 2 3 4 5 6 10 11 12 13 14 3 4 7 8 9 15 6 5 4 10 9 8 10 18 17 16 7 12 11 20 19 8 14 13 12 13 14 15 16 20 21 22 9 13 15 16 17 22 23 10 11 12 18 17 16 22 24 11 12 13 19 18 17 18 19 20 21 22 23 手順 3 ゴールから出発し 数字が減る方向に移動 23 → 22

Slide 56

Slide 56 text

2 162 アルゴリズムを変えてみよう 56 0 1 2 3 4 5 6 10 11 12 13 14 3 4 7 8 9 15 6 5 4 10 9 8 10 18 17 16 7 12 11 20 19 8 14 13 12 13 14 15 16 20 21 22 9 13 15 16 17 22 23 10 11 12 18 17 16 22 24 11 12 13 19 18 17 18 19 20 21 22 23 手順 3 ゴールから出発し 数字が減る方向に移動 22 → 21

Slide 57

Slide 57 text

2 162 アルゴリズムを変えてみよう 57 0 1 2 3 4 5 6 10 11 12 13 14 3 4 7 8 9 15 6 5 4 10 9 8 10 18 17 16 7 12 11 20 19 8 14 13 12 13 14 15 16 20 21 22 9 13 15 16 17 22 23 10 11 12 18 17 16 22 24 11 12 13 19 18 17 18 19 20 21 22 23 手順 3 ゴールから出発し 数字が減る方向に移動 21 → 20

Slide 58

Slide 58 text

2 162 アルゴリズムを変えてみよう 58 0 1 2 3 4 5 6 10 11 12 13 14 3 4 7 8 9 15 6 5 4 10 9 8 10 18 17 16 7 12 11 20 19 8 14 13 12 13 14 15 16 20 21 22 9 13 15 16 17 22 23 10 11 12 18 17 16 22 24 11 12 13 19 18 17 18 19 20 21 22 23 手順 3 ゴールから出発し 数字が減る方向に移動 20 → 19

Slide 59

Slide 59 text

2 162 アルゴリズムを変えてみよう 59 0 1 2 3 4 5 6 10 11 12 13 14 3 4 7 8 9 15 6 5 4 10 9 8 10 18 17 16 7 12 11 20 19 8 14 13 12 13 14 15 16 20 21 22 9 13 15 16 17 22 23 10 11 12 18 17 16 22 24 11 12 13 19 18 17 18 19 20 21 22 23 手順 3 ゴールから出発し 数字が減る方向に移動 19 → 18

Slide 60

Slide 60 text

2 162 アルゴリズムを変えてみよう 60 0 1 2 3 4 5 6 10 11 12 13 14 3 4 7 8 9 15 6 5 4 10 9 8 10 18 17 16 7 12 11 20 19 8 14 13 12 13 14 15 16 20 21 22 9 13 15 16 17 22 23 10 11 12 18 17 16 22 24 11 12 13 19 18 17 18 19 20 21 22 23 手順 3 ゴールから出発し 数字が減る方向に移動 18 → 17

Slide 61

Slide 61 text

2 162 アルゴリズムを変えてみよう 61 0 1 2 3 4 5 6 10 11 12 13 14 3 4 7 8 9 15 6 5 4 10 9 8 10 18 17 16 7 12 11 20 19 8 14 13 12 13 14 15 16 20 21 22 9 13 15 16 17 22 23 10 11 12 18 17 16 22 24 11 12 13 19 18 17 18 19 20 21 22 23 手順 3 ゴールから出発し 数字が減る方向に移動 17 → 16

Slide 62

Slide 62 text

2 162 アルゴリズムを変えてみよう 62 0 1 2 3 4 5 6 10 11 12 13 14 3 4 7 8 9 15 6 5 4 10 9 8 10 18 17 16 7 12 11 20 19 8 14 13 12 13 14 15 16 20 21 22 9 13 15 16 17 22 23 10 11 12 18 17 16 22 24 11 12 13 19 18 17 18 19 20 21 22 23 手順 3 ゴールから出発し 数字が減る方向に移動 16 → 15

Slide 63

Slide 63 text

2 162 アルゴリズムを変えてみよう 63 0 1 2 3 4 5 6 10 11 12 13 14 3 4 7 8 9 15 6 5 4 10 9 8 10 18 17 16 7 12 11 20 19 8 14 13 12 13 14 15 16 20 21 22 9 13 15 16 17 22 23 10 11 12 18 17 16 22 24 11 12 13 19 18 17 18 19 20 21 22 23 手順 3 ゴールから出発し 数字が減る方向に移動 15 → 14

Slide 64

Slide 64 text

2 162 アルゴリズムを変えてみよう 64 0 1 2 3 4 5 6 10 11 12 13 14 3 4 7 8 9 15 6 5 4 10 9 8 10 18 17 16 7 12 11 20 19 8 14 13 12 13 14 15 16 20 21 22 9 13 15 16 17 22 23 10 11 12 18 17 16 22 24 11 12 13 19 18 17 18 19 20 21 22 23 手順 3 ゴールから出発し 数字が減る方向に移動 14 → 13

Slide 65

Slide 65 text

2 162 アルゴリズムを変えてみよう 65 0 1 2 3 4 5 6 10 11 12 13 14 3 4 7 8 9 15 6 5 4 10 9 8 10 18 17 16 7 12 11 20 19 8 14 13 12 13 14 15 16 20 21 22 9 13 15 16 17 22 23 10 11 12 18 17 16 22 24 11 12 13 19 18 17 18 19 20 21 22 23 手順 3 ゴールから出発し 数字が減る方向に移動 13 → 12

Slide 66

Slide 66 text

2 162 アルゴリズムを変えてみよう 66 0 1 2 3 4 5 6 10 11 12 13 14 3 4 7 8 9 15 6 5 4 10 9 8 10 18 17 16 7 12 11 20 19 8 14 13 12 13 14 15 16 20 21 22 9 13 15 16 17 22 23 10 11 12 18 17 16 22 24 11 12 13 19 18 17 18 19 20 21 22 23 手順 3 ゴールから出発し 数字が減る方向に移動 12 → 11

Slide 67

Slide 67 text

2 162 アルゴリズムを変えてみよう 67 0 1 2 3 4 5 6 10 11 12 13 14 3 4 7 8 9 15 6 5 4 10 9 8 10 18 17 16 7 12 11 20 19 8 14 13 12 13 14 15 16 20 21 22 9 13 15 16 17 22 23 10 11 12 18 17 16 22 24 11 12 13 19 18 17 18 19 20 21 22 23 手順 3 ゴールから出発し 数字が減る方向に移動 11 → 10

Slide 68

Slide 68 text

2 162 アルゴリズムを変えてみよう 68 0 1 2 3 4 5 6 10 11 12 13 14 3 4 7 8 9 15 6 5 4 10 9 8 10 18 17 16 7 12 11 20 19 8 14 13 12 13 14 15 16 20 21 22 9 13 15 16 17 22 23 10 11 12 18 17 16 22 24 11 12 13 19 18 17 18 19 20 21 22 23 手順 3 ゴールから出発し 数字が減る方向に移動 10 → 09

Slide 69

Slide 69 text

2 162 アルゴリズムを変えてみよう 69 0 1 2 3 4 5 6 10 11 12 13 14 3 4 7 8 9 15 6 5 4 10 9 8 10 18 17 16 7 12 11 20 19 8 14 13 12 13 14 15 16 20 21 22 9 13 15 16 17 22 23 10 11 12 18 17 16 22 24 11 12 13 19 18 17 18 19 20 21 22 23 手順 3 ゴールから出発し 数字が減る方向に移動 09 → 08

Slide 70

Slide 70 text

2 162 アルゴリズムを変えてみよう 70 0 1 2 3 4 5 6 10 11 12 13 14 3 4 7 8 9 15 6 5 4 10 9 8 10 18 17 16 7 12 11 20 19 8 14 13 12 13 14 15 16 20 21 22 9 13 15 16 17 22 23 10 11 12 18 17 16 22 24 11 12 13 19 18 17 18 19 20 21 22 23 手順 3 ゴールから出発し 数字が減る方向に移動 08 → 07

Slide 71

Slide 71 text

2 162 アルゴリズムを変えてみよう 71 0 1 2 3 4 5 6 10 11 12 13 14 3 4 7 8 9 15 6 5 4 10 9 8 10 18 17 16 7 12 11 20 19 8 14 13 12 13 14 15 16 20 21 22 9 13 15 16 17 22 23 10 11 12 18 17 16 22 24 11 12 13 19 18 17 18 19 20 21 22 23 手順 3 ゴールから出発し 数字が減る方向に移動 07 → 06

Slide 72

Slide 72 text

2 162 アルゴリズムを変えてみよう 72 0 1 2 3 4 5 6 10 11 12 13 14 3 4 7 8 9 15 6 5 4 10 9 8 10 18 17 16 7 12 11 20 19 8 14 13 12 13 14 15 16 20 21 22 9 13 15 16 17 22 23 10 11 12 18 17 16 22 24 11 12 13 19 18 17 18 19 20 21 22 23 手順 3 ゴールから出発し 数字が減る方向に移動 06 → 05

Slide 73

Slide 73 text

2 162 アルゴリズムを変えてみよう 73 0 1 2 3 4 5 6 10 11 12 13 14 3 4 7 8 9 15 6 5 4 10 9 8 10 18 17 16 7 12 11 20 19 8 14 13 12 13 14 15 16 20 21 22 9 13 15 16 17 22 23 10 11 12 18 17 16 22 24 11 12 13 19 18 17 18 19 20 21 22 23 手順 3 ゴールから出発し 数字が減る方向に移動 05 → 04

Slide 74

Slide 74 text

2 162 アルゴリズムを変えてみよう 74 0 1 2 3 4 5 6 10 11 12 13 14 3 4 7 8 9 15 6 5 4 10 9 8 10 18 17 16 7 12 11 20 19 8 14 13 12 13 14 15 16 20 21 22 9 13 15 16 17 22 23 10 11 12 18 17 16 22 24 11 12 13 19 18 17 18 19 20 21 22 23 手順 3 ゴールから出発し 数字が減る方向に移動 04 → 03

Slide 75

Slide 75 text

2 162 アルゴリズムを変えてみよう 75 0 1 2 3 4 5 6 10 11 12 13 14 3 4 7 8 9 15 6 5 4 10 9 8 10 18 17 16 7 12 11 20 19 8 14 13 12 13 14 15 16 20 21 22 9 13 15 16 17 22 23 10 11 12 18 17 16 22 24 11 12 13 19 18 17 18 19 20 21 22 23 手順 3 ゴールから出発し 数字が減る方向に移動 03 → 02

Slide 76

Slide 76 text

2 162 アルゴリズムを変えてみよう 76 0 1 2 3 4 5 6 10 11 12 13 14 3 4 7 8 9 15 6 5 4 10 9 8 10 18 17 16 7 12 11 20 19 8 14 13 12 13 14 15 16 20 21 22 9 13 15 16 17 22 23 10 11 12 18 17 16 22 24 11 12 13 19 18 17 18 19 20 21 22 23 手順 3 ゴールから出発し 数字が減る方向に移動 02 → 01

Slide 77

Slide 77 text

2 162 アルゴリズムを変えてみよう 77 0 1 2 3 4 5 6 10 11 12 13 14 3 4 7 8 9 15 6 5 4 10 9 8 10 18 17 16 7 12 11 20 19 8 14 13 12 13 14 15 16 20 21 22 9 13 15 16 17 22 23 10 11 12 18 17 16 22 24 11 12 13 19 18 17 18 19 20 21 22 23 手順 3 ゴールから出発し 数字が減る方向に移動 01 → 00

Slide 78

Slide 78 text

2 162 アルゴリズムを変えてみよう 78 0 1 2 3 4 5 6 10 11 12 13 14 3 4 7 8 9 15 6 5 4 10 9 8 10 18 17 16 7 12 11 20 19 8 14 13 12 13 14 15 16 20 21 22 9 13 15 16 17 22 23 10 11 12 18 17 16 22 24 11 12 13 19 18 17 18 19 20 21 22 23 手順 3 ゴールから出発し 数字が減る方向に移動 01 → 00 最短経路が求められた!

Slide 79

Slide 79 text

2 162 第 2 章のまとめ 79 • 隣に数を書き込んでいくことで、最短経路のうち一つがわかる • このようなアルゴリズムは幅優先探索と呼ばれる 0 スタートに 0 を書く x の隣に x+1 を書く 0 1 2 3 4 1 2 3 4 2 3 4 0 1 2 3 4 1 2 3 4 5 2 6 3 4 5 6 7 ゴールから数字が 減る方向に移動

Slide 80

Slide 80 text

第 3 章 事例 B:プログラムのデバッグ

Slide 81

Slide 81 text

3 162 事例 B:プログラムのデバッグ • 100 行のプログラムがある • その中にバグが 1 つだけあり、バグ 地点の後は正常に動作しない 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 : 99 100 81 aaaaaaaa bbbbbbbb aaaaaaaa bbbbbbbb aaaaaaaa bbbbbbbb aaaaaaaa bbbbbbbb aaaaaaaa bbbbbbbb aaaaaaaa bbbbbbbb aaaaaaaa bbbbbbbb aaaaaaaa bbbbbbbb aaaaaaaa bbbbbbbb aaaaaaaa bbbbbbbb : aaaaaaaa bbbbbbbb

Slide 82

Slide 82 text

3 162 事例 B:プログラムのデバッグ • 100 行のプログラムがある • その中にバグが 1 つだけあり、バグ 地点の後は正常に動作しない 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 : 99 100 82 aaaaaaaa bbbbbbbb aaaaaaaa bbbbbbbb aaaaaaaa bbbbbbbb aaaaaaaa bbbbbbbb aaaaaaaa bbbbbbbb aaaaaaaa bbbbbbbb aaaaaaaa bbbbbbbb aaaaaaaa bbbbbbbb aaaaaaaa bbbbbbbb aaaaaaaa bbbbbbbb : aaaaaaaa bbbbbbbb たとえばバグが 15 行目の場合…

Slide 83

Slide 83 text

3 162 事例 B:プログラムのデバッグ • 100 行のプログラムがある • その中にバグが 1 つだけあり、バグ 地点の後は正常に動作しない 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 : 99 100 83 aaaaaaaa bbbbbbbb aaaaaaaa bbbbbbbb aaaaaaaa bbbbbbbb aaaaaaaa bbbbbbbb aaaaaaaa bbbbbbbb aaaaaaaa bbbbbbbb aaaaaaaa bbbbbbbb aaaaaaaa bbbbbbbb aaaaaaaa bbbbbbbb aaaaaaaa bbbbbbbb : aaaaaaaa bbbbbbbb 正常に 動作する 正常に 動作しない

Slide 84

Slide 84 text

3 162 事例 B:プログラムのデバッグ • 100 行のプログラムがある • その中にバグが 1 つだけあり、バグ 地点の後は正常に動作しない 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 : 99 100 84 aaaaaaaa bbbbbbbb aaaaaaaa bbbbbbbb aaaaaaaa bbbbbbbb aaaaaaaa bbbbbbbb aaaaaaaa bbbbbbbb aaaaaaaa bbbbbbbb aaaaaaaa bbbbbbbb aaaaaaaa bbbbbbbb aaaaaaaa bbbbbbbb aaaaaaaa bbbbbbbb : aaaaaaaa bbbbbbbb 正常に 動作する 正常に 動作しない 問題 「〇〇行目は正常に動作するか?」という確認をできる だけ少ない回数行うことで、バグの位置を当てよう

Slide 85

Slide 85 text

3 162 単純なアルゴリズム 85 普通にやるとどうなるか?

Slide 86

Slide 86 text

3 162 単純なアルゴリズム 86 まずは「1 行ずつ調べていく方法」が 考えられる 1 行目は 動作するか? バグは 1 行目 No Yes

Slide 87

Slide 87 text

3 162 単純なアルゴリズム 87 まずは「1 行ずつ調べていく方法」が 考えられる 1 行目は 動作するか? バグは 1 行目 No Yes 2 行目は 動作するか? バグは 2 行目 No Yes

Slide 88

Slide 88 text

3 162 単純なアルゴリズム 88 まずは「1 行ずつ調べていく方法」が 考えられる 1 行目は 動作するか? バグは 1 行目 No Yes 2 行目は 動作するか? バグは 2 行目 No Yes 3 行目は 動作するか? バグは 3 行目 No Yes

Slide 89

Slide 89 text

3 162 単純なアルゴリズム 89 まずは「1 行ずつ調べていく方法」が 考えられる 1 行目は 動作するか? バグは 1 行目 No Yes 2 行目は 動作するか? バグは 2 行目 No Yes 3 行目は 動作するか? バグは 3 行目 No Yes …

Slide 90

Slide 90 text

3 162 単純なアルゴリズム 90 まずは「1 行ずつ調べていく方法」が 考えられる 1 行目は 動作するか? バグは 1 行目 No Yes 2 行目は 動作するか? バグは 2 行目 No Yes 3 行目は 動作するか? バグは 3 行目 No Yes … このままでは最悪 100 回の 確認が必要

Slide 91

Slide 91 text

3 162 アルゴリズムを変える:例 1 91 「いまあり得る範囲の中央」を確認し続けると効率的

Slide 92

Slide 92 text

3 162 アルゴリズムを変える:例 1 92 「いまあり得る範囲の中央」を確認し続けると効率的 バグの箇所 1~100 行目 があり得る 50 行目は動く?

Slide 93

Slide 93 text

3 162 アルゴリズムを変える:例 1 93 「いまあり得る範囲の中央」を確認し続けると効率的 バグの箇所 1~100 行目 があり得る 50 行目は動く? バグの箇所 1~50 行目 があり得る バグの範囲の大きさ 100行が 50 行に No

Slide 94

Slide 94 text

3 162 アルゴリズムを変える:例 1 94 「いまあり得る範囲の中央」を確認し続けると効率的 バグの箇所 1~100 行目 があり得る 50 行目は動く? バグの箇所 1~50 行目 があり得る バグの範囲の大きさ 100 行が 50 行に No バグの箇所 51~100 行目 があり得る Yes バグの範囲の大きさ 100行が 50 行に

Slide 95

Slide 95 text

3 162 アルゴリズムを変える:例 1 95 「いまあり得る範囲の中央」を確認し続けると効率的 バグの箇所 1~100 行目 があり得る 50 行目は動く? バグの箇所 1~50 行目 があり得る バグの範囲の大きさ 100 行が 50 行に No バグの箇所 51~100 行目 があり得る Yes バグの範囲の大きさ 100行が 50 行に 1 回の確認で範囲が半減!

Slide 96

Slide 96 text

3 162 アルゴリズムを変える:例 1 96 「いまあり得る範囲の中央」を確認し続けると効率的 2 手目以降はどうなるか…? バグ箇所 1~100 行目 1~50 行目 50 行目は 動くか? No

Slide 97

Slide 97 text

3 162 アルゴリズムを変える:例 1 97 「いまあり得る範囲の中央」を確認し続けると効率的 2 手目以降はどうなるか…? バグ箇所 1~100 行目 1~50 行目 50 行目は 動くか? 25 行目は 動くか? No

Slide 98

Slide 98 text

3 162 アルゴリズムを変える:例 1 98 「いまあり得る範囲の中央」を確認し続けると効率的 2 手目以降はどうなるか…? バグ箇所 1~100 行目 1~50 行目 50 行目は 動くか? No 25 行目は 動くか? 1~25 行目 No

Slide 99

Slide 99 text

3 162 アルゴリズムを変える:例 1 99 「いまあり得る範囲の中央」を確認し続けると効率的 2 手目以降はどうなるか…? バグ箇所 1~100 行目 1~50 行目 50 行目は 動くか? No 1~25 行目 No 13 行目は 動くか? 25 行目は 動くか?

Slide 100

Slide 100 text

3 162 アルゴリズムを変える:例 1 100 「いまあり得る範囲の中央」を確認し続けると効率的 2 手目以降はどうなるか…? バグ箇所 1~100 行目 1~50 行目 50 行目は 動くか? No 1~25 行目 No 13 行目は 動くか? 25 行目は 動くか? 14~25 Yes

Slide 101

Slide 101 text

3 162 アルゴリズムを変える:例 1 101 「いまあり得る範囲の中央」を確認し続けると効率的 2 手目以降はどうなるか…? バグ箇所 1~100 行目 1~50 行目 50 行目は 動くか? No 1~25 行目 No 13 行目は 動くか? 25 行目は 動くか? 14~25 Yes 19 行目は 動くか?

Slide 102

Slide 102 text

3 162 アルゴリズムを変える:例 1 102 「いまあり得る範囲の中央」を確認し続けると効率的 2 手目以降はどうなるか…? バグ箇所 1~100 行目 1~50 行目 50 行目は 動くか? No 1~25 行目 No 13 行目は 動くか? 25 行目は 動くか? 14~25 Yes 19 行目は 動くか? 20~25 Yes

Slide 103

Slide 103 text

3 162 アルゴリズムを変える:例 1 103 「いまあり得る範囲の中央」を確認し続けると効率的 2 手目以降はどうなるか…? バグ箇所 1~100 行目 1~50 行目 50 行目は 動くか? No 1~25 行目 No 13 行目は 動くか? 25 行目は 動くか? 14~25 Yes 19 行目は 動くか? 20~25 Yes 22 行目は 動くか?

Slide 104

Slide 104 text

3 162 アルゴリズムを変える:例 1 104 「いまあり得る範囲の中央」を確認し続けると効率的 2 手目以降はどうなるか…? バグ箇所 1~100 行目 1~50 行目 50 行目は 動くか? No 1~25 行目 No 13 行目は 動くか? 25 行目は 動くか? 14~25 Yes 19 行目は 動くか? 20~25 Yes 22 行目は 動くか? 20~22 No

Slide 105

Slide 105 text

3 162 アルゴリズムを変える:例 1 105 「いまあり得る範囲の中央」を確認し続けると効率的 2 手目以降はどうなるか…? バグ箇所 1~100 行目 1~50 行目 50 行目は 動くか? No 1~25 行目 No 13 行目は 動くか? 25 行目は 動くか? 14~25 Yes 19 行目は 動くか? 20~25 Yes 22 行目は 動くか? 20~22 No 21 行目は 動くか?

Slide 106

Slide 106 text

3 162 アルゴリズムを変える:例 1 106 「いまあり得る範囲の中央」を確認し続けると効率的 2 手目以降はどうなるか…? バグ箇所 1~100 行目 1~50 行目 50 行目は 動くか? No 1~25 行目 No 13 行目は 動くか? 25 行目は 動くか? 14~25 Yes 19 行目は 動くか? 20~25 Yes 22 行目は 動くか? 20~22 No 21 行目は 動くか? 22 Yes

Slide 107

Slide 107 text

3 162 アルゴリズムを変える:例 1 107 「いまあり得る範囲の中央」を確認し続けると効率的 2 手目以降はどうなるか…? バグ箇所 1~100 行目 1~50 行目 50 行目は 動くか? No 1~25 行目 No 13 行目は 動くか? 25 行目は 動くか? 14~25 Yes 19 行目は 動くか? 20~25 Yes 22 行目は 動くか? 20~22 No 21 行目は 動くか? 22 Yes 6 回で当てられた! これは偶然か?

Slide 108

Slide 108 text

3 162 アルゴリズムを変える:例 2 108 「いまあり得る範囲の中央」を確認し続けると効率的 バグが 77 行目にある場合は…?

Slide 109

Slide 109 text

3 162 アルゴリズムを変える:例 2 109 「いまあり得る範囲の中央」を確認し続けると効率的 バグが 77 行目にある場合は…? バグ箇所 1~100 行目 50 行目は 動くか?

Slide 110

Slide 110 text

3 162 アルゴリズムを変える:例 2 110 「いまあり得る範囲の中央」を確認し続けると効率的 バグが 77 行目にある場合は…? バグ箇所 1~100 行目 50 行目は 動くか? 51~100 行目 Yes

Slide 111

Slide 111 text

3 162 アルゴリズムを変える:例 2 111 「いまあり得る範囲の中央」を確認し続けると効率的 バグが 77 行目にある場合は…? バグ箇所 1~100 行目 50 行目は 動くか? 51~100 行目 Yes 75 行目は 動くか?

Slide 112

Slide 112 text

3 162 アルゴリズムを変える:例 2 112 「いまあり得る範囲の中央」を確認し続けると効率的 バグが 77 行目にある場合は…? バグ箇所 1~100 行目 50 行目は 動くか? 51~100 行目 75 行目は 動くか? 76~100 行目 Yes Yes

Slide 113

Slide 113 text

3 162 アルゴリズムを変える:例 2 113 「いまあり得る範囲の中央」を確認し続けると効率的 バグが 77 行目にある場合は…? バグ箇所 1~100 行目 50 行目は 動くか? 51~100 行目 75 行目は 動くか? 88 行目は 動くか? 76~100 行目 Yes Yes

Slide 114

Slide 114 text

3 162 アルゴリズムを変える:例 2 114 「いまあり得る範囲の中央」を確認し続けると効率的 バグが 77 行目にある場合は…? バグ箇所 1~100 行目 50 行目は 動くか? 51~100 行目 75 行目は 動くか? 88 行目は 動くか? 76~100 行目 Yes Yes 76~88 No

Slide 115

Slide 115 text

3 162 アルゴリズムを変える:例 2 115 「いまあり得る範囲の中央」を確認し続けると効率的 バグが 77 行目にある場合は…? バグ箇所 1~100 行目 50 行目は 動くか? 51~100 行目 75 行目は 動くか? 88 行目は 動くか? 76~100 行目 Yes Yes 76~88 No 82 行目は 動くか?

Slide 116

Slide 116 text

3 162 アルゴリズムを変える:例 2 116 「いまあり得る範囲の中央」を確認し続けると効率的 バグが 77 行目にある場合は…? バグ箇所 1~100 行目 50 行目は 動くか? 51~100 行目 75 行目は 動くか? 88 行目は 動くか? 76~100 行目 Yes Yes 76~88 No 82 行目は 動くか? 76~82 No

Slide 117

Slide 117 text

3 162 アルゴリズムを変える:例 2 117 「いまあり得る範囲の中央」を確認し続けると効率的 バグが 77 行目にある場合は…? バグ箇所 1~100 行目 50 行目は 動くか? 51~100 行目 75 行目は 動くか? 88 行目は 動くか? 76~100 行目 Yes Yes 76~88 No 82 行目は 動くか? 76~82 No 79 行目は 動くか?

Slide 118

Slide 118 text

3 162 アルゴリズムを変える:例 2 118 「いまあり得る範囲の中央」を確認し続けると効率的 バグが 77 行目にある場合は…? バグ箇所 1~100 行目 50 行目は 動くか? 51~100 行目 75 行目は 動くか? 88 行目は 動くか? 76~100 行目 Yes Yes 76~88 No 82 行目は 動くか? 76~82 No 79 行目は 動くか? 76~79 No

Slide 119

Slide 119 text

3 162 アルゴリズムを変える:例 2 119 「いまあり得る範囲の中央」を確認し続けると効率的 バグが 77 行目にある場合は…? バグ箇所 1~100 行目 50 行目は 動くか? 51~100 行目 75 行目は 動くか? 88 行目は 動くか? 76~100 行目 Yes Yes 76~88 No 82 行目は 動くか? 76~82 No 79 行目は 動くか? 76~79 77 行目は 動くか? No

Slide 120

Slide 120 text

3 162 アルゴリズムを変える:例 2 120 「いまあり得る範囲の中央」を確認し続けると効率的 バグが 77 行目にある場合は…? バグ箇所 1~100 行目 50 行目は 動くか? 51~100 行目 75 行目は 動くか? 88 行目は 動くか? 76~100 行目 Yes Yes 76~88 No 82 行目は 動くか? 76~82 No 79 行目は 動くか? 76~79 77 行目は 動くか? No 76~77 No

Slide 121

Slide 121 text

3 162 アルゴリズムを変える:例 2 121 「いまあり得る範囲の中央」を確認し続けると効率的 バグが 77 行目にある場合は…? バグ箇所 1~100 行目 50 行目は 動くか? 51~100 行目 75 行目は 動くか? 88 行目は 動くか? 76~100 行目 Yes Yes 76~88 No 82 行目は 動くか? 76~82 No 79 行目は 動くか? 76~79 77 行目は 動くか? No 76~77 No 76 行目は 動くか?

Slide 122

Slide 122 text

3 162 アルゴリズムを変える:例 2 122 「いまあり得る範囲の中央」を確認し続けると効率的 バグが 77 行目にある場合は…? バグ箇所 1~100 行目 50 行目は 動くか? 51~100 行目 75 行目は 動くか? 88 行目は 動くか? 76~100 行目 Yes Yes 76~88 No 82 行目は 動くか? 76~82 No 79 行目は 動くか? 76~79 77 行目は 動くか? No 76~77 No 76 行目は 動くか? Yes バグは 77行目

Slide 123

Slide 123 text

3 162 アルゴリズムを変える:例 2 123 「いまあり得る範囲の中央」を確認し続けると効率的 バグが 77 行目にある場合は…? バグ箇所 1~100 行目 50 行目は 動くか? 51~100 行目 75 行目は 動くか? 88 行目は 動くか? 76~100 行目 Yes Yes 76~88 No 82 行目は 動くか? 76~82 No 79 行目は 動くか? 76~79 77 行目は 動くか? No 76~77 No 76 行目は 動くか? Yes バグは 77行目 7 回で当てられた! 最悪何回で当てられるか?

Slide 124

Slide 124 text

3 162 最悪何回で当てられるか? 124 1 回の確認で範囲が半減するので… プログラムが 100 行の場合 最悪 7 回 100 50 25 13 7 4 2 1

Slide 125

Slide 125 text

3 162 最悪何回で当てられるか? 125 1 回の確認で範囲が半減するので… プログラムが 100 行の場合 最悪 7 回 100 50 25 13 7 4 2 1 プログラムが 4000 行の場合 最悪 12 回 4000 2000 1000 500 32 16 8 1 250 125 63 4 2

Slide 126

Slide 126 text

3 162 第 3 章のまとめ 126 • 現在あり得る範囲の中央を確認することで、プログラムのバグの 位置が効率的に見つけられる • このようなアルゴリズムは二分探索法と呼ばれる

Slide 127

Slide 127 text

第 4 章 事例 C:映画鑑賞の最適化

Slide 128

Slide 128 text

4 162 事例 C:映画鑑賞問題 • 左図のような番組表が与えられる • 同時に 2 つの映画を見ることはで きない • 最大で何個の映画を見れるか? 128 0 5 10 映画 A 映画 B 映画 C 映画 D 映画 E

Slide 129

Slide 129 text

4 162 事例 C:映画鑑賞問題 129 0 5 10 映画 A 映画 B 映画 C 映画 D 映画 E このような選び方は 時間が重なるので NG • 左図のような番組表が与えられる • 同時に 2 つの映画を見ることはで きない • 最大で何個の映画を見れるか?

Slide 130

Slide 130 text

4 162 事例 C:映画鑑賞問題 130 0 5 10 映画 A 映画 B 映画 C 映画 D 映画 E 3 個の映画が 選べる! • 左図のような番組表が与えられる • 同時に 2 つの映画を見ることはで きない • 最大で何個の映画を見れるか?

Slide 131

Slide 131 text

4 162 事例 C:映画鑑賞問題 131 まず考えられる方法は…?

Slide 132

Slide 132 text

4 162 事例 C:映画鑑賞問題 132 まず、「どの映画を選ぶか」を全部調べる方法がある 0 5 10 映画 A 映画 B 映画 C 映画 D 映画 E 0 5 10 映画 A 映画 B 映画 C 映画 D 映画 E 0 5 10 映画 A 映画 B 映画 C 映画 D 映画 E

Slide 133

Slide 133 text

4 162 事例 C:映画鑑賞問題 133 まず、「どの映画を選ぶか」を全部調べる方法がある 0 5 10 映画 A 映画 B 映画 C 映画 D 映画 E 0 5 10 映画 A 映画 B 映画 C 映画 D 映画 E 0 5 10 映画 A 映画 B 映画 C 映画 D 映画 E 映画が 50 個だと 何通り調べる必要がある?

Slide 134

Slide 134 text

4 162 事例 C:映画鑑賞問題 134 簡単のため まずは映画 1 個から考えよう

Slide 135

Slide 135 text

4 162 事例 C:映画鑑賞問題 135 映画が 1 つの場合は… 2通り 選ぶ 選ば ない 映画1 映画1

Slide 136

Slide 136 text

4 162 事例 C:映画鑑賞問題 136 映画が 2 つの場合は… 4通り 映画1 映画1 選ぶ 選ば ない 映画1 映画2 映画1 映画2 選ぶ 選ば ない 映画1 映画2 映画1 映画2 選ぶ 選ば ない

Slide 137

Slide 137 text

4 162 事例 C:映画鑑賞問題 137 映画が 3 つの場合は… 8通り 映画1 映画1 選ぶ 選ば ない 映画1 映画2 映画1 映画2 選ぶ 選ば ない 映画1 映画2 映画1 映画2 選ぶ 選ば ない 映画1 映画2 映画3 映画1 映画2 映画3 映画1 映画2 映画3 映画1 映画2 映画3 映画1 映画2 映画3 映画1 映画2 映画3 映画1 映画2 映画3 映画1 映画2 映画3

Slide 138

Slide 138 text

4 162 事例 C:映画鑑賞問題 138 映画が 50 個になると、何通りか…? 映画数 選び方の数 1 2 2 4 3 8 4 5 6 7 8 9 10 11 12 13 映画数 選び方の数 14 15 16 17 18 19 20 21 22 23 24 25 26 映画数 選び方の数 27 28 29 30 31 32 33 34 35 36 37 38 39 映画数 選び方の数 40 41 42 43 44 45 46 47 48 49 50 ×2 ×2 ×2

Slide 139

Slide 139 text

4 162 事例 C:映画鑑賞問題 139 映画が 50 個になると、何通りか…? 映画数 選び方の数 1 2 2 4 3 8 4 16 5 32 6 64 7 128 8 256 9 512 10 1,024 11 2,048 12 4,096 13 8,192 映画数 選び方の数 14 16,384 15 32,768 16 65,536 17 131,072 18 262,144 19 524,288 20 1,048,576 21 2,097,152 22 4,194,304 23 8,388,608 24 16,777,216 25 33,554,432 26 67,108,864 映画数 選び方の数 27 134,217,728 28 268,435,456 29 536,870,912 30 1,073,741,824 31 2,147,483,648 32 4,294,967,296 33 8,589,934,592 34 17,179,869,184 35 34,359,738,368 36 68,719,476,736 37 137,438,953,472 38 274,877,906,944 39 549,755,813,888 映画数 選び方の数 40 1,099,511,627,776 41 2,199,023,255,552 42 4,398,046,511,104 43 8,796,093,022,208 44 17,592,186,044,416 45 35,184,372,088,832 46 70,368,744,177,664 47 140,737,488,355,328 48 281,474,976,710,656 49 562,949,953,421,312 50 1,125,899,906,842,624 ×2 ×2

Slide 140

Slide 140 text

4 162 事例 C:映画鑑賞問題 140 映画が 50 個になると、何通りか…? 映画数 選び方の数 1 2 2 4 3 8 4 16 5 32 6 64 7 128 8 256 9 512 10 1,024 11 2,048 12 4,096 13 8,192 映画数 選び方の数 14 16,384 15 32,768 16 65,536 17 131,072 18 262,144 19 524,288 20 1,048,576 21 2,097,152 22 4,194,304 23 8,388,608 24 16,777,216 25 33,554,432 26 67,108,864 映画数 選び方の数 27 134,217,728 28 268,435,456 29 536,870,912 30 1,073,741,824 31 2,147,483,648 32 4,294,967,296 33 8,589,934,592 34 17,179,869,184 35 34,359,738,368 36 68,719,476,736 37 137,438,953,472 38 274,877,906,944 39 549,755,813,888 映画数 選び方の数 40 1,099,511,627,776 41 2,199,023,255,552 42 4,398,046,511,104 43 8,796,093,022,208 44 17,592,186,044,416 45 35,184,372,088,832 46 70,368,744,177,664 47 140,737,488,355,328 48 281,474,976,710,656 49 562,949,953,421,312 50 1,125,899,906,842,624 全部で 1125兆通り

Slide 141

Slide 141 text

4 162 事例 C:映画鑑賞問題 141 映画が 50 個になると、何通りか…? 映画数 選び方の数 1 2 2 4 3 8 4 16 5 32 6 64 7 128 8 256 9 512 10 1,024 11 2,048 12 4,096 13 8,192 映画数 選び方の数 14 16,384 15 32,768 16 65,536 17 131,072 18 262,144 19 524,288 20 1,048,576 21 2,097,152 22 4,194,304 23 8,388,608 24 16,777,216 25 33,554,432 26 67,108,864 映画数 選び方の数 27 134,217,728 28 268,435,456 29 536,870,912 30 1,073,741,824 31 2,147,483,648 32 4,294,967,296 33 8,589,934,592 34 17,179,869,184 35 34,359,738,368 36 68,719,476,736 37 137,438,953,472 38 274,877,906,944 39 549,755,813,888 映画数 選び方の数 40 1,099,511,627,776 41 2,199,023,255,552 42 4,398,046,511,104 43 8,796,093,022,208 44 17,592,186,044,416 45 35,184,372,088,832 46 70,368,744,177,664 47 140,737,488,355,328 48 281,474,976,710,656 49 562,949,953,421,312 50 1,125,899,906,842,624 全部で 1125兆通り 10億通り/秒※ パソコン 計算速度 ※プログラムの実装やパソコンの性能などにより、数千万~十億程度まで変わる可能性があります。

Slide 142

Slide 142 text

4 162 事例 C:映画鑑賞問題 142 映画が 50 個になると、何通りか…? 映画数 選び方の数 1 2 2 4 3 8 4 16 5 32 6 64 7 128 8 256 9 512 10 1,024 11 2,048 12 4,096 13 8,192 映画数 選び方の数 14 16,384 15 32,768 16 65,536 17 131,072 18 262,144 19 524,288 20 1,048,576 21 2,097,152 22 4,194,304 23 8,388,608 24 16,777,216 25 33,554,432 26 67,108,864 映画数 選び方の数 27 134,217,728 28 268,435,456 29 536,870,912 30 1,073,741,824 31 2,147,483,648 32 4,294,967,296 33 8,589,934,592 34 17,179,869,184 35 34,359,738,368 36 68,719,476,736 37 137,438,953,472 38 274,877,906,944 39 549,755,813,888 映画数 選び方の数 40 1,099,511,627,776 41 2,199,023,255,552 42 4,398,046,511,104 43 8,796,093,022,208 44 17,592,186,044,416 45 35,184,372,088,832 46 70,368,744,177,664 47 140,737,488,355,328 48 281,474,976,710,656 49 562,949,953,421,312 50 1,125,899,906,842,624 全部で 1125兆通り パソコン 計算速度 = 約 110万秒 10億通り/秒※ ※プログラムの実装やパソコンの性能などにより、数千万~十億程度まで変わる可能性があります。

Slide 143

Slide 143 text

4 162 事例 C:映画鑑賞問題 143 映画が 50 個になると、何通りか…? 映画数 選び方の数 1 2 2 4 3 8 4 16 5 32 6 64 7 128 8 256 9 512 10 1,024 11 2,048 12 4,096 13 8,192 映画数 選び方の数 14 16,384 15 32,768 16 65,536 17 131,072 18 262,144 19 524,288 20 1,048,576 21 2,097,152 22 4,194,304 23 8,388,608 24 16,777,216 25 33,554,432 26 67,108,864 映画数 選び方の数 27 134,217,728 28 268,435,456 29 536,870,912 30 1,073,741,824 31 2,147,483,648 32 4,294,967,296 33 8,589,934,592 34 17,179,869,184 35 34,359,738,368 36 68,719,476,736 37 137,438,953,472 38 274,877,906,944 39 549,755,813,888 映画数 選び方の数 40 1,099,511,627,776 41 2,199,023,255,552 42 4,398,046,511,104 43 8,796,093,022,208 44 17,592,186,044,416 45 35,184,372,088,832 46 70,368,744,177,664 47 140,737,488,355,328 48 281,474,976,710,656 49 562,949,953,421,312 50 1,125,899,906,842,624 全部で 1125兆通り パソコン 計算速度 = 約 110万秒 = 約 2週間かかる! 10億通り/秒※ ※プログラムの実装やパソコンの性能などにより、数千万~十億程度まで変わる可能性があります。

Slide 144

Slide 144 text

144 2 週間も待てない。一体どうすれば良い?

Slide 145

Slide 145 text

4 162 事例 C:映画鑑賞問題 145 実は「選べる中で最も終了時刻の早い映画」を選び続けると最強 0 5 10 映画 A 映画 B 映画 C 映画 D 映画 E 現在時刻

Slide 146

Slide 146 text

4 162 事例 C:映画鑑賞問題 146 実は「選べる中で最も終了時刻の早い映画」を選び続けると最強 0 5 10 映画 A 映画 B 映画 C 映画 D 映画 E 現在時刻 選んだ 映画の数 0

Slide 147

Slide 147 text

4 162 事例 C:映画鑑賞問題 147 実は「選べる中で最も終了時刻の早い映画」を選び続けると最強 0 5 10 映画 A 映画 B 映画 C 映画 D 映画 E 現在時刻 終了が 一番早い 選んだ 映画の数 1

Slide 148

Slide 148 text

4 162 事例 C:映画鑑賞問題 148 実は「選べる中で最も終了時刻の早い映画」を選び続けると最強 0 5 10 映画 A 映画 B 映画 C 映画 D 映画 E 現在時刻 選んだ 映画の数 1

Slide 149

Slide 149 text

4 162 事例 C:映画鑑賞問題 149 実は「選べる中で最も終了時刻の早い映画」を選び続けると最強 0 5 10 映画 A 映画 B 映画 C 映画 D 映画 E 現在時刻 終了が 一番早い 選んだ 映画の数 2

Slide 150

Slide 150 text

4 162 事例 C:映画鑑賞問題 150 実は「選べる中で最も終了時刻の早い映画」を選び続けると最強 0 5 10 映画 A 映画 B 映画 C 映画 D 映画 E 現在時刻 選んだ 映画の数 2

Slide 151

Slide 151 text

4 162 事例 C:映画鑑賞問題 151 実は「選べる中で最も終了時刻の早い映画」を選び続けると最強 0 5 10 映画 A 映画 B 映画 C 映画 D 映画 E 現在時刻 終了が 一番早い 選んだ 映画の数 3

Slide 152

Slide 152 text

4 162 事例 C:映画鑑賞問題 152 実は「選べる中で最も終了時刻の早い映画」を選び続けると最強 0 5 10 映画 A 映画 B 映画 C 映画 D 映画 E 現在時刻 終了が 一番早い 選んだ 映画の数 3 3 つの映画を 選ぶことができた

Slide 153

Slide 153 text

4 162 事例 C:映画鑑賞問題 153 • これを使うと、映画が 50 個でも 0.01 秒以内で答えがわかる※ • 時間をかければ手計算でも求められる ※コンピュータによる計算の場合

Slide 154

Slide 154 text

4 162 事例 C:映画鑑賞問題 154 • これを使うと、映画が 50 個でも 0.01 秒以内で答えがわかる※ • 時間をかければ手計算でも求められる 2 週間 vs. 0.01 秒 ※コンピュータによる計算の場合

Slide 155

Slide 155 text

第 5 章 講演のまとめ

Slide 156

Slide 156 text

5 162 講演のまとめ 156 計算の手順 = アルゴリズム

Slide 157

Slide 157 text

5 162 講演のまとめ • コンピュータは万能ではなく、どんなに大量の計算も一瞬で出 来るとは限らない • しかし、アルゴリズムを少し変えただけで、2 週間かかる問題 が 0.01 秒で解けることもある 157

Slide 158

Slide 158 text

5 162 講演のまとめ 158 • 今回は 3 つの問題を紹介したが… • 他にも、実社会でアルゴリズムが活用できる例はとても多い 順位表の作成 [ソート] 乗換案内 カーナビ

Slide 159

Slide 159 text

5 162 一方、アルゴリズムを学ぶためには数学も必要 • たとえば、計算回数に指数・対数などの知識が出てくることもある※ • しかしそれ以上に、問題を解くためには数学的思考力も重要 講演のまとめ 159 ※これは氷山の一角にすぎません。

Slide 160

Slide 160 text

No content

Slide 161

Slide 161 text

5 162 「アルゴリズム×数学」の紹介 161 本 書 の 特 徴 1 2 3 4 アルゴリズムだけでなく、数学的知識・数学的考察も紹介 フルカラーでわかりやすい 全 200 問、充実の演習問題 自動採点システムも提供されている 興味のある方はぜひお読みください

Slide 162

Slide 162 text

5 162 参考文献 162 1. 米田優峻:『「アルゴリズム×数学」が基礎からしっかり身につく本』(技術評論社、2021) 2. 大槻兼資:『問題解決力を鍛える!アルゴリズムとデータ構造』(講談社、2020) 3. 渡部有隆:『プログラミングコンテスト攻略のためのアルゴリズムとデータ構造』(マイナビ出版、2015) 4. 米田寛峻:『アルゴリズムの世界地図』(Qiita 記事) 5. テレ東 BIZ:『必須教養!?プログラミング “金メダリスト” に学ぶ「アルゴリズム」』(YouTube 動画) 6. 日本科学未来館:『フカシギの数え方』(YouTube 動画) 7. いらすとやの画像を利用