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)

Ba868bdf0f1f87ac2c5b0a6b33119e35?s=128

E869120

April 14, 2022
Tweet

More Decks by E869120

Other Decks in Programming

Transcript

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

  2. 1 162 自己紹介 2 米田 優峻(よねだ まさたか) • 2002年生まれ •

    2021年東京大学入学 主な実績 • AtCoder には E869120 として参加(レッドコーダー) • 国際情報オリンピック‘18,‘19,‘20 金メダル • 著書「アルゴリズム×数学」6 刷 2 万部突破
  3. 1 162 目次 3 アルゴリズムとは アルゴリズムの例 A:迷路の探索 アルゴリズムの例 B:プログラムのデバッグ アルゴリズムの例

    C:映画鑑賞の最適化 講演のまとめ 第 1 章 第 2 章 第 3 章 第 4 章 第 5 章 ・・・・・・・・・・・・・・ ・・・・・・・ ・・ ・・・・ ・・・・・・・・・・・・・・・・ 5 20 80 127 155
  4. 1 162 • 本スライドは入門的なものであるため、すべてのアルゴリズムを網羅して いないことに注意してください。 • スライドは全部で 160 枚ありますが、アニメーションと図が多いので、枚 数相応よりは速く読めると思います。

    諸注意 4 なお、本スライドは、2022/4/14 に開催されたイベント『Forkwell Library #1 - 「アルゴリズム×数学」が 基礎からしっかり身につく本』の基調講演を加筆修正したものです。 実際の講演(35分)を見たい方は、以下のリンクからご覧ください。 → https://www.youtube.com/watch?v=2OrsR37_GdM
  5. 5 第 1 章 アルゴリズムとは

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

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

    までの整数を すべて足す問題を考えよう 具体例
  8. 1 162 アルゴリズムとは 8 1 + 2 = 3 …

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

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

    + 3 = 6 6 + 4 = 10 … 1 + 2 の値 … 1 + 2 + 3 の値 … 1 + 2 + 3 + 4 の値 単純な方法として、1 つずつ足していくと答えがわかる
  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 つずつ足していくと答えがわかる
  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
  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 回の計算が必要
  14. 1 162 アルゴリズムとは 14 そこで、合計が 101 となるペアを作ると… 1 100 2

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

    99 3 98 50 51 … ← 合計 101 ← 合計 101 ← 合計 101 ← 合計 101 全部で 50 個のペア 101 × 50 = 5050 すべて足すと
  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 回よりは格段に高速です。
  17. 1 162 • 計算の手順のことをアルゴリズムという 第 1 章のまとめ 17

  18. 1 162 • 計算の手順のことをアルゴリズムという • アルゴリズムを変えてみると… 第 1 章のまとめ 18

    2 週間 0.01 秒 かかる問題 になることも ※ 本スライド 5 章の最後で紹介します。 今日一番伝えたいこと
  19. 1 162 第 2 章以降について 19 2~4 章では、アルゴリズムが使える身近な問題を 3 つ紹介します

    第 2 章 第 3 章 第 4 章 迷路の問題 プログラムのデバッグ 映画鑑賞の最適化
  20. 第 2 章 事例 A:迷路の問題

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

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

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

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

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

    これも良さそう? 移動方法は全部で 216 通り 全部調べるのはつらい!
  26. 2 162 事例 A:迷路の問題 26 そこで、アルゴリズムを 変えてみよう

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

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

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

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

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

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

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

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

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

    6 3 4 7 8 6 5 4 8 7 8 手順 2 07 のとなりに 08 を書く
  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 を書く
  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 を書く
  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 を書く
  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 を書く
  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 を書く
  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 を書く
  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 を書く
  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 を書く
  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 を書く
  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 を書く
  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 を書く
  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 を書く
  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 を書く
  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 を書く
  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 を書く
  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 を書く
  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 手!
  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 手で 移動できる?
  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 ゴールから出発し 数字が減る方向に移動
  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
  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
  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
  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
  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
  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
  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
  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
  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
  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
  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
  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
  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
  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
  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
  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
  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
  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
  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
  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
  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
  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
  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
  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 最短経路が求められた!
  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 ゴールから数字が 減る方向に移動
  80. 第 3 章 事例 B:プログラムのデバッグ

  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
  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 行目の場合…
  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 正常に 動作する 正常に 動作しない
  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 正常に 動作する 正常に 動作しない 問題 「〇〇行目は正常に動作するか?」という確認をできる だけ少ない回数行うことで、バグの位置を当てよう
  85. 3 162 単純なアルゴリズム 85 普通にやるとどうなるか?

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

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

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

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

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

    バグは 1 行目 No Yes 2 行目は 動作するか? バグは 2 行目 No Yes 3 行目は 動作するか? バグは 3 行目 No Yes … このままでは最悪 100 回の 確認が必要
  91. 3 162 アルゴリズムを変える:例 1 91 「いまあり得る範囲の中央」を確認し続けると効率的

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

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

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

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

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

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

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

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

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

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

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

    行目 1~50 行目 50 行目は 動くか? No 1~25 行目 No 13 行目は 動くか? 25 行目は 動くか? 14~25 Yes 19 行目は 動くか? 20~25 Yes
  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 行目は 動くか?
  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
  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 行目は 動くか?
  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
  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 回で当てられた! これは偶然か?
  108. 3 162 アルゴリズムを変える:例 2 108 「いまあり得る範囲の中央」を確認し続けると効率的 バグが 77 行目にある場合は…?

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

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

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

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

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

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

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

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

    1~100 行目 50 行目は 動くか? 51~100 行目 75 行目は 動くか? 88 行目は 動くか? 76~100 行目 Yes Yes 76~88 No 82 行目は 動くか? 76~82 No
  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 行目は 動くか?
  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
  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
  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
  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 行目は 動くか?
  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行目
  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 回で当てられた! 最悪何回で当てられるか?
  124. 3 162 最悪何回で当てられるか? 124 1 回の確認で範囲が半減するので… プログラムが 100 行の場合 最悪

    7 回 100 50 25 13 7 4 2 1
  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
  126. 3 162 第 3 章のまとめ 126 • 現在あり得る範囲の中央を確認することで、プログラムのバグの 位置が効率的に見つけられる •

    このようなアルゴリズムは二分探索法と呼ばれる
  127. 第 4 章 事例 C:映画鑑賞の最適化

  128. 4 162 事例 C:映画鑑賞問題 • 左図のような番組表が与えられる • 同時に 2 つの映画を見ることはで

    きない • 最大で何個の映画を見れるか? 128 0 5 10 映画 A 映画 B 映画 C 映画 D 映画 E
  129. 4 162 事例 C:映画鑑賞問題 129 0 5 10 映画 A

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

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

  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
  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 個だと 何通り調べる必要がある?
  134. 4 162 事例 C:映画鑑賞問題 134 簡単のため まずは映画 1 個から考えよう

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

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

    映画1 選ぶ 選ば ない 映画1 映画2 映画1 映画2 選ぶ 選ば ない 映画1 映画2 映画1 映画2 選ぶ 選ば ない
  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
  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
  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
  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兆通り
  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億通り/秒※ パソコン 計算速度 ※プログラムの実装やパソコンの性能などにより、数千万~十億程度まで変わる可能性があります。
  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億通り/秒※ ※プログラムの実装やパソコンの性能などにより、数千万~十億程度まで変わる可能性があります。
  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億通り/秒※ ※プログラムの実装やパソコンの性能などにより、数千万~十億程度まで変わる可能性があります。
  144. 144 2 週間も待てない。一体どうすれば良い?

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

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

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

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

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

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

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

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

    A 映画 B 映画 C 映画 D 映画 E 現在時刻 終了が 一番早い 選んだ 映画の数 3 3 つの映画を 選ぶことができた
  153. 4 162 事例 C:映画鑑賞問題 153 • これを使うと、映画が 50 個でも 0.01

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

    秒以内で答えがわかる※ • 時間をかければ手計算でも求められる 2 週間 vs. 0.01 秒 ※コンピュータによる計算の場合
  155. 第 5 章 講演のまとめ

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

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

    0.01 秒で解けることもある 157
  158. 5 162 講演のまとめ 158 • 今回は 3 つの問題を紹介したが… • 他にも、実社会でアルゴリズムが活用できる例はとても多い

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

  160. None
  161. 5 162 「アルゴリズム×数学」の紹介 161 本 書 の 特 徴 1

    2 3 4 アルゴリズムだけでなく、数学的知識・数学的考察も紹介 フルカラーでわかりやすい 全 200 問、充実の演習問題 自動採点システムも提供されている 興味のある方はぜひお読みください
  162. 5 162 参考文献 162 1. 米田優峻:『「アルゴリズム×数学」が基礎からしっかり身につく本』(技術評論社、2021) 2. 大槻兼資:『問題解決力を鍛える!アルゴリズムとデータ構造』(講談社、2020) 3. 渡部有隆:『プログラミングコンテスト攻略のためのアルゴリズムとデータ構造』(マイナビ出版、2015)

    4. 米田寛峻:『アルゴリズムの世界地図』(Qiita 記事) 5. テレ東 BIZ:『必須教養!?プログラミング “金メダリスト” に学ぶ「アルゴリズム」』(YouTube 動画) 6. 日本科学未来館:『フカシギの数え方』(YouTube 動画) 7. いらすとやの画像を利用