알고리즘 증명하는 법

2024. 9. 11. 12:25·컴퓨터과학/알고리즘
728x90

알고리즘은 어떻게 증명해야할까?

나도 모르겠다..

같이 한 번 알아보도록 하자.


증명을 위해서는 명제에서 시작된다.

명제.

명제는 참, 거짓을 판단할 수 있는 문장이나 식을 뜻한다.

조건 P와 Q가 있을 때, "P이면 Q이다"가 명제이다. 기호로는 P->Q로 나타낸다.

 

그런데 이떄, P이면이라는 것은 거짓인 상태이다.

예를들어, P가 5시 전이면, Q가 공부를 한다. 라고 가정해보자.

 

if, 5시가 되지 않았으면 P는 참이다. 이때 공부를 하면 Q도 참이므로 P->Q도 참이다.

하지만 공부를 하지 않았다면 Q는 거짓이고 P->Q도 거짓이다.

 

그런데 5시가 지났다고 가정해보자. 그러면 P는 거짓이다. 이때 Q, 공부를 한다면 참인데, P->Q는 뭘까?

P 시간🕐 Q 공부🏫 P->Q 🕐 🏫
참 참 참
참 거짓 거짓
거짓 참 공부함.
거짓 거짓 거짓.

즉, Q가 무엇이든, P가 거짓이면 참이 될 수가 없다.


알고리즘 증명법

명제를 알았으니, 귀납법을 알고 증명해보자.

증명은 다음과 같은 과정을 따른다.

1. Base Setp: P(1)이 참이라고 가정한다.

2. Inductive Setp: P(n-1) -> P(n)이 참이면,

3. Result: P(n)은 모든 자연수 n에 대해서 참이다.

1번과 2번을 각각 증명해서 합치면 Result가 된다.

 

Example.

P(n) = n > 0 일때

1. Base: P(1)은 1 > 0이므로 True

2. Inductive: P(n-1) -> P(n)은 ( n - 1 > 0) -> ( n > 0 )이다.

proof:

     1) a > 0 이고 b > 0 이면, a + b > 0 이다.

     2) n - 1 + 1 = n

     3) a에 n - 1 을, b에 1을 대입하면 2번에 따라 n - 1 + 1 = n이므로, n > 0 True

 

n(n+1)/2를 증명하시오.

1. Base: n=1일때 참임을 보인다.

1(1+1)/2 = 1 => 참

2. Inductive Step

     1) Hypo: n = k - 1 일때 참이라고 가정한다.

      k-1(k)/2 = 참       2) proof: n=k일때 참임을 증명.

     k(k+1)/n은 k에서 1을 더한 것과 같으므로 참이다.

수열에서 k-1의 다음 순서는 k 이기 때문.

따라서 k-1이 참이라고 가정하면 k는 참이다.

728x90

'컴퓨터과학 > 알고리즘' 카테고리의 다른 글

병합정렬(Merge Sort) 알고리즘  (0) 2024.09.07
선택정렬(Selection Sort) 알고리즘  (0) 2024.09.07
버블정렬(Bubble Sort) 알고리즘  (2) 2024.09.07
삽입 정렬(Insertion Sort) 알고리즘  (2) 2024.09.03
알고리즘 뭔지 간단하게 설명해줄게요  (0) 2024.07.29
'컴퓨터과학/알고리즘' 카테고리의 다른 글
  • 병합정렬(Merge Sort) 알고리즘
  • 선택정렬(Selection Sort) 알고리즘
  • 버블정렬(Bubble Sort) 알고리즘
  • 삽입 정렬(Insertion Sort) 알고리즘
튼튼발자
튼튼발자
프론트엔드 개발자입니다. 헬스를 가끔해서인지 몸이 튼튼한거 같습니다. 그래서 튼튼한 개발자 => 튼튼발자입니다. 프론트엔드 및 관련 개발 내용 블로그 글로 정리해서 올려둡니다.
    250x250
  • 튼튼발자
    튼튼발자
    튼튼발자
  • 전체
    오늘
    어제
    • 분류 전체보기 (192)
      • 튼튼발자의 끄적끄적 (10)
      • 웹개발 (94)
        • HTML (5)
        • CSS (2)
        • JavaScript (40)
        • TypeScript (5)
        • REACT (22)
        • Next.js (13)
        • GIt (7)
      • 기타 (3)
        • 일상 (3)
      • 프로젝트 (27)
        • Componique: UI 컴포넌트 라이브러리 (18)
        • GitHub Profile Viewer (8)
        • 잇핏 (1)
      • 프론트엔드 개발자로 취업준비 (1)
        • 기술 면접 (7)
        • 코딩 테스트 준비하기 (0)
        • 자기소개서&지원서&이력서 (0)
      • 컴퓨터과학 (12)
        • 운영체제 (6)
        • 알고리즘 (6)
      • 전공 공부 (37)
        • AI(인공지능) (2)
        • 컴퓨터네트워크 (19)
        • 네트워크프로그래밍 (3)
        • SW소프트웨어응용설계 (7)
        • 클라우드컴퓨팅 (3)
        • 웹서비스프로그래밍 (3)
      • PT (0)
      • 취준일기 (0)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    github
    프론트엔드
    react
    componique
    자바스크립트
    JavaScript
    프로그래밍
    트랜스포트계층
    리액트
    tailwind
    상태관리
    데이터전송
    JS
    웹개발
    네트워크
    ui컴포넌트
    코딩
    NextJs
    TCP
    프론트엔드개발
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.0
튼튼발자
알고리즘 증명하는 법
상단으로

티스토리툴바