알고리즘 소개 (2)
알고리즘 설계
알고리즘 설계 기법
주어진 문제, 속성, 조건 등의 매우 다양
- 일반적이고 범용의 기법은 미존재
대표적인 설계 기법
- 분할정복 방법
- 동적 프로그래밍 방법
- 욕심쟁이 방법
알고리즘 분석
알고리즘 분석
정확성 분석
- 유효한 입력, 유한 시간 -> 정확한 결과 생성?
- 다양한 수학적 기법을 사용해서 이론적 증명이 필요
- 유효한 입력, 유한 시간 -> 정확한 결과 생성?
효율성 분석
- 알고리즘 수행에 필요한 컴퓨터 자원의 양을 측정
- 메모리 양 -> 공간 복잡도
- 정적 공간 + 동적 공간
- 수행시간 -> 시간 복잡도
시간 복잡도
알고리즘을 프로그램으로 구현해서 이를 컴퓨터에서 실행시켜 실제 수행 시간을 측정
- 이런 방법은 일반적이지 못하다!
- 컴퓨터 속도, 사용한 프로그래밍 언어, 프로그램 작성 방법, 컴파일러의 효율성 등에 종속적
- 이런 방법은 일반적이지 못하다!
알고리즘이 수행하는 기본적인 연산의 횟수의 합
- 시간 복잡도에 영향을 미치는 요인
- 입력으로 제공되는 데이터 크기(입력 크기)
- 입력 데이터의 상태
- 시간 복잡도에 영향을 미치는 요인
입력 크기 n이 증가하면 수행 시간도 증가
- 단순히 단위 연산의 개수가 아닌 입력 크기의 함수로 표현
입력 데이터의 상태에 종속적
- 평균 수행 시간
- 최선 수행 시간
- 최악 수행 시간
점근 성능
점근 성능
입력 크기 n이 무한대로 커짐에 따라 결정되는 성능
수행 시간의 다항식 함수에서 최고차항만을 계수 없이 취해서 표현
- 수행 시간의 어림값, 수행 시간의 증가 추세 파악이 용이 -> 알고리즘의 우열의 표현
점근성능의 표기법
정의 1 Big-oh 점근적 상한
- 어떤 양의 상수 c와 n0이 존재하여 모든 n>= n0에 대하여 f(n) <= c*g(n) 이면 f(n)= O(g(n)) 이다.
정의 2 Big-omega 점근적 하한
- 어떤 양의 상수 c와 n0이 존재하여 모든 n>= n0에 대하여 f(n) >= c*g(n) 이면 f(n)= Ω(g(n)) 이다.
정의 3 Big-theta 점근적 상하한
- 어떤 양의 상수 c1, c2와 n0이 존재하여 모든 n>= n0에 대하여 c1*g(n) <= f(n) <= c2*g(n) 이면 f(n)= Θ(g(n)) 이다.
주요 O-표기 간의 연산 시간의 크기 관계
O(1) < O(log n) < O(n) < O(n log n) < O(n²) < O(2ⁿ) < O(n!) < O(nⁿ)
알고리즘의 시간 복잡도 구하기
알고리즘의 시간 복잡도를 구하려면
- 알고리즘의 수행 시간 f(n)을 구한 후
- f(n) = o(g(n))을 만족하는 최소 차수의 함수 g(n)을 찾음
실용적인 접근 방법
- 알고리즘에 나타난 루프의 반복횟수를 조사하여 시간 복잡도로 취함
- g(n)은 최고 차수에 의존
순환 알고리즘의 성능
순환 알고리즘의 성능
- 순환
- 알고리즘의 수행 과정에서 자기 자신의 알고리즘을 다시 수행하는 형태
- T(n) = T(n/2) + o(1), T(1)= C1