P(deterministic polynomial time)는 다항시간 내에 답을 구할 수 있는 문제들의 집합.


NP는 다항 시간 내에 답을 구할 수 있는 비결정적(Nondeterministric) 알고리즘이 존재하는 decision problem의 집합.

(NP : Nondeterministric Polynomially bounded)


NP-hard는 모든 NP의 문제들이 polynomial time 내에 문제 H로 환산될 수 있는 문제 H들의 집합.(reducible)


NP-complete는 NP에 속하면서, 모든 NP에 대해 polynomial-time내에 reducible한 문제들의 집합.

NP-complete에 해당하는 문제는 그들 중 단 한 문제에 대한 효율적인 알고리즘이 존재한다는 것이 증명되면 다른 모든 문제에 대한 효율적 알고리즘도 존재하게 된다.

어떤 문제가 NP-complete임을 아는 것은 상당히 중요한게, 어떤 문제가 NP-complete임을 모르고 그 문제에 대한 최적해를 구하려고 하면 별 성과가 없을 것이기 때문.

반면 어떤 문제가 NP-complete임을 보일 수 있으면 어느 정도 좋은 성능을 보여주는 쓸만한 알고리즘을 개발하는 데 시간을 투자할 수 있기 때문이다. 

유명한 NP-complete 문제로는 "순회 판매원 문제"가 있다.


* NP-hard는 적어도 NP만큼은 어렵다.

* 환산(reduction) : 보통 "A->B로 환산 가능하면 B는 적어도 A만큼 어렵다"를 보이는데 사용된다.




NP-hard이면서 NP가 아닌 예 : 정지문제

프로그램을 설명한 것과 처음 입력값이 주어졌을 때, 이 프로그램에 입력값을 넣고 실행한다면 이 프로그램이 계산을 끝내고 멈출지 아니면 영원히 계속 계산할지를 판정하는 일반적인 알고리즘이 존재하는가?

"~을 판정하라"이지만 판정이 불가능하다. 


'Algorithm > Theory' 카테고리의 다른 글

피보나치 수  (0) 2018.04.20
Mergesort  (0) 2018.04.17
Quicksort  (0) 2018.04.08
Primality test  (0) 2017.11.19
재귀, recursion  (0) 2017.05.31