강의 출처


강의 목표

  • 이 과정은 자료구조와 알고리즘의 심화편 이기 때문에, 기본편 학습이 필요.
  • 즉 , <비선형 자료구조와 알고리즘> 을 배울 예정

    🚨선형 자료구조와 알고리즘 보다 복잡하고 어렵다 ( 배열, 연결리스트, 스택, 큐, 재귀함수에 대해 알고 있어야 함 )
    그래서 금주 주말에 추가로 해당 기본 개념들 공부 할 예정 😁




P-NP란?

  • 알고리즘을 공부하다 보면, P-NP라는 개념에 대해 접하게 될 것.
  • 이번강의에서는 "P문제"를 다룰 예정, P문제가 아닌 경우 어떤 문제에 포함되는지 추가 설명함.

빅 오 (Big-O)

  • 알고리즘의 성능을 평가하는데, "빅 오 " 표기법을 씀
  • 예시) 배열의 숫자를 정렬하는 알고리즘의 종류 👉🏻 버블정렬,선택정렬,삽입정렬,병합정렬,퀵정렬

    어떤 문제를 해결할 때 사용되는 방법 = 알고리즘 은 여러가지가 있음


P-NP

  • 반면 P-NP문제는 어떤 문제가 주어졌을때
  • 쉬운 문제인지 아닌지, 해결이 가능한지 아닌지 판단하는 척도가 된다.
  • 이 P-NP문제를 판단하기 전에 "결정 문제"를 익혀야 한다.

결정 문제 ( Decision Problem )

  • 어떤 문제에 대해 (YES/NO) 로 대답할 수 있는 문제.
  • 예 ) 10%2 == 0 인가? 👉🏻 YES/NO로 대답 가능함 👉🏻 결정문제

최적화 문제 ( Optimization Problem)

  • 어떤 상황이 주어지고, 거기서 최적의 해답을 찾으라는 문제.
  • 예 ) 이미지 처럼, A경로에서 시작해서 E지점까지 가장 짧은 경로 구해야함.
  • YES/NO 대답 못하고, 여러 경우의수를 계산하여 최적의 해를 구하는 문제를 "최적화문제"라고 함.

그러나 대부분의 최적화 문제는 "결정문제"로 바꿀 수 있음!

  • 예를들면, A지점에서 E지점까지 경로 중 10보다 작은 경로가 존재하는가?
    - 최적화 문제에서 특수 조건을 추가하여 , 결정문제로 바꾼 상태.
    - 답변은 YES/NO대답 가능함.
  • 이제 P-NP문제에 대해 알아보자.


P문제

  • 결정론적 튜링머신으로 다항시간에 문제해결이 가능한 문제

1️⃣ 결정론적 튜링 머신

  • 현재상태 👉🏻 다음상태로 이동 될때, 다음 상태가 유일하게 결정되는 머신.
  • 다음의 상태가 결정되니깐, 문제를 차근차근 해결해 나가기 때문에, 일방향으로 해결함.

if-else 문은 결정론적 튜링머신 방식?

if문이 참 👉🏻 if문이 수행
if문이 거짓 👉🏻 else문이 수행되는 유일한 상태가 된다.

컴퓨터 자체가 결정론적 튜링머신!


2️⃣다항시간 ( Poynomial time )

  • 문제를 해결하는 시간 👉🏻 다항식으로 표현할 수 있는 것
x² - 2x + 3
  • 다항식이란? : x 값에 대해 여러 항이 존재하는 식을 말한다.
  • 이 다항식을 빅오 표기법으로 표현하면?
 O(x²)
  • 만약, 어떤 알고리즘의 성능이 O(x²) 이라면? 다항시간내에 답을 구할 수 있는 알고리즘 이라는 것.
  • 차수가 들어나더라도 , 이 알고리즘은 다항 시간내에 해결할 수 있는 알고리즘.
  • 상수시간인 O(1)로그시간인 O(logn) 은 모두 다항시간 보다 더 작으므로, 다항시간내에 답을 구할 수 있음.

    즉, 상수시간, 로그시간, 다항시간이 P문제! 우리가 대부분 접하는 것들이 P문제임.



정렬 (Sorting)

- 대표적인 P문제

  • 정렬 문제를 가장 쉽게 해결하는 알고리즘은 " 버블 정렬 알고리즘 "

버블 정렬 알고리즘 동작방법

  • 만약 [3,4,1,2] 배열을 👉🏻 [1,2,3,4] 오른차순으로 정렬 하려면
  1. 첫번째 원소인 (3) 과 두번째 원소(4)를 비교해서 "3은 4보다 큰가?" 라는 결정문제가 주어짐
  2. YES/NO대답 👉🏻 NO라서 아무런 반응 없다
  3. 두번째 원소 (4)와 세번째 원소(1)를 비교하여 "4는 1보다 큰가?"
  4. YES대답 👉🏻 그러면 서로 자리 바꾸기 👉🏻 [3,1,4,2]
  5. 세번째 원소(4)와 네번째 원소(2) 비교하여 " 4는 2보다 큰가? "
  6. YES대답 👉🏻 자리 바꾸기 👉🏻 [3,1,2,4]
  • 다시 돌아와서 3이 자기 자리 찾는거 반복해서 오름차순으로 [1,2,3,4] 로 자리 배치하게 정렬들어감.

  • 현재 배열의 길이는 4개라서,
  • 4의자리가 찾아가기 위해 3번 숫자를 비교했음
  • 3의 자리가 본인 자리 찾아가기 까지 2번 비교
  • 2의 자리는 1번 비교함
  • 이걸 식으로 표현하면, 등차수열의 합공식으로 n(n-1)/2로 표현
  • 이걸 빅 오 표현법으로 표현하면 O(n²) 즉 다항시간 , 즉 P문제로 구분된다.

"A는B보다 큰가?" 라는 결정문제를 반복 👉🏻 결정론적 튜링 머신으로 다항 시간 내에 정렬을 완료함.



NP문제란?

  • 결정 문제가 주어졌을 때, 비 결정론적 튜링 머신을 사용해 다항 시간 내에 답을 구할 수 있는 문제.

✳️비결정론적 튜링 머신

  • 현재상태 👉🏻 다음상태 이동할 때, 다음 상태의 갯수가 여러개인 머신.
  • 현실 세계에서 볼 수 없음 ( 상상으로 있다고 "가정" 함 )
  • 이해하기 어려우니, 동일한 결정문제에 결정론적 튜링머신 VS 비 결정론적 튜링머신이 해결하는 방법의 차이점에 대해 알아보자.

NP문제에 대한 결정론적 튜링 머신 vs 비 결정론 튜링 머신

결정론적 튜링 머신( NP문제 해결 못함 )

: NP문제 해결에 있어서, 결정론적 튜링 머신은 지수 시간으로 답을 구해야하고, 운의 요소가 강함
- 경우의 수 가 엄청 많음. 해당 경로를 하나하나씩 직접 들어가서 결정문제에 대한 YES/NO답을 줄 수 있음.
- 결과론적으로 그러나 "힌트"가 주어질 때 다항시간내에 정답인지 아닌지 확인하는 것 가능함.


그러나, 답을 빨리 못찾아도 확인(=검증) 하는건 빠르다.
- 예) 이 경로A는 금고가 존재하는지?아닌지? 👉🏻 YES/NO대답 빠르게 가능

  • 모든 P문제는 NP문제이기도 하다.

    모든 P문제를 비 결정론적 튜링 머신을 사용해, 다항 시간 내에 답을 구할 수 있음.



NP-hard 문제

  • 어떤 NP문제들이 있을 때, 이 모든 NP문제들을 다항 시간 내에 어떤 문제 A로 환원시킬 수 있다면, 그 문제 A 를 NP-hard문제라고 부름.
  • 예시 NP문제는 아래 이미지 참조

  • 문제 B,C,D를 확인해보면 문제A만 해결하면 자연스레 B,C,D도 해결이 가능함.
  • 이런식으로 NP문제들(B,C,D)이 문제 A로 환원 될 수 있다고 얘기함.
  • 환원된 A문제를 "NP-hard" 문제 라고 부른다.



NP-complete 문제

  • NP-hard 문제에도 포함 되면서 NP문제에도 포함되는 문제.
  • 두개의 차이점은 뭘까?
  • NP-complete 는 문제 해결이 가능하다고 판별이 ⭕
  • NP-hard 는 문제 해결이 가능한지,아닌지 판별이 ❌



마무리 하며

P vs NP

  • P : 결정론적 튜링 머신으로 다항 시간내에 해결 ⭕ 쉬운문제
  • NP : 비결정론적 튜링 머신으로 다항 시간내에 해결 ⭕ P보다 어려운 문제
    - ✳️힌트가 주어지면 (YES/NO를) 결정론적 튜링 머신으로 다항 시간내에 확인

NP-hard vs NP-complete

  • hard : 어떤 NP문제들이 있을 때, 이 모든 NP문제들을 다항 시간 내 👉🏻 어떤 문제A로 환원시킬수 있으면 , 이 문제A를 hard문제라고 부름
    - 그런데 이 hard문제를 해결할수 있는지 밝히지 못한 가장 어려운 문제
  • comlete : NP-hard문제 이면서 NP인 문제
    - 풀수 있는 문제 중에서 가장 어려운 문제




🤔P - NP 문제의 핵심 질문 "P = NP인가?"

  • 다항 시간(Polynomial time)에 해결 가능한 문제(P) & 다항 시간에 검증 가능한 문제(NP)
    본질적으로 같은 클래스인지, 아니면 서로 다른 클래스인지

✳️만약 P = NP라면, NP 문제(예: 암호 해독, 최적화 문제)를 다항 시간에 해결할 수 있는 알고리즘이 존재한다는 뜻.

✳️반대로 P ≠ NP 라면, NP 문제 중 일부는 다항 시간에 해결 불가능하다는 뜻으로, 현재 대부분의 학자들이 이쪽을 지지하고, 우리가 방금까지 배워왔던 내용인 것.

profile
소금빵을 좋아하는 프론트앤드 0년차 개발자 취준생

0개의 댓글