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

トヨタ自動車プログラミングコンテスト2023#6(AtCoder Heuristic Contest 026)至高のアルゴリズム解説

bowwowforeach
January 27, 2024
770

トヨタ自動車プログラミングコンテスト2023#6(AtCoder Heuristic Contest 026)至高のアルゴリズム解説

「TOYOTA AHC 至高のアルゴリズム解説会」で発表に使用したスライドです。
https://atcoder.jp/contests/TOYOTA_AHCSupremeAlgorithmExplanatoryMeeting

gifアニメ部分は静止画になっています。内容にそれほど影響はないのでそのままにしています。

bowwowforeach

January 27, 2024
Tweet

Transcript

  1. 山を空にする 20 13 16 9 17 19 5 4 7

    2 1 15 10 3 12 6 11 8 18 14 基本的には降順を作るように動かす ソート対象 15
  2. 山を空にする 20 13 16 9 17 19 5 4 7

    2 1 15 10 3 12 6 11 8 18 14 ソート対象 19
  3. 山を空にする 20 13 16 9 17 19 5 4 7

    2 1 15 10 3 12 6 11 8 18 14 ソート対象 Cost 3 20
  4. 山を空にする 20 13 16 9 17 19 5 4 7

    2 1 15 10 3 12 6 11 8 18 14 ソート対象 Cost 6 21
  5. 山を空にする 20 13 16 9 17 19 5 4 7

    2 1 15 10 3 12 6 11 8 18 14 ソート対象 空 Cost 8 22
  6. 山に戻す 20 13 16 9 17 19 5 4 7

    2 1 15 10 3 12 6 11 8 18 14 ソート対象 空 大きい箱から戻していく Cost 8 23
  7. 山に戻す 20 13 16 9 17 19 5 4 7

    2 1 15 10 3 12 6 11 8 18 14 ソート対象 ソート対象に元々なかった箱も巻き込んだほうが良い 1回の移動で済むので Cost 10 24
  8. 山に戻す 20 13 16 9 17 19 5 4 7

    2 1 15 10 3 12 6 11 8 18 14 ソート対象 Cost 12 25
  9. 山に戻す 20 13 16 9 17 19 5 4 7

    2 1 15 10 3 12 6 11 8 18 14 ソート対象 Cost 14 26
  10. 山に戻す 20 13 16 9 17 19 5 4 7

    2 1 15 10 3 12 6 11 8 18 14 ソート対象 Cost 16 27
  11. 山に戻す 20 13 16 9 17 19 5 4 7

    2 1 15 10 3 12 6 11 8 18 14 ソート対象 Cost 18 28
  12. 山に戻す 20 13 16 9 17 19 5 4 7

    2 1 15 10 3 12 6 11 8 18 14 ソート対象 Cost 20 29
  13. 山に戻す 20 13 16 9 17 19 5 4 7

    2 1 15 10 3 12 6 11 8 18 14 ソート対象 Cost 22 30
  14. 山に戻す 20 13 16 9 17 19 5 4 7

    2 1 15 10 3 12 6 11 8 18 14 ソート対象 Cost 24 31
  15. 山に戻す 20 13 16 9 17 19 5 4 7

    2 1 15 10 3 12 6 11 8 18 14 ソート対象 Cost 26 32
  16. 山に戻す 20 13 16 9 17 19 5 4 7

    2 1 15 10 3 12 6 11 8 18 14 ソート対象 これ以上戻せない 1つの山のソート完了 他の山も同様にソートする Cost 28 33
  17. 昇順にする 20 13 16 9 17 19 5 4 7

    2 1 15 10 3 12 6 11 8 18 14 ソート対象 Cost 0 13,16は昇順だが 差が小さい時は まとめたほうが良い 置き場所も差が小さいなら昇順が良い 35
  18. 昇順にする 20 13 16 9 17 19 5 4 7

    2 1 15 10 3 12 6 11 8 18 14 ソート対象 Cost 5 ここも昇順に置く 36
  19. 昇順にする 20 13 16 9 17 19 5 4 7

    2 1 15 10 3 12 6 11 8 18 14 ソート対象 Cost 7 37
  20. 昇順にする 20 13 16 9 17 19 5 4 7

    2 1 15 10 3 12 6 11 8 18 14 ソート対象 Cost 9 2個まとめて 38
  21. 昇順にする 20 13 16 9 17 19 5 4 7

    2 1 15 10 3 12 6 11 8 18 14 ソート対象 Cost 12 2個まとめて 39
  22. 昇順にする 20 13 16 9 17 19 5 4 7

    2 1 15 10 3 12 6 11 8 18 14 ソート対象 Cost 15 2個まとめて 40
  23. 昇順にする 20 13 16 9 17 19 5 4 7

    2 1 15 10 3 12 6 11 8 18 14 ソート対象 Cost 18 41
  24. 昇順にする 20 13 16 9 17 19 5 4 7

    2 1 15 10 3 12 6 11 8 18 14 ソート対象 Cost 20 42
  25. 昇順にする 20 13 16 9 17 19 5 4 7

    2 1 15 10 3 12 6 11 8 18 14 ソート対象 Cost 22 43
  26. 昇順にする 20 13 16 9 17 19 5 4 7

    2 1 15 10 3 12 6 11 8 18 14 ソート対象 Cost 24 ソート完了 44
  27. 比較 20 13 16 9 17 19 5 4 7

    2 1 15 10 3 12 6 11 8 18 14 Cost 28 20 13 16 9 17 19 5 4 7 2 1 15 10 3 12 6 11 8 18 14 Cost 24 降順 昇順にする 45
  28. 差が大きいのも昇順にする 20 13 16 9 17 19 5 4 7

    2 1 15 10 3 12 6 11 8 18 14 ソート対象 Cost 0 9,17は昇順で 差が大きいが まとめてみる 46
  29. 差が大きいのも昇順にする 20 13 16 9 17 19 5 4 7

    2 1 15 10 3 12 6 11 8 18 14 ソート対象 Cost 6 47
  30. 差が大きいのも昇順にする 20 13 16 9 17 19 5 4 7

    2 1 15 10 3 12 6 11 8 18 14 ソート対象 Cost 8 48 2個まとめて
  31. 差が大きいのも昇順にする 20 13 16 9 17 19 5 4 7

    2 1 15 10 3 12 6 11 8 18 14 ソート対象 Cost 11 49
  32. 差が大きいのも昇順にする 20 13 16 9 17 19 5 4 7

    2 1 15 10 3 12 6 11 8 18 14 ソート対象 Cost 13 50
  33. 差が大きいのも昇順にする 20 13 16 9 17 19 5 4 7

    2 1 15 10 3 12 6 11 8 18 14 ソート対象 Cost 15 51
  34. 差が大きいのも昇順にする 20 13 16 9 17 19 5 4 7

    2 1 15 10 3 12 6 11 8 18 14 ソート対象 Cost 17 52
  35. 差が大きいのも昇順にする 20 13 16 9 17 19 5 4 7

    2 1 15 10 3 12 6 11 8 18 14 ソート対象 Cost 19 ソート完了 53
  36. 差が大きいのも昇順にする 20 13 16 9 17 19 5 4 7

    2 1 15 10 3 12 6 11 8 18 14 ソート対象 Cost 19 ソート完了 54 17が戻せなかった
  37. 比較 20 13 16 9 17 19 5 4 7

    2 1 15 10 3 12 6 11 8 18 14 Cost 19 20 13 16 9 17 19 5 4 7 2 1 15 10 3 12 6 11 8 18 14 Cost 24 昇順にする 差が大きいのも昇順にする 55
  38. 比較 20 13 16 9 17 19 5 4 7

    2 1 15 10 3 12 6 11 8 18 14 Cost 19 20 13 16 9 17 19 5 4 7 2 1 15 10 3 12 6 11 8 18 14 Cost 24 昇順にする 56 この3つをソートするには おそらくコスト5はかかりそう 差が大きいのも昇順にする
  39. 降順と昇順の比較 昇順 ◦ どかすコストは3 ◦ 戻すときは分岐 A) 100と150をまとめて戻す ◦ 戻すコストは3

    ◦ 101~149を巻き込めない B) 100だけ戻す ◦ 戻すコストは2 ◦ 101~149を巻き込める。150を戻せない。 150 100 ソート対象山に100,150が 昇順で置いてあるとき 59
  40. 降順と昇順の比較 昇順 ◦ どかすコストは3 ◦ 戻すときは分岐 A) 100と150をまとめて戻す ◦ 戻すコストは3

    ◦ 101~149を巻き込めない B) 100だけ戻す ◦ 戻すコストは2 ◦ 101~149を巻き込める。150を戻せない。 150 100 ソート対象山に100,150が 昇順で置いてあるとき 60 Aのほうがコスト的に有利だが、 差が大きいと巻き込めない損失が大きくなる その場合はBを選ぶことになる そうすると戻せない箱が残ってしまう
  41. 探索する箇所 山の選択:探索 山を空にする ◦ どこで切るか:探索 ◦ どの山に置くか:貪欲 山に戻す:貪欲 65 ここも探索を試したが

    貪欲のほうがスコアが良かった 分岐が増えすぎても性能が落ちる 探索優先度低いところは貪欲頑張るのが良い
  42. 探索したい 良くある問題設定でもう一度考えてみると Tターンのうちにできるだけスコアを稼いでください ◦ スコアで評価する ⇒ 同じターンならスコア高いほうが良い できるだけ少ないターンで〇〇を達成してください ◦ 進捗度合いで評価する

    ⇒ 同じターンなら進捗進んでる方が良い できるだけ少ないコストで〇〇を達成してください ◦ コストで評価 ◦ 進捗度合いで評価 ⇒ 同じコストなら進捗進んでる方が良い ⇒ 同じターンならコスト少ない方が良く、進捗も進んでるほうが良い 72
  43. chokudaiサーチ ・・・ Cost 0 0% Cost 1 Cost 2 Cost

    3 Cost 4 Cost 5 状態 数字はソート進捗率 優先度付き キュー 74
  44. chokudaiサーチ ・・・ Cost 0 Cost 1 Cost 2 1% 2%

    Cost 3 2% Cost 4 3% Cost 5 4% 2% 3% 5% 4% 79
  45. chokudaiサーチ ・・・ Cost 0 Cost 1 Cost 2 1% Cost

    3 2% Cost 4 4% 3% 2% Cost 5 5% 3% 80
  46. chokudaiサーチ ・・・ Cost 0 Cost 1 Cost 2 1% Cost

    3 Cost 4 4% 3% 2% Cost 5 5% 3% 2% 81
  47. chokudaiサーチ ・・・ Cost 0 Cost 1 Cost 2 1% Cost

    3 Cost 4 4% 3% 2% Cost 5 5% 3% 2% 4% 3% 3% 82
  48. chokudaiサーチ ・・・ Cost 0 Cost 1 Cost 2 1% Cost

    3 Cost 4 4% 3% 2% Cost 5 5% 4% 3% 3% 83
  49. chokudaiサーチ ・・・ Cost 497 90% 90% 90% Cost 498 90%

    90% 90% Cost 499 90% 90% 90% Cost 500 95% 95% 95% Cost 501 95% 95% Cost 502 95% ・・・ 99% 100% ソート完了状態 コスト500の解が見つかった 85
  50. chokudaiサーチ ・・・ Cost 497 90% 90% 90% Cost 498 90%

    90% 90% Cost 499 90% 90% 90% Cost 500 95% 95% 95% Cost 501 95% 95% Cost 502 95% ・・・ 100% コスト500の解が見つかった コスト498以上の状態は見込み無し 見込み無し 86