33
알고리즘의 효율성 분석 명지대학교 컴퓨터공학과 충기 교수 : 강의자료는 알기 쉬운 알고리즘(양성봉 )’ 교재에서 제공한 것을 수정한 것임.

알고리즘의 효율성 분석elearning.kocw.net/KOCW/document/2015/myongji/leechungki/... · 2016-09-09 · 알고리즘의 효율성 분석 명지대학교 컴퓨터공학과

  • Upload
    others

  • View
    0

  • Download
    0

Embed Size (px)

Citation preview

Page 1: 알고리즘의 효율성 분석elearning.kocw.net/KOCW/document/2015/myongji/leechungki/... · 2016-09-09 · 알고리즘의 효율성 분석 명지대학교 컴퓨터공학과

알고리즘의 효율성 분석

명지대학교

컴퓨터공학과

이 충기 교수

주: 본 강의자료는 ‘알기 쉬운 알고리즘(양성봉 저)’ 교재에서 제공한 것을 수정한 것임.

Page 2: 알고리즘의 효율성 분석elearning.kocw.net/KOCW/document/2015/myongji/leechungki/... · 2016-09-09 · 알고리즘의 효율성 분석 명지대학교 컴퓨터공학과

지난 주 강의 내용

•수학적 귀납법

•기본 공식 증명

•수열과 점화식

•선형 점화식 해 구하기

Page 3: 알고리즘의 효율성 분석elearning.kocw.net/KOCW/document/2015/myongji/leechungki/... · 2016-09-09 · 알고리즘의 효율성 분석 명지대학교 컴퓨터공학과

이번 주 강의 내용

•알고리즘의 효율성

•시간 복잡도

•알고리즘 복잡도 분석 방법

•복잡도의 점근적 표기

• O(Big-Oh) 표기

• Ω(Big-Omega)-표기

• Θ(Theta)-표기

Page 4: 알고리즘의 효율성 분석elearning.kocw.net/KOCW/document/2015/myongji/leechungki/... · 2016-09-09 · 알고리즘의 효율성 분석 명지대학교 컴퓨터공학과

알고리즘의 세 가지 요소

•효율적 알고리즘이 되기 위한 세 가지 요소

• ____의 효율성

• ____의 효율성

• ____의 효율성

•프로그래머들이 프로그램을 개발할 때 항상

고민하는 내용

Page 5: 알고리즘의 효율성 분석elearning.kocw.net/KOCW/document/2015/myongji/leechungki/... · 2016-09-09 · 알고리즘의 효율성 분석 명지대학교 컴퓨터공학과

시간의 효율성

•모든 알고리즘에서 가장 중요하게 생각하는 요소

•주어진 조건에서 문제를 해결하기 위해

가능한 한 빠른 시간 안에 가장 효율적으로 해결책을 찾는 것이 진정한 알고리즘

•예: 게임 소프트웨어

Page 6: 알고리즘의 효율성 분석elearning.kocw.net/KOCW/document/2015/myongji/leechungki/... · 2016-09-09 · 알고리즘의 효율성 분석 명지대학교 컴퓨터공학과

•알고리즘에 따라 작성된 프로그램이 컴퓨터 메모리를 얼마나 사용하느냐?

•대부분의 운영체제(OS)는 하나의 메모리를 여러 개의 프로그램이 공유해서

사용

•메모리를 효율적으로 관리하고 사용하는

것이 더욱 중요

공간의 효율성

Page 7: 알고리즘의 효율성 분석elearning.kocw.net/KOCW/document/2015/myongji/leechungki/... · 2016-09-09 · 알고리즘의 효율성 분석 명지대학교 컴퓨터공학과

코드의 효율성

• 개발자 입장과 컴퓨터 입장에서 보는 관점이 다름

• (개발자 입장) ____________ 코드가 좋은 코드

• 개발자가 시간이 지나서 다시 코드를 수정해야 하는 경우 쉽게 수정할 수 있어야 한다.

• 다른 개발자가 코드를 볼 때에도 쉽게 이해할 수 있어야 한다.

• 프로그램의 소스 코드

• 다른 사람이 보고 이해하기 쉽도록 작성

• 이해하기가 쉽지 않은 코드는 주석(comment)을 이용하여 작성

• 변수나 함수를 작성할 때, 의미가 모호한 이름을 사용하지 말고 다른 사람이 볼 때 쉽게 이해할 수 있는 이름으로 작성

• (컴퓨터 입장) 컴파일러와 하드웨어에 좀 더 최적화된 코드

Page 8: 알고리즘의 효율성 분석elearning.kocw.net/KOCW/document/2015/myongji/leechungki/... · 2016-09-09 · 알고리즘의 효율성 분석 명지대학교 컴퓨터공학과

알고리즘의 효율성 표현

•알고리즘의 효율성은 알고리즘의 _______

또는 알고리즘이 수행하는 동안 사용되는

__________의 크기로 나타낼 수 있다.

•이들을 각각 시간복잡도(time complexity),

공간복잡도(space complexity)라고 한다.

•일반적으로 알고리즘들을 비교할 때에는 시간복잡도가 주로 사용된다.

Page 9: 알고리즘의 효율성 분석elearning.kocw.net/KOCW/document/2015/myongji/leechungki/... · 2016-09-09 · 알고리즘의 효율성 분석 명지대학교 컴퓨터공학과

시간복잡도

•시간복잡도는 알고리즘이 수행하는 _______

에 따라서 _______이 몇 번 수행되는 지를 함수로 표현

•표현 척도

• 단위 연산(basic operation)

• 비교(comparison), 배정(assignment)

• 입력 크기(input size)

• 배열의 크기, 리스트(list)의 길이, 행렬에서 행과 열의 크기, 트리(tree)에서 정점(node)와 연결선(edge)의 수

Page 10: 알고리즘의 효율성 분석elearning.kocw.net/KOCW/document/2015/myongji/leechungki/... · 2016-09-09 · 알고리즘의 효율성 분석 명지대학교 컴퓨터공학과

예: 시간복잡도 분석

•10장의 숫자 카드들 중에서 최대

숫자 찾는 문제를 순차탐색으로 찾는 경우에 숫자 비교가 단위 연산이고, 총 비교 횟수는 __이다.

•n장의 카드가 있다면, ____번의 비교 수행: 시간복잡도 = n-1

Page 11: 알고리즘의 효율성 분석elearning.kocw.net/KOCW/document/2015/myongji/leechungki/... · 2016-09-09 · 알고리즘의 효율성 분석 명지대학교 컴퓨터공학과

알고리즘 복잡도 분석 방법 (1)

• _____ 경우 분석(Every-case analysis)

• 입력크기에만 종속

• 입력 값과는 무관하게 결과 값은 항상 일정

• _____ 경우 분석(Worst-case analysis)

• 입력크기와 입력 값 모두에 종속

• 단위연산이 수행되는 횟수가 최대인 경우 선택

• _____ 경우 분석(Best-case analysis)

• 입력크기와 입력 값 모두에 종속

• 단위연산이 수행되는 횟수가 최소인 경우 선택

Page 12: 알고리즘의 효율성 분석elearning.kocw.net/KOCW/document/2015/myongji/leechungki/... · 2016-09-09 · 알고리즘의 효율성 분석 명지대학교 컴퓨터공학과

알고리즘 복잡도 분석 방법 (2)

•____ 경우 분석(Average-case analysis)

•입력크기와 입력 값 모두에 종속

•모든 입력에 대해서 단위연산이 수행되는

기대치(평균)

•각 입력에 대해서 확률 할당 가능

•일반적으로 최악의 경우보다 계산이 복잡

Page 13: 알고리즘의 효율성 분석elearning.kocw.net/KOCW/document/2015/myongji/leechungki/... · 2016-09-09 · 알고리즘의 효율성 분석 명지대학교 컴퓨터공학과

최선 경우: 지하철역 도착 후 바로 승차

학교 통학 시간

소요 시간 = _____________________

Page 14: 알고리즘의 효율성 분석elearning.kocw.net/KOCW/document/2015/myongji/leechungki/... · 2016-09-09 · 알고리즘의 효율성 분석 명지대학교 컴퓨터공학과

최악 경우: 지하철 도착 후 놓치다

학교 통학 시간

소요 시간 = ______________________

Page 15: 알고리즘의 효율성 분석elearning.kocw.net/KOCW/document/2015/myongji/leechungki/... · 2016-09-09 · 알고리즘의 효율성 분석 명지대학교 컴퓨터공학과

평균 경우: 최악과 최선의 중간

학교 통학 시간

소요 시간 = ______________________

Page 16: 알고리즘의 효율성 분석elearning.kocw.net/KOCW/document/2015/myongji/leechungki/... · 2016-09-09 · 알고리즘의 효율성 분석 명지대학교 컴퓨터공학과

복잡도의 점근적 표기 •

Page 17: 알고리즘의 효율성 분석elearning.kocw.net/KOCW/document/2015/myongji/leechungki/... · 2016-09-09 · 알고리즘의 효율성 분석 명지대학교 컴퓨터공학과

복잡도의 점근적 표기

• 복잡도를 단순한 함수로 표현하기 위해 점근적 표기 (Asymptotic Notation)를 사용한다.

• 입력 크기 n이 _____________복잡도를 간단히

표현하기 위해 사용하는 표기법은 다음과 같다:

• O(Big-Oh) -표기

• Ω(Big-Omega) -표기

• Θ(Theta) -표기

Page 18: 알고리즘의 효율성 분석elearning.kocw.net/KOCW/document/2015/myongji/leechungki/... · 2016-09-09 · 알고리즘의 효율성 분석 명지대학교 컴퓨터공학과

O(Big-Oh)-표기

• O-표기는 복잡도의 ________

을 나타낸다.

• 복잡도가 f(n) = 2n2 - 8n + 3 이라면, f(n)의 O-표기는 O(n2)이다. 먼저 f(n)의 단순화된 표현은 n2이다.

• 단순화된 함수 n2에 임의의 상수 c를 곱한 cn2이 n이 증가함에 따라 f(n)의 상한이 된다. 단,

c>0.

Page 19: 알고리즘의 효율성 분석elearning.kocw.net/KOCW/document/2015/myongji/leechungki/... · 2016-09-09 · 알고리즘의 효율성 분석 명지대학교 컴퓨터공학과

• 복잡도 f(n) = O(g(n))을 그래프로 나타내면 아래와 같다.

• n이 증가함에 따라 O(g(n))이 점근적 상한이라는 것 (즉, cg(n)이 n0보다 큰 모든 정수 n에 대해서 항상 f(n)보다 크거나 같다는 것)을 보여 준다. 단, c는 0보다 큰 상수이다.

O(Big-Oh)-표기

Page 20: 알고리즘의 효율성 분석elearning.kocw.net/KOCW/document/2015/myongji/leechungki/... · 2016-09-09 · 알고리즘의 효율성 분석 명지대학교 컴퓨터공학과

Ω(Big-Omega)-표기

•복잡도의 ___________을 의미한다.

• f(n) = 2n2 - 8n + 3의 Ω-표기는 Ω(n2)이다.

• f(n) = Ω(n2)은 “n이 증가함에 따라 2n2 - 8n

+ 3이 cn2보다 작을 수 없다”라는 의미이다.

이때 상수 c = 1로 놓으면 된다.

• O-표기 때와 마찬가지로, Ω-표기도 복잡도

다항식의 최고차항만 계수 없이 취하면 된다.

Page 21: 알고리즘의 효율성 분석elearning.kocw.net/KOCW/document/2015/myongji/leechungki/... · 2016-09-09 · 알고리즘의 효율성 분석 명지대학교 컴퓨터공학과

• 복잡도 f(n) = Ω(g(n))을 그래프로 나타내면 아래와 같다.

• 즉, n이 증가함에 따라 Ω(g(n))이 점근적 하한이라는 것 (즉, cg(n)이 n0보다 큰 모든 정수 n에 대해서 항상 f(n)보다 작거나 같다는 것)을 보여준다. 단, c는 0보다 큰 상수이다.

Ω(Big-Omega)-표기

Page 22: 알고리즘의 효율성 분석elearning.kocw.net/KOCW/document/2015/myongji/leechungki/... · 2016-09-09 · 알고리즘의 효율성 분석 명지대학교 컴퓨터공학과

Θ(Theta)-표기

• O-표기와 Ω-표기가 같은 경우에 사용한다.

• f(n) = 2n2 + 10n + 3 = O(n2) = Ω(n2)이므로,

f(n) = Θ(n2)이다.

• “f(n)은 n이 증가함에 따라 n2과 동일한 증가율을 가진다”라는 의미이다.

• f(n) ≠ Θ(n), f(n) ≠ Θ(nlogn), f(n) ≠ Θ(n3),

f(n) ≠ Θ(2n)이다.

Page 23: 알고리즘의 효율성 분석elearning.kocw.net/KOCW/document/2015/myongji/leechungki/... · 2016-09-09 · 알고리즘의 효율성 분석 명지대학교 컴퓨터공학과

• 복잡도 f(n) = Θ(g(n))을 그래프로 나타내면 아래와 같다.

• 즉, n0보다 큰 모든 정수 n에 대해서 f(n)은 c1 g(n) 보다 크거나 같고 c2 g(n) 보다 작거나 같다는 것을 보여준다. 단, c1 와 c2 는 0보다 큰 상수이다.

Θ(Theta)-표기

Page 24: 알고리즘의 효율성 분석elearning.kocw.net/KOCW/document/2015/myongji/leechungki/... · 2016-09-09 · 알고리즘의 효율성 분석 명지대학교 컴퓨터공학과

자주 사용하는 O-표기

• O(1) 상수 시간 (Constant time)

• O(logn) 로그(대수) 시간 (Logarithmic time)

• O(n) 선형 시간 (Linear time)

• O(n logn) 로그 선형 시간 (Log-linear time)

• O(n2) 제곱 시간 (Quadratic time)

• O(n3) 세제곱 시간 (Cubic time)

• O(2n) 지수 시간 (Exponential time)

Page 25: 알고리즘의 효율성 분석elearning.kocw.net/KOCW/document/2015/myongji/leechungki/... · 2016-09-09 · 알고리즘의 효율성 분석 명지대학교 컴퓨터공학과

O-표기의 포함 관계

2n2+10n+3

n3+n2-10n+3

2n

5n+4

14, 1000

3logn+6

O(2n)

O(n3),

O(n2)

O(logn)

O(1)

O(n)

O(nk)

Page 26: 알고리즘의 효율성 분석elearning.kocw.net/KOCW/document/2015/myongji/leechungki/... · 2016-09-09 · 알고리즘의 효율성 분석 명지대학교 컴퓨터공학과

복잡도 함수의 증가율

Page 27: 알고리즘의 효율성 분석elearning.kocw.net/KOCW/document/2015/myongji/leechungki/... · 2016-09-09 · 알고리즘의 효율성 분석 명지대학교 컴퓨터공학과

왜 효율적인 알고리즘이 필요한가? • 10억 개의 숫자를 정렬하는데 PC에서 O(n2) 알고리즘은

300여년이 걸리는 반면에 O(n logn) 알고리즘은 5분 만에

정렬한다.

O(n2) 1,000 1백만 10억

PC < 1초 2시간 300년

슈퍼컴 < 1초 1초 1주일

O(nlogn) 1,000 1백만 10억

PC < 1초 <1초 5분

슈퍼컴 < 1초 <1초 <1초

Page 28: 알고리즘의 효율성 분석elearning.kocw.net/KOCW/document/2015/myongji/leechungki/... · 2016-09-09 · 알고리즘의 효율성 분석 명지대학교 컴퓨터공학과

바보 같은 예

Page 29: 알고리즘의 효율성 분석elearning.kocw.net/KOCW/document/2015/myongji/leechungki/... · 2016-09-09 · 알고리즘의 효율성 분석 명지대학교 컴퓨터공학과

좋은 예

Page 30: 알고리즘의 효율성 분석elearning.kocw.net/KOCW/document/2015/myongji/leechungki/... · 2016-09-09 · 알고리즘의 효율성 분석 명지대학교 컴퓨터공학과

알고리즘

Page 31: 알고리즘의 효율성 분석elearning.kocw.net/KOCW/document/2015/myongji/leechungki/... · 2016-09-09 · 알고리즘의 효율성 분석 명지대학교 컴퓨터공학과

빠른 알고리즘

Page 32: 알고리즘의 효율성 분석elearning.kocw.net/KOCW/document/2015/myongji/leechungki/... · 2016-09-09 · 알고리즘의 효율성 분석 명지대학교 컴퓨터공학과

• 효율적인 알고리즘은 슈퍼컴퓨터보다 더 큰 가치가 있다.

• 값 비싼 하드웨어의 기술 개발보다 효율적인 알고리즘 개발이 훨씬 더 경제적이다.

결론

Page 33: 알고리즘의 효율성 분석elearning.kocw.net/KOCW/document/2015/myongji/leechungki/... · 2016-09-09 · 알고리즘의 효율성 분석 명지대학교 컴퓨터공학과

요약 • 알고리즘의 효율성은 주로 시간복잡도 (Time Complexity)

로 나타낼 수 있다.

• 시간복잡도는 알고리즘이 수행하는 기본적인 연산 횟수를

입력 크기에 대한 함수로 표현한다.

• 알고리즘의 복잡도 표현 방법:

• 최악 경우 분석 (worst case analysis)

• 평균 경우 분석 (average case analysis)

• 최선 경우 분석 (best case analysis)

• 점근적 표기 (Asymptotic Notation): 입력 크기 n이 무한대로 커질 때의 복잡도를 간단히 표현하기 위해 사용하는 표기법