Se ha denunciado esta presentación.
Utilizamos tu perfil de LinkedIn y tus datos de actividad para personalizar los anuncios y mostrarte publicidad más relevante. Puedes cambiar tus preferencias de publicidad en cualquier momento.

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

17.767 visualizaciones

Publicado el

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

Publicado en: Tecnología
  • Sé el primero en comentar

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

  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. お疲れ様でした

×