Upgrade to Pro — share decks privately, control downloads, hide ads and more …

30 分でわかる!アルゴリズムの基本

30 分でわかる!アルゴリズムの基本

このスライドは、2022/4/14 に実施されたイベント『問題解決のための「アルゴリズム × 数学」- Forkwell Library #1』の基調講演を加筆修正したものです。実際の講演(35 分)を見たい方は、以下の URL をご覧ください。
https://www.youtube.com/watch?v=2OrsR37_GdM

【目次】
第一章 アルゴリズムとは(pp. 1~19)
第二章 アルゴリズムの例 A:迷路の探索(pp. 20~79)
第三章 アルゴリズムの例 B:プログラムのデバッグ(pp. 80~126)
第四章 アルゴリズムの例 C:映画鑑賞の最適化(pp. 127~154)
第五章 講演のまとめ(pp. 155~162)

E869120

April 14, 2022
Tweet

More Decks by E869120

Other Decks in Programming

Transcript

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  11. 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 つずつ足していくと答えがわかる

    View full-size slide

  12. 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

    View full-size slide

  13. 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
    回の計算が必要

    View full-size slide

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

    ← 合計 101
    ← 合計 101
    ← 合計 101
    ← 合計 101

    View full-size slide

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

    ← 合計 101
    ← 合計 101
    ← 合計 101
    ← 合計 101
    全部で
    50 個のペア
    101 × 50 = 5050
    すべて足すと

    View full-size slide

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

    ← 合計 101
    ← 合計 101
    ← 合計 101
    ← 合計 101
    全部で
    50 個のペア
    101 × 50 = 5050
    すべて足すと
    たった
    1
    回の計算で良い
    ※ どこから 101 や 50 が出てきたかの計算を含めても数回であり、99 回よりは格段に高速です。

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  36. 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 を書く

    View full-size slide

  37. 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 を書く

    View full-size slide

  38. 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 を書く

    View full-size slide

  39. 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 を書く

    View full-size slide

  40. 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 を書く

    View full-size slide

  41. 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 を書く

    View full-size slide

  42. 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 を書く

    View full-size slide

  43. 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 を書く

    View full-size slide

  44. 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 を書く

    View full-size slide

  45. 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 を書く

    View full-size slide

  46. 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 を書く

    View full-size slide

  47. 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 を書く

    View full-size slide

  48. 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 を書く

    View full-size slide

  49. 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 を書く

    View full-size slide

  50. 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 を書く

    View full-size slide

  51. 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 を書く

    View full-size slide

  52. 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 手!

    View full-size slide

  53. 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 手で
    移動できる?

    View full-size slide

  54. 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
    ゴールから出発し
    数字が減る方向に移動

    View full-size slide

  55. 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

    View full-size slide

  56. 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

    View full-size slide

  57. 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

    View full-size slide

  58. 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

    View full-size slide

  59. 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

    View full-size slide

  60. 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

    View full-size slide

  61. 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

    View full-size slide

  62. 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

    View full-size slide

  63. 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

    View full-size slide

  64. 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

    View full-size slide

  65. 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

    View full-size slide

  66. 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

    View full-size slide

  67. 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

    View full-size slide

  68. 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

    View full-size slide

  69. 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

    View full-size slide

  70. 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

    View full-size slide

  71. 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

    View full-size slide

  72. 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

    View full-size slide

  73. 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

    View full-size slide

  74. 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

    View full-size slide

  75. 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

    View full-size slide

  76. 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

    View full-size slide

  77. 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

    View full-size slide

  78. 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
    最短経路が求められた!

    View full-size slide

  79. 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
    ゴールから数字が
    減る方向に移動

    View full-size slide

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

    View full-size slide

  81. 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

    View full-size slide

  82. 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 行目の場合…

    View full-size slide

  83. 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
    正常に
    動作する
    正常に
    動作しない

    View full-size slide

  84. 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
    正常に
    動作する
    正常に
    動作しない
    問題
    「〇〇行目は正常に動作するか?」という確認をできる
    だけ少ない回数行うことで、バグの位置を当てよう

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    このままでは最悪 100 回の
    確認が必要

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  104. 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

    View full-size slide

  105. 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 行目は
    動くか?

    View full-size slide

  106. 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

    View full-size slide

  107. 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 回で当てられた!
    これは偶然か?

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  118. 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

    View full-size slide

  119. 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

    View full-size slide

  120. 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

    View full-size slide

  121. 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 行目は
    動くか?

    View full-size slide

  122. 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行目

    View full-size slide

  123. 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 回で当てられた!
    最悪何回で当てられるか?

    View full-size slide

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

    View full-size slide

  125. 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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  132. 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

    View full-size slide

  133. 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 個だと
    何通り調べる必要がある?

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  137. 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

    View full-size slide

  138. 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

    View full-size slide

  139. 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

    View full-size slide

  140. 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兆通り

    View full-size slide

  141. 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億通り/秒※
    パソコン
    計算速度
    ※プログラムの実装やパソコンの性能などにより、数千万~十億程度まで変わる可能性があります。

    View full-size slide

  142. 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億通り/秒※
    ※プログラムの実装やパソコンの性能などにより、数千万~十億程度まで変わる可能性があります。

    View full-size slide

  143. 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億通り/秒※
    ※プログラムの実装やパソコンの性能などにより、数千万~十億程度まで変わる可能性があります。

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    ※コンピュータによる計算の場合

    View full-size slide

  155. 第 5 章
    講演のまとめ

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  160. 5
    162
    「アルゴリズム×数学」の紹介
    161





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

    View full-size slide

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

    View full-size slide