[μκ³ λ¦¬μ¦ μ 리] - μΈνμ μν λ¬Έμ (Traveling Salesperson Problem, TSP)
π‘μΈνμ μν λ¬Έμ (Traveling Salesman Problem, TSP) λ?
μ΄λ€ λμμμ μΆλ°νμ¬ λ€λ₯Έ λͺ¨λ λμλ€μ λκ³
λ€μ μΆλ°νλ λμλ‘ λμμ€λλ° λλ μ΅μ λΉμ©μ μ°Ύλ λ¬Έμ
λΈλ£¨νΈ ν¬μ€ ν΄κ²°λ°©λ² ( μ’μ λ°©λ² x)
μΈνμ μν λ¬Έμ λ₯Ό λ§μ°νκ² μκ°ν΄λ³΄λ©΄, νΉμ μΆλ° λμλ₯Ό κ°μ ν΄λκ³ λμλ₯Ό μνν΄λ κ²½λ‘μ κΈΈμ΄λ λ€λ₯΄μ§ μμ κ²μ΄λ€. μΆλ° λμλ₯Ό Aλ‘ κ°μ ν΄λκ³ λ€λ₯Έ λμλ€μ μννλ λ°©μμ (n-1)! νμμΌλ‘ κ²½μ°μ μλ₯Ό ꡬν μ μλ€.
νμ§λ§ μ΄ κ²½μ°λ nμ΄ μ»€μ§λ©΄ 컀μ§μλ‘ λ§μ κ²½μ°μ μλ₯Ό λ°μ Έμ£Όμ΄μΌ νκΈ° λλ¬Έμ ν¨μ¨μ μΈ λ°©λ²μΌλ‘ μ¬μ©λμ§ μλλ€.
DP μ μ© λ°©μ (λμκ° 16κ° μ΄νμΌ λ) / μ΅μ μ μ κ·Ό λ°©μ
DP λ©λͺ¨μ μ΄μ = (n-1)!μ λͺ¨λ κ²½λ‘λ₯Ό μ‘°μ¬νμ§ μκ³ μ€λ³΅λ κ²½λ‘λ₯Ό μ κ±°νλ κΈ°λ²
λΉνΈλ§μ€ν¬ = νΉμ λμλ₯Ό λ°©λ¬Έν μνλ₯Ό μ μ₯ν λ μ¬μ©
DP λ©λͺ¨μ μ΄μ κΈ°λ²μ λμΌν νμλ¬Έμ μ λ°λ³΅μ λ§μμ€μΌλ‘μ¨ λ λμ ν¨μ¨μ μ°μ°μ κ°λ₯νκ² ν΄μ€λ€.
(λνμ μΌλ‘λ νΌλ³΄λμΉ μμ΄μ Top-Down λ°©μμ ꡬν λ μ¬μ©)
λΉνΈλ§μ€νΉμ bit μ°μ°μΌλ‘ μλ₯Ό λ€μ΄ 16κ°μ λμλ₯Ό ννν λ μμ λ°©λ²μΌλ‘ νννλ €λ©΄ 2^16κ°μ§μ κ²½μ°λ₯Ό μΌμΌμ΄ λ€ ννν΄μΌνλλ° λΉνΈλ§μ€νΉμΌλ‘λ 16bitμΌλ‘ ννν μ μλ€.
μλ₯Ό λ€μ΄ 16κ°μ λμλ€ μ€ 1λ², 2λ², 6λ² λμλ₯Ό λ°©λ¬Έ νλ€κ³ νλ©΄ 0000 0000 0010 0011 μ΄λ°μμΌλ‘ κ° μ리μ 1λ‘ λ°©λ¬Έ νμλ₯Ό ν΄μ€ μ μλ€.
κ·Έλ¦Όκ³Ό κ°μ΄ 1λ²~5λ² λμλ€κ³Ό μ΄λ κ°λ₯ν κ²½λ‘κ° μλ€κ³ κ°μ ν΄λ³Έλ€.
μΆλ° κ²½λ‘λ₯Ό 1μ΄λΌκ³ μ§μ νμ λ ,
μΌμͺ½ κ·Έλ¦Όμ 1-> 2-> 3-> 5-> 4 μμΌλ‘ μνλ₯Ό νκ³ μ€λ₯Έμͺ½κ·Έλ¦Όμ 1-> 3-> 2-> 5-> 4 μμΌλ‘ μνλ₯Ό νλ€.
μ λ λ°©μμ 5->4 μ κ²½λ‘κ° μ€λ³΅λμ΄ κ΅¬ν΄μ§λ€.
μ΄λ―Έ λ°©λ¬Έν λμλ€κ³Ό νμ¬ μμΉν λμκ° κ°μ κ²½μ°μλ μ΅μ λΉμ©μ΄ μΌμ νλ―λ‘ 5λ² λμμμμ μ΅μλΉμ©μ κ°λ€. λ°λΌμ μ€λ³΅λλ κ²½μ°λ₯Ό λλ² κ΅¬νλ건 ν¨μ¨μ μ΄μ§ μλ€.
μ΄λ΄ λ DP λ©λͺ¨μ μ΄μ κΈ°λ²μ μ¬μ©νμ¬ μ΅μλΉμ©μ μ μ₯ν΄λμ΄ μ€λ³΅νμ¬ κ΅¬νμ§ μλλ‘ νλ€.
μ΅μλΉμ©μ 2μ°¨μ λ°°μ΄λ‘ νννλλ°, μ΅μλΉμ©μ΄ κ°μ 쑰건 μ¦ , νμ μ΄λ―Έ λ°©λ¬Έν λμλ€μ μ§ν©, μ΄μ νμ¬ μλ λμλ²νΈλ₯Ό νμνλ€.
DP[i][j] = μ΄λ―Έ λ°©λ¬Έν λμλ€μ μ§ν©μ΄ i, νμ¬ μλ λμλ₯Ό jλ‘ λμ΄, μμ§ λ°©λ¬Ένμ§ μμ λλ¨Έμ§ λμλ€μ λͺ¨λ λ°©λ¬Έν λ€ μΆλ° λμλ‘ λμμ¬ λ λλ μ΅μ λΉμ©μ ꡬνλ€.
μ΄λ iμ λ²μλ λͺ¨λ κ²½μ°μ μ 0<=i<=2^n , jμ λ²μλ 0<=j<=5μ΄λ€.
μΌμͺ½ κ·Έλ¦Όμ DP λ©λͺ¨μ μ΄μ κΈ°λ²μ νμ©ν΄λ³΄λ©΄ 1->2->3->5->4 μμΌλ‘ λμλ₯Ό μ§λ λ, DP[00001][1], DP[00011][2], DP[00111][3] , DP[10111][5] , DP[11111][4] μμΌλ‘ κ°±μ λλ€.
1->3->2->5->4 μμΌλ‘ λμλ₯Ό μ§λ λλ DP[00001][1], DP[000101][3], DP[00111][2] , DP[10111][5], DP[11111][4] μμΌλ‘ κ°±μ λλλ°, 5λ² λμ°©νμ μ [10111][5]μ κ°(=3)μ΄ μ΄λ―Έ μμΌλ―λ‘ κ·Έ μ΄νλ₯Ό ꡬν νμ μμ΄ ν΄λΉ λ°°μ΄μ κ°μ μ¬μ©νλ©΄ λλ€.
μ΄λ λ― DPλ©λͺ¨μ μ΄μ κΈ°λ²κ³Ό λΉνΈλ§μ€νΉμ μ¬μ©νμ¬ μ΅μ λΉμ©μ ꡬνλ λ°©λ²μ΄ μΈνμ μν λ¬Έμ μ μ΅μ νλ μκ³ λ¦¬μ¦ νμ κΈ°λ²μ΄λ€.
λ°±μ€ μΈνμ μν λ¬Έμ νμ΄λ³΄κΈ° : https://www.acmicpc.net/problem/2098
2098λ²: μΈνμ μν
첫째 μ€μ λμμ μ Nμ΄ μ£Όμ΄μ§λ€. (2 ≤ N ≤ 16) λ€μ Nκ°μ μ€μλ λΉμ© νλ ¬μ΄ μ£Όμ΄μ§λ€. κ° νλ ¬μ μ±λΆμ 1,000,000 μ΄νμ μμ μ μμ΄λ©°, κ° μ μλ κ²½μ°λ 0μ΄ μ£Όμ΄μ§λ€. W[i][j]λ λμ iμμ j
www.acmicpc.net