ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 알고리즘 ch13 NP-complete Problems
    학교 수업/알고리즘 2020. 6. 16. 17:56

    Optimization problem : 최적의 답를 찾는 문제     ex) shortest path

    Decision problem : 답이 yes or no 인 문제


    Class P 

    - 어떤 decision 문제에 대해 polynomial time에 그 문제에 대한 해결법을 찾아낼 수 있다면, 그 문제는 클래스 P에 속한다.


       즉, 다항시간내에 풀 수 있는 decision 문제들의 class를 class P라고 한다.


    다항시간(polynomial time) : O(n^k)


    다항시간내에 풀 수 있는 문제들은 tractable하다고 한다.

    문제의 어떤 알고리즘이 다항시간내에 풀린다면 efficient 알고리즘이라고 한다.


    Class NP

    - 어떤 문제가 non-deterministic polynomial time algorithm이 존재한다면 그 문제는 클래스 NP에 속한다.


       즉, 어떤 certificate가 다항시간에 문제를 verify할 수 있다면 그 문제는 클래스 NP에 속한다. 


       상관관계를 생각해보면.

       polynomial time algorithm이 존재하는 문제들 즉 class P에 속하는 문제들은 모두 class NP에 속한다.

      

       => P ⊂ NP


      NP example

      Problem : 그래프 내에 가중치가 K이하인 MST가 존재하는가?

      

      Verification Algorithm:

      1. 하나의 Certificate를 사용한다. (vertex가 n개라고 할때)

      2. certificate가 spanning tree를 형성하는지 확인(포함된 vertex가 n개, edge가 n-1개 인지)  // O(n)

      3. certificate의 가중치의 합이 K를 넘지않는지 확인 // O(m)


      Analysis : 증명과정에서 O(n+m)시간 걸림 즉, 이 문제에 대한 certificate 증명이 다항시간에 수행됨


      따라서 이 문제는 Class NP에 속함.


    Class NP-hard

    - NP class에 있는 모든 문제가 어떤 문제(Q)로 reducible할 수 있다면 그 문제(Q)는 클래스 NP-hard에 속한다.


      즉, 문제 Q를 풀면 NP class의 모든 문제를 풀 수 있다. 

      문제 Q는 NP class의 모든 문제들보다 쉽지 않다. => 어렵거나 같다.


      (예를 들어) 

      A라는 문제는 n개의 원소를 정렬하는 문제라 하고 

      B라는 문제는 n개의 원소에서 가장 큰 값을 찾는 문제라고 하자

      

      A문제를 푸는 알고리즘으로 B를 풀 수 있다. 이럴 때 문제 B를 문제 Areduction(환원) 가능하다고 한다.

      따라서 문제 A는 문제 B보다 어렵다.


    Class NP-complete

    - NP-hard에도 포함되고 NP에도 포함되는 문제는 클래스 NP-complete에 속한다.


    - NP-complete 문제들

     


     1. Circuit-sat : circuit analogue of SAT.

     2. sat : boolean sanctification problem이라고도 한다.

         어떠한 변수들로 이루어진 논리식이 주어졌을 때, 그 논리식이 참이 되는 변수값이 존재하는지를 찾는 문제

    [예제] (a+b+d)(¬a+¬c)(¬b+c+¬d+e) 논리식이 있을 때 이 논리식이 1이 나오게하는 a,b,c,,,값이 있느냐


      +는 or연산이고, ()는 and연산, ¬는 not연산이다.

      literal은 a,b,..같은 것들을 뜻하고 clause는 () 하나를 뜻한다.


    예를 들어 3-SAT는 한 절에 들어가는 리터럴 개수를 3개 이하로 제한하는 문제이다. 

    reduction from Circuit-sat


     3. Vertex-cover주어진 그래프 G=(V,E) 에서 많아야 K개의 정점을 사용해서  모든 edge를 cover할 수 있는가

           reduction from 3sat


     4. Set-cover주어진 집합 S = {1, 2, 3, …, n}에 대해서 S의 부분집합들이 주어질 때, 

     이 부분 집합들 중에서 합집합하여 S와 같게 되는 부분 집합들을 집합 커버라고 한다. 

           집합 커버 문제는 가장 적은 수의 부분 집합으로 이루어진 집합 커버를 찾는 문제

     reduction from Vertex-cover = set-cover를 풀면 vertex-cover 풀수있음


    5. Subset-sum 주어진 정수 집합 S의 원소의 합이 K가 되는 S의 부분 집합을 찾는 문제이다.

    [예제] S = {20, 30, 40, 80, 90}이고, 합이 200이 되는 부분 집합을 찾고자 할 때,

    [해] {30, 80, 90}의 원소 합이 200이다.

        Vertex-cover는 Subset-cover로 reduction

        즉, Subset-cover이 더 어려운 문제


    6. 0/1 Knapsack배낭의 용량이 C이고, n개의 물건의 각각의 무게와 가치가 

     일 때 (단 i = 1, 2, …, n), 

    배낭에 담을 수 있는 물건의 최대 가치를 찾는 문제

    Subset-sum은 knapsack으로 reduction


    7. Hamiltonian-cycle주어진 그래프 G=(V,E)에서 임의의 한 점에서 출발하여 

     모든 다른 점들을 1번씩만 방문하고, 다시 시작점으로 돌아오는 경로를 찾는 문제이다. 

          Vertex-cover는 Hamiltonian cycle로 reduction


    8. Traveling salesperson Tour주어진 가중치 그래프 G=(V,E)에서 임의의 한 점에서 출발하여 

    다른 모든 점들을 1번씩만 방문하고, 다시 시작점으로 돌아오는 경로 중에서 

    최단 경로를 찾는 문제

    Hamiltonian-cycle은 TSP로 reduction

    (선분의 가중치를 모두 동일하게 하여 여행자 문제의 해를 찾았을 때, 그 해가 바로 해밀토니안 사이클 문제의 해)



    NP-complete 문제들 중에 단 하나라도 polynomial time(다항 시간)안에 풀어낼 수 있다면 P=NP임을 증명할 수 있다.

     

      왜? 모든 NP문제는 NP-complete 문제보다는 쉬움. NP complete를 푼다 -> NP모든 문제 푼다.

           근데 NP complete를 다항시간에 푼다? 곧 P = NP


    - NP complete 문제를 만나면 해결하려는 algorithm을 개발하는 것보다 approximation algorithm을 개발하는게 나을 것이다.



    P = NP이냐 P != NP이냐는 아직까지도 증명 x

    P = NP라고 증명이 된다면, 현재 NP라고 일컬어지는 모든 문제들이(길찾기, 방문 판매 알고리즘 등) 전부 P문제로서 풀릴 수 있다는 의미이다. 

    즉, 방문 판매 알고리즘 같이 시간이 오래걸리는 방법으로 풀 수 밖에 없다고 생각되는 것도 방법만 잘 찾는다면 다항 시간 내에 해결할 수 있다는 것이다. 


    대로 생각해서 P != NP가 증명이 된다면, 수많은 NP 문제들이 P 문제로 환원될 수 없다고 증명됐으니 더 쉬운 방법(P 문제로 환원할 방법)을 찾으려고 애쓸 필요가 없다. 

    즉 이건 어려운 문제니까 쉬운 문제로 만드려고 해봤자 소용 없다는 걸 알게 되는 것이다.

    '학교 수업 > 알고리즘' 카테고리의 다른 글

    알고리즘 ch11 String match  (0) 2020.06.16
    알고리즘 ch10 Dynamic Programming  (0) 2020.06.15
    알고리즘 ch8 Greedy algotithm  (0) 2020.06.15
    알고리즘 ch6 (2) Red-black tree  (0) 2020.06.14
    알고리즘 ch 6 array doubling  (0) 2020.06.14

    댓글

Designed by Tistory.