Diese Präsentation wurde erfolgreich gemeldet.
Wir verwenden Ihre LinkedIn Profilangaben und Informationen zu Ihren Aktivitäten, um Anzeigen zu personalisieren und Ihnen relevantere Inhalte anzuzeigen. Sie können Ihre Anzeigeneinstellungen jederzeit ändern.

競技プログラミング頻出アルゴリズム攻略

17.378 Aufrufe

Veröffentlicht am

主に大学生の競技プログラミング初心者に向けて、最低限知っておくべきアルゴリズムを紹介しております。

Veröffentlicht in: Technologie
  • Als Erste(r) kommentieren

競技プログラミング頻出アルゴリズム攻略

  1. 1. 競技プログラミング 頻出アルゴリズム攻略 2016.01.13 Author: Moneto (MATYLA-PG, @Moneto_Tk) 10
  2. 2. whoami •@Moneto_Tk •JOI出場経験あり •只の凡人老兵
  3. 3. whoami • • • • •
  4. 4. whoami • • • •
  5. 5. whoami • • • • •
  6. 6. 競技プログラミングで 必要な知識
  7. 7. アルゴリズムの知識 著名な問題やその定石 「変な」テクニック
  8. 8. 「変な」テクニック http://ichyo.jp/posts/2014-12-15-advent-calender/ • • •
  9. 9. アルゴリズムの知識 著名な問題やその定石
  10. 10. 競技プログラミングで 必要なアルゴリズムの知識 • • • •
  11. 11. 競技プログラミングで 必要なアルゴリズムの知識 • • •
  12. 12. 今日の内容は その中でも基本的なもの
  13. 13. DP Dynamic Programming 動的計画法
  14. 14. BFS Breadth First Search 幅優先探索
  15. 15. DFS Depth First Search 深さ優先探索
  16. 16. 取り扱う基準 • • •
  17. 17. DP Dynamic Programming 動的計画法
  18. 18. DP • • • •
  19. 19. DP • • • •
  20. 20. DP • • • • •
  21. 21. DP • • • • •
  22. 22. DP • • • • •
  23. 23. Tips intの値を一瞬でも超えることが 分かった時点で 絶対にlong longを使おう 実力者でも気をつけるべきミス
  24. 24. DP • • • • •
  25. 25. Fib(n) • public static Int64 fib_rec(int n) { if (n == 0) return 0; else if (n == 1) return 1; return fib_rec(n - 1) + fib_rec(n - 2); }
  26. 26. Fib(n) • public static Int64 fib_rec_m(int n) { if (n == 0) return 0; else if (n == 1) return 1; else if (table[n] != 0) return table[n]; else return table[n] = fib_rec_m(n - 1) + fib_rec_m(n - 2); }
  27. 27. Fib(n) • public static Int64 fib_dp(int n) { int[] dp = new int[n]; dp[0] = 1; dp[1] = 1; for (int i = 0; i < n - 2; i++) { dp[i + 2] = dp[i] + dp[i + 1]; } return dp[n - 1]; } • • •
  28. 28. Fib(n) 0 1 • •
  29. 29. Fib(n) 0 1 1 • •
  30. 30. Fib(n) 0 1 1 2 • • •
  31. 31. Fib(n) 0 1 1 2 3 • • •
  32. 32. Fib(n) 0 1 1 2 3 5 8 13 21 34 • • •
  33. 33. BFS Breadth First Search 幅優先探索
  34. 34. BFS • • • •
  35. 35. BFS 1
  36. 36. BFS 1 子ノードが見つかったら キューに格納
  37. 37. BFS 1 2 3 子ノードが見つかったら キューに格納
  38. 38. BFS 1 2 3 4 5 6 7
  39. 39. Best-First • • • •
  40. 40. Best-First • • • • •
  41. 41. RTS http://neetpia.sakura.ne.jp/works/GensouSenryakutan/1.jpg
  42. 42. RTS http://neetpia.sakura.ne.jp/works/GensouSenryakutan/1.jpg 行き先を指定すると 最適な移動経路を計算し その通りに移動してくれる 考慮するべき条件 高低差(崖は迂回する) 建造物、森林、河川など
  43. 43. DFS Depth First Search 深さ優先探索
  44. 44. DFS • • • •
  45. 45. DFS 1
  46. 46. DFS 1 2 分岐が見つかったら スタックに格納
  47. 47. DFS 1 2 3 分岐が見つかったら スタックに格納
  48. 48. DFS 1 2 3 4 分岐が見つかったら スタックに格納
  49. 49. DFS 1 2 3 4 5 スタックの処理順番 「先入れ後出し」
  50. 50. DFS 1 2 7 3 6 4 5
  51. 51. 根底の考え方は どれも簡単
  52. 52. 手頃な練習 • • • • •
  53. 53. Tips • • •
  54. 54. 手頃な練習 • • • • •
  55. 55. 手頃な練習 • • • • •
  56. 56. Tips • • •
  57. 57. ICPCの国内強豪は JOI出身者が多い
  58. 58. 「JOI出身者」のレベルが いかに高いか
  59. 59. ちょっと • •
  60. 60. もうちょっと • • •
  61. 61. 更にもうちょっと • • • •
  62. 62. というわけで • • • •
  63. 63. お疲れ様でした

×