51
알고리즘 알고리즘(Algorithm) (Algorithm) 알고리즘 알고리즘(Algorithm) (Algorithm) 알고리즘 알고리즘 개요 개요 (효율 효율, , 분석 분석, , 차수 차수) Part 1 ) Part 1 2011 2011년 봄학기 봄학기 강원대학교 강원대학교 컴퓨터과학전공 컴퓨터과학전공 문양세 문양세

알고리즘알고리즘개요개요 효율 분석 차수) Part 1ysmoon/courses/2011_1/alg/03.pdf · 알고리즘(Algorithm) 알고리즘알고리즘개요개요(효율 , 분석,

  • Upload
    others

  • View
    0

  • Download
    0

Embed Size (px)

Citation preview

Page 1: 알고리즘알고리즘개요개요 효율 분석 차수) Part 1ysmoon/courses/2011_1/alg/03.pdf · 알고리즘(Algorithm) 알고리즘알고리즘개요개요(효율 , 분석,

알고리즘알고리즘(Algorithm) (Algorithm) 알고리즘알고리즘(Algorithm) (Algorithm) 알고리즘알고리즘 개요개요 ((효율효율, , 분석분석, , 차수차수) Part 1) Part 1(( ,, ,, ))

20112011년년 봄학기봄학기

강원대학교강원대학교 컴퓨터과학전공컴퓨터과학전공 문양세문양세강원대학교강원대학교 컴퓨터과학전공컴퓨터과학전공 문양세문양세

Page 2: 알고리즘알고리즘개요개요 효율 분석 차수) Part 1ysmoon/courses/2011_1/alg/03.pdf · 알고리즘(Algorithm) 알고리즘알고리즘개요개요(효율 , 분석,

강의강의 내용내용알고리즘: 효율, 분석, 차수 – Part 1

프로그램과 알고리즘

순차검색과 이진검색

피보나찌 수 구하기

알고리즘 분석

차수 (O, , ) – Part 2

Computer Algorithmsby Yang-Sae MoonPage 2

Page 3: 알고리즘알고리즘개요개요 효율 분석 차수) Part 1ysmoon/courses/2011_1/alg/03.pdf · 알고리즘(Algorithm) 알고리즘알고리즘개요개요(효율 , 분석,

프로그램의프로그램의 설계설계 과정과정알고리즘: 효율, 분석, 차수 – Part 1

문제 알고리즘 프로그램만족?설계 분석 예

아니오

재설계

알고리즘은 주어진 문제를 논리적으로 해결하는 과정이다.

분석을 통해 작성한 알고리즘의 정확성을 파악할 수 있고 분석을 통해 작성한 알고리즘의 정확성을 파악할 수 있고, 효율성을 정량적으로 나타낼 수 있다.

(일반적으로) 알고리즘은 프로그래밍 언어에 독립적이다

Computer Algorithmsby Yang-Sae MoonPage 3

(일반적으로) 알고리즘은 프로그래밍 언어에 독립적이다.

Page 4: 알고리즘알고리즘개요개요 효율 분석 차수) Part 1ysmoon/courses/2011_1/alg/03.pdf · 알고리즘(Algorithm) 알고리즘알고리즘개요개요(효율 , 분석,

알고리즘알고리즘 과목의과목의 학습학습 목표목표알고리즘: 효율, 분석, 차수 – Part 1

Design(설계): 다양한 문제에 대해, 알고리즘을 설계하는 기법을 배운다.다양한 문제에 대해, 알고리즘을 설계하는 기법을 배운다

Analysis(분석): Analysis(분석): 알고리즘을 분석하여 시간/공간 복잡도를 구하는 방법을 배운다.

Computational Complexity(계산 복잡도):문제를 분석하여 계산 복잡도를 구하는 방법을 배운다.

Computer Algorithmsby Yang-Sae MoonPage 4

Page 5: 알고리즘알고리즘개요개요 효율 분석 차수) Part 1ysmoon/courses/2011_1/alg/03.pdf · 알고리즘(Algorithm) 알고리즘알고리즘개요개요(효율 , 분석,

설계설계((알고리즘알고리즘))가가 없다면없다면 ……알고리즘: 효율, 분석, 차수 – Part 1

Computer Algorithmsby Yang-Sae MoonPage 5

Page 6: 알고리즘알고리즘개요개요 효율 분석 차수) Part 1ysmoon/courses/2011_1/alg/03.pdf · 알고리즘(Algorithm) 알고리즘알고리즘개요개요(효율 , 분석,

알고리즘이란알고리즘이란??알고리즘: 효율, 분석, 차수 – Part 1

정의:문제에 대한 답(해결책)을 찾기 위해서 계산하는 절차이다.

좀 더 구체적인 정의

• 알고리즘은 단계별로 주의 깊게 설계된 계산 과정이다.

• 알고리즘은 입력을 받아서 출력으로 전환시켜주는 일련의 계산 절차이다.

음…. 결국, 알고리즘이라는 것은 어떤 절차를 기술하는 것이다.

또 한번 음 주어진 입력이 있을 때 원하는 해답을 출력하기 위해또 한번 음… 주어진 입력이 있을 때, 원하는 해답을 출력하기 위해

서, 어떻게 계산하면 되는지 그 절차를 기술하는 것이다.

Computer Algorithmsby Yang-Sae MoonPage 6

Page 7: 알고리즘알고리즘개요개요 효율 분석 차수) Part 1ysmoon/courses/2011_1/alg/03.pdf · 알고리즘(Algorithm) 알고리즘알고리즘개요개요(효율 , 분석,

알고리즘의알고리즘의 예예알고리즘: 효율, 분석, 차수 – Part 1

주어진 문제: 전화번호부에서 “홍길동”의 전화번호 찾기

알고리즘(해결책)알고리즘(해결책)

• 순차검색(sequential search): 전화번호부의 첫 쪽부터 홍길동이라는 이름이 나

올 때까지 순서대로 찾는다.올 때까지 순서대로 찾는다.

• (수정된) 이진검색(binary search): 전환번호부는 “가나다”순으로 되어있으

므로 먼저 “ᄒ”이 있을 만한 곳으로 넘겨본 후 앞뒤로 뒤적여가며 찾는다.

분석: 어떤 알고리즘이 더 좋은가?

Computer Algorithmsby Yang-Sae MoonPage 7

Page 8: 알고리즘알고리즘개요개요 효율 분석 차수) Part 1ysmoon/courses/2011_1/alg/03.pdf · 알고리즘(Algorithm) 알고리즘알고리즘개요개요(효율 , 분석,

문제문제(Problem)(Problem)의의 표기표기//표현표현 방법방법알고리즘: 효율, 분석, 차수 – Part 1

문제: 해결책을 찾고자 던지는 질문

매개변수(파라미터 parameter):매개변수(파라미터, parameter):문제에서 어떤 특정 값이 주어지지 않은 변수(variable)

문제의 사례(instance) 입력(input):문제의 사례(instance) = 입력(input):문제에 주어진 파라미터에 특정 값을 지정한 것(예)

사례에 대한 해답( l i ) 출력( )사례에 대한 해답(solution) = 출력(output):주어진 사례에 관한 질문에 대한 답

Computer Algorithmsby Yang-Sae MoonPage 8

Page 9: 알고리즘알고리즘개요개요 효율 분석 차수) Part 1ysmoon/courses/2011_1/alg/03.pdf · 알고리즘(Algorithm) 알고리즘알고리즘개요개요(효율 , 분석,

문제의문제의 표기표기 예예알고리즘: 효율, 분석, 차수 – Part 1

문제: n개의수로된리스트 S에 x라는수가있는지알아내시오.그결과, x가 S에있으면“예”, 없으면“아니오”로답하시오.그결과, 가 에있으면 예 , 없으면 아니오 로답하시오

파라미터: S, n, x

입력의예1 S [10 7 11 5 3 8] 6 5입력의예1: S = [10,7,11,5,3,8], n = 6, x = 5

출력의예1: “예”

입력의예2: S = [10,7,11], n = 3, x = 5

출력의예2: “아니오”

Computer Algorithmsby Yang-Sae MoonPage 9

Page 10: 알고리즘알고리즘개요개요 효율 분석 차수) Part 1ysmoon/courses/2011_1/alg/03.pdf · 알고리즘(Algorithm) 알고리즘알고리즘개요개요(효율 , 분석,

알고리즘의알고리즘의 표기표기((기술기술))알고리즘: 효율, 분석, 차수 – Part 1

자연어: 한글또는영어 (부정확하고모호함)

프로그래밍언어: C C++ Java Pascal 등프로그래밍언어: C, C++, Java, Pascal 등(특정언어에의존적이어서일반적인알고리즘기술에부적합)

의사코드(P d d )의사코드(Pseudo-code):직접실행할수있는프로그래밍언어는아니지만, 실제프로그램에

거의가깝게계산과정을표현할수 있는언어거의가깝게계산과정을표현할수 있는언어

알고리즘은보통의사코드로표현한다.

본강의에서는 C++(혹은 C)에 가까운의사코드를사용한다.

Computer Algorithmsby Yang-Sae MoonPage 10

Page 11: 알고리즘알고리즘개요개요 효율 분석 차수) Part 1ysmoon/courses/2011_1/alg/03.pdf · 알고리즘(Algorithm) 알고리즘알고리즘개요개요(효율 , 분석,

프로그래밍프로그래밍 언어언어 vsvs 알고리즘알고리즘//자료구조자료구조알고리즘: 효율, 분석, 차수 – Part 1

Computer Algorithmsby Yang-Sae MoonPage 11

Page 12: 알고리즘알고리즘개요개요 효율 분석 차수) Part 1ysmoon/courses/2011_1/alg/03.pdf · 알고리즘(Algorithm) 알고리즘알고리즘개요개요(효율 , 분석,

C/CC/C++++와와 의사코드의의사코드의 차이점차이점 (1/3)(1/3)알고리즘: 효율, 분석, 차수 – Part 1

배열인덱스의범위에제한없음

• C/C++는반드시 0부터시작/ 는반 시 부터시작

• 의사코드는임의의값사용가능 (예: int x[5..10];)

프로시저의파라미터에 2차원배열크기의가변성허용

• 예: void pname(A[][]) { … }• C/C++에서는다음과같이제한이필요함: void pname(A[][10]){ … }

지역배열에변수인덱스허용지역배열에변수인덱스허용

• 예: keytype S[low..high];

• C/C++에서는숫자인덱스만가능함• C/C++에서는숫자인덱스만가능함

Computer Algorithmsby Yang-Sae MoonPage 12

Page 13: 알고리즘알고리즘개요개요 효율 분석 차수) Part 1ysmoon/courses/2011_1/alg/03.pdf · 알고리즘(Algorithm) 알고리즘알고리즘개요개요(효율 , 분석,

C/CC/C++++과과 의사코드의의사코드의 차이점차이점 (2/3)(2/3)알고리즘: 효율, 분석, 차수 – Part 1

수학 표현식 및 간단한 자연어 허용

• low <= x && x <= highg low x high

• temp = x; x = y; y = temp; exchange x and y; exchange x and y;

C C 에 없는 타입 사용 가능C/C++에 없는 타입 사용 가능

• index: 첨자로 사용되는 정수 변수

• number: 정수(int) 또는 실수(float) 모두 사용가능• number: 정수(int) 또는 실수(float) 모두 사용가능

• bool: “true”나 “false” 값을 가질 수 있는 변수

• 이외에도 잘 알려진 키워드(예: record, list)는 별도 정의 없이 사용

Computer Algorithmsby Yang-Sae MoonPage 13

Page 14: 알고리즘알고리즘개요개요 효율 분석 차수) Part 1ysmoon/courses/2011_1/alg/03.pdf · 알고리즘(Algorithm) 알고리즘알고리즘개요개요(효율 , 분석,

C/CC/C++++과과 의사코드의의사코드의 차이점차이점 (3/3)(3/3)알고리즘: 효율, 분석, 차수 – Part 1

제어 구조

• repeat (n times) { … }p

프로시저와 함수의 구분

• 프로시저: void pname(…) {…}

• 함수: returntype fname (…) {… return x;}

참조 파라미터(reference parameter)를 사용하여 프로시저의 결과

값 전달 방법 를 설명하고 있음값 전달 방법 (call by reference를 설명하고 있음)• 배열: (기본적으로) 참조 파라미터로 전달

나머지: 데이터 타입 이름 뒤에 &를 붙임• 나머지: 데이터 타입 이름 뒤에 &를 붙임

• const 배열: 전달되는 배열의 값이 불변

Computer Algorithmsby Yang-Sae MoonPage 14

Page 15: 알고리즘알고리즘개요개요 효율 분석 차수) Part 1ysmoon/courses/2011_1/alg/03.pdf · 알고리즘(Algorithm) 알고리즘알고리즘개요개요(효율 , 분석,

강의강의 내용내용알고리즘: 효율, 분석, 차수 – Part 1

프로그램과 알고리즘

순차검색과 이진검색

피보나찌 수 구하기

알고리즘 분석

차수 (O, , ) – Part 2

Computer Algorithmsby Yang-Sae MoonPage 15

Page 16: 알고리즘알고리즘개요개요 효율 분석 차수) Part 1ysmoon/courses/2011_1/alg/03.pdf · 알고리즘(Algorithm) 알고리즘알고리즘개요개요(효율 , 분석,

순차검색순차검색 (Sequential Search) (1/3)(Sequential Search) (1/3)알고리즘: 효율, 분석, 차수 – Part 1

문제: 크기가 n인 배열 S에 x가있는가?

입력(파라미터): (1) 양수 n (2) 배열 S[1 n] (3) 키 x입력(파라미터): (1) 양수 n, (2) 배열 S[1..n], (3) 키 x

출력: x가 S의 어디에있는지의위치, 만약없으면 0

알고리즘(자연어): • x와같은아이템을찾을때까지 S에있는모든아이템을차례로검사한다.

만일 와같은아이템을찾으면 S에서해당위치를출력하고 • 만일 x 와같은아이템을찾으면 S에서해당위치를출력하고, S 를모두검사하고도찾지못하면 0을출력한다.

자연어알고리즘은문제를풀기는하였으나, 프로그램으로전환하

기에는용이하지않다.

Computer Algorithmsby Yang-Sae MoonPage 16

Page 17: 알고리즘알고리즘개요개요 효율 분석 차수) Part 1ysmoon/courses/2011_1/alg/03.pdf · 알고리즘(Algorithm) 알고리즘알고리즘개요개요(효율 , 분석,

순차검색순차검색 (Sequential Search) (2/3)(Sequential Search) (2/3)알고리즘: 효율, 분석, 차수 – Part 1

알고리즘(의사코드)

void seqsearch(int n // 입력(1)void seqsearch(int n, // 입력(1)const keytype S[], // 입력(2)keytype x, // 입력(3)i d & l ti ) // 출력index& location) // 출력

{location = 1;while (location <= n && S[location] != x)

location++;if (location > n)

location = 0;}

while-루프: 아직검사할항목이있고, x를찾지못하였나?

if-문: 모두검사하였으나, x를찾지못했나?

Computer Algorithmsby Yang-Sae MoonPage 17

if 문: 모두검사하였으나, x를찾지못했나?돌아가기

Page 18: 알고리즘알고리즘개요개요 효율 분석 차수) Part 1ysmoon/courses/2011_1/alg/03.pdf · 알고리즘(Algorithm) 알고리즘알고리즘개요개요(효율 , 분석,

순차검색순차검색 (Sequential Search) (3/3)(Sequential Search) (3/3)알고리즘: 효율, 분석, 차수 – Part 1

순차검색알고리즘으로키를찾기위해서 S에있는항목을몇개나

검색해야하는가?검색해야하는가

• 키와같은항목의위치에따라다름

• 최악의경우: n• 평균의경우: n/2

좀더 빨리찾을수는없는가?• 더이상빨리찾을수있는알고리즘은존재하지않는다.• 배열 S에있는항목에대한정보가전혀없는상황에서, 모든항목을검색하지않

고임의의항목 x를항상찾을수있다는보장이없기때문이다.• 만약 배열 S가정렬되어있다는정보가존재한다면? 이진검색만약, 배열 S가정렬되어있다는정보가존재한다면? 이진검색

Computer Algorithmsby Yang-Sae MoonPage 18

Page 19: 알고리즘알고리즘개요개요 효율 분석 차수) Part 1ysmoon/courses/2011_1/alg/03.pdf · 알고리즘(Algorithm) 알고리즘알고리즘개요개요(효율 , 분석,

순차검색순차검색 ---- C ProgramC Program알고리즘: 효율, 분석, 차수 – Part 1

실제 C 프로그램을봅시다.

알고리즘과는어떤차이가있는지확인합시다알고리즘과는어떤차이가있는지확인합시다.

Computer Algorithmsby Yang-Sae MoonPage 19

Page 20: 알고리즘알고리즘개요개요 효율 분석 차수) Part 1ysmoon/courses/2011_1/alg/03.pdf · 알고리즘(Algorithm) 알고리즘알고리즘개요개요(효율 , 분석,

이진검색이진검색 (Binary Search) (1/3)(Binary Search) (1/3)알고리즘: 효율, 분석, 차수 – Part 1

문제: 크기가 n인 정렬된배열 S에 x가있는가?

입력: (1) 양수 n (2) 배열 S[1 n] (3) 키 x입력: (1) 양수 n, (2) 배열 S[1..n], (3) 키 x

출력: x가 S의 어디에있는지의위치, 만약없으면, 0

순차검색의문제와다른점은배열 S가“정렬”되어있다는정보

를알고있다는점이다.

순차검색의문제가보다일반적이므로, 순차검색을사용하여이 문

제를풀수 있다.

그러나, 순차검색을사용하면“정렬”되어있다는정보를사용하러나, 순차검색을사용하면 정렬 되어있다는정 를사용하

지못하는것이된다.

Computer Algorithmsby Yang-Sae MoonPage 20

Page 21: 알고리즘알고리즘개요개요 효율 분석 차수) Part 1ysmoon/courses/2011_1/alg/03.pdf · 알고리즘(Algorithm) 알고리즘알고리즘개요개요(효율 , 분석,

알고리즘: 효율, 분석, 차수 – Part 1이진검색이진검색 (Binary Search) (2/3)(Binary Search) (2/3)

알고리즘(의사코드)void binsearch(int n // 입력(1)void binsearch(int n, // 입력(1)

const keytype S[], // 입력(2)keytype x, // 입력(3)index& location) // 출력de & ocat o ) // 출력

{index low, high, mid;low = 1; high = n;glocation = 0;while (low <= high && location == 0) {

mid = (low + high) / 2; // 정수나눗셈if (x == S[mid]) location = mid;else if (x < S[mid]) high = mid – 1;else low = mid + 1;

}}

Computer Algorithmsby Yang-Sae MoonPage 21

while-루프: 아직검사할항목이있고, x를찾지못하였나?

Page 22: 알고리즘알고리즘개요개요 효율 분석 차수) Part 1ysmoon/courses/2011_1/alg/03.pdf · 알고리즘(Algorithm) 알고리즘알고리즘개요개요(효율 , 분석,

알고리즘: 효율, 분석, 차수 – Part 1이진검색이진검색 (Binary Search) (3/3)(Binary Search) (3/3)

비교횟수를 (개략적으로) 분석해본다.• 배열의크기가 32라면 6번의비교가필요하다. 이때, 6 = lg 32 + 1이다.배열의 기가 라면 번의비 가필 하다 이때, g 이다

• 배열의크기가 64라면 7번의비교가필요하다. 이때, 7 = lg 64 + 1이다.• 배열의크기가 2k라면 k+1번의비교가필요하다. 이때, k+1 = lg 2k + 1이다.• …

이분검색알고리즘으로키를찾기위해서 S에있는항목을몇개나

검색해야하는가?• while 문을수행할때마다검색대상의크기가절반으로감소하기때문에최악의경우라

도 lg n + 1번만비교하면된다.• 상기횟수분석에서 n = 2k라 하면, 비교횟수는 lg n + 1이된다.라 하 , 비 횟수 g 이 다

Computer Algorithmsby Yang-Sae MoonPage 22

Page 23: 알고리즘알고리즘개요개요 효율 분석 차수) Part 1ysmoon/courses/2011_1/alg/03.pdf · 알고리즘(Algorithm) 알고리즘알고리즘개요개요(효율 , 분석,

알고리즘: 효율, 분석, 차수 – Part 1순차검색순차검색 vs. vs. 이진검색이진검색

배열의크기 순차검색 이진검색 비고배열의크기 순차검색 이진검색 비고

n n lg n + 1

두 방법 모두

128 128 8

최악의경우에대한비교 횟수임

1,024 1,024 11

1 048 576 1 048 576 211,048,576 1,048,576 21

4,294,967,296 4,294,967,296 33

Computer Algorithmsby Yang-Sae MoonPage 23

Page 24: 알고리즘알고리즘개요개요 효율 분석 차수) Part 1ysmoon/courses/2011_1/alg/03.pdf · 알고리즘(Algorithm) 알고리즘알고리즘개요개요(효율 , 분석,

강의강의 내용내용알고리즘: 효율, 분석, 차수 – Part 1

프로그램과 알고리즘

순차검색과 이진검색

피보나찌 수 구하기

알고리즘 분석

차수 (O, , ) – Part 2

Computer Algorithmsby Yang-Sae MoonPage 24

Page 25: 알고리즘알고리즘개요개요 효율 분석 차수) Part 1ysmoon/courses/2011_1/alg/03.pdf · 알고리즘(Algorithm) 알고리즘알고리즘개요개요(효율 , 분석,

알고리즘: 효율, 분석, 차수 – Part 1피보나찌피보나찌(Fibonacci) (Fibonacci) 수열수열

피보나찌수열의정의

f0

1

01

ff

예: 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987, …1 2 , for 2n n nf f f n

Computer Algorithmsby Yang-Sae MoonPage 25

Page 26: 알고리즘알고리즘개요개요 효율 분석 차수) Part 1ysmoon/courses/2011_1/alg/03.pdf · 알고리즘(Algorithm) 알고리즘알고리즘개요개요(효율 , 분석,

알고리즘: 효율, 분석, 차수 – Part 1자연계의자연계의 피보나찌피보나찌 수열수열

Computer Algorithmsby Yang-Sae MoonPage 26

Page 27: 알고리즘알고리즘개요개요 효율 분석 차수) Part 1ysmoon/courses/2011_1/alg/03.pdf · 알고리즘(Algorithm) 알고리즘알고리즘개요개요(효율 , 분석,

알고리즘: 효율, 분석, 차수 – Part 1피보나찌피보나찌 수수 구하기구하기 –– 재귀재귀 알고리즘알고리즘 (1/4)(1/4)

문제: n번째피보나찌수를구하라.

입력: 양수 n입력: 양수 n

출력: n 번째피보나찌수

재귀(recursive) 알고리즘:

int fib(int n){

if (n <= 1)return n;

elsereturn (fib(n-1) + fib(n-2));

}}

Computer Algorithmsby Yang-Sae MoonPage 27

Page 28: 알고리즘알고리즘개요개요 효율 분석 차수) Part 1ysmoon/courses/2011_1/alg/03.pdf · 알고리즘(Algorithm) 알고리즘알고리즘개요개요(효율 , 분석,

알고리즘: 효율, 분석, 차수 – Part 1피보나찌피보나찌 수수 구하기구하기 –– 재귀재귀 알고리즘알고리즘 (2/4)(2/4)

분석: 피보나찌수 구하기재귀알고리즘은 수행속도가매우느리다.• 이유: 같은피보나찌수를중복하여계산한다.이유 같은피 나찌수를중복하여계산한다

• 예: fib(5) 계산을위해서는 fib(2)를 세번이나중복계산한다.

함수 fib(5) 호출시의재귀트리 (recursive tree)( ) ( )

Computer Algorithmsby Yang-Sae MoonPage 28

실제호출되는상황을봅시다!

Page 29: 알고리즘알고리즘개요개요 효율 분석 차수) Part 1ysmoon/courses/2011_1/alg/03.pdf · 알고리즘(Algorithm) 알고리즘알고리즘개요개요(효율 , 분석,

알고리즘: 효율, 분석, 차수 – Part 1피보나찌피보나찌 수수 구하기구하기 –– 재귀재귀 알고리즘알고리즘 (3/4)(3/4)

fib(n) 함수호출횟수계산

• T(n) = fib(n)을 계산하기위하여 fib() 함수를호출하는횟수( ) f ( )을 계산하기위하여 f () 함수를 출하는횟수

• 즉, T(n)은재귀트리상의마디의개수

(0) 1;T (0) 1;(1) 1;( ) ( 1) ( 2) 1 for 2

TTT n T n T n n

2

( ) ( 1) ( 2) 1 for 22 ( 2) since ( 1) ( 2)2 ( 4)

T n T n T n nT n T n T nT n

3

2 ( 4)2 ( 6)

T nT n

/2

/2

...2 (0)2

n

n

T

Computer Algorithmsby Yang-Sae MoonPage 29

/22n

Page 30: 알고리즘알고리즘개요개요 효율 분석 차수) Part 1ysmoon/courses/2011_1/alg/03.pdf · 알고리즘(Algorithm) 알고리즘알고리즘개요개요(효율 , 분석,

알고리즘: 효율, 분석, 차수 – Part 1피보나찌피보나찌 수수 구하기구하기 –– 재귀재귀 알고리즘알고리즘 (4/4)(4/4)

정리: 재귀적알고리즘으로구성한재귀트리의마디의수를 T(n)이라하면, n 2인모든 n에 대하여 T(n) > 2n/2이다.라하면, 인모든 에 대하여 ( ) 이다

증명: (n에 대한수학적귀납법으로증명)Induction base: T(2) = T(1) + T(0) + 1 = 3 > 2 = 22/2Induction base: T(2) T(1) + T(0) + 1 3 > 2 2 /

T(3) = T(2) + T(1) + 1 = 5 > 2.83 23/2

Induction hypothesis:yp2 m < n인 모든 m 에 대해서 T(m) > 2m/2 이라 가정

Induction step: T(n) > 2n/2임을보인다.T(n) = T(n - 1) + T(n - 2) + 1

> 2(n - 1)/2 + 2(n - 2)/2 + 1 [귀납가정에의하여]> 2(n - 2)/2 + 2(n - 2)/2

= 2 2(n / 2)-1

/2

Computer Algorithmsby Yang-Sae MoonPage 30

= 2 n/2

Page 31: 알고리즘알고리즘개요개요 효율 분석 차수) Part 1ysmoon/courses/2011_1/alg/03.pdf · 알고리즘(Algorithm) 알고리즘알고리즘개요개요(효율 , 분석,

알고리즘: 효율, 분석, 차수 – Part 1피보나찌피보나찌 수수 구하기구하기 –– 반복반복 알고리즘알고리즘 (1/2)(1/2)

문제: n번째피보나찌수를구하라.

입력: 양수 n입력: 양수 n

출력: n 번째피보나찌수

반복(iterative) 알고리즘:int fib2 (int n){{index i;int f[0..n];

0 0f[0] = 0;if (n > 0) {f[1] = 1;f (i 2 i < i++)for (i = 2; i <= n; i++)f[i] = f[i-1] + f[i-2];

}return f[n];

Computer Algorithmsby Yang-Sae MoonPage 31

return f[n];}

Page 32: 알고리즘알고리즘개요개요 효율 분석 차수) Part 1ysmoon/courses/2011_1/alg/03.pdf · 알고리즘(Algorithm) 알고리즘알고리즘개요개요(효율 , 분석,

알고리즘: 효율, 분석, 차수 – Part 1피보나찌피보나찌 수수 구하기구하기 –– 반복반복 알고리즘알고리즘 (2/2)(2/2)

분석: 반복알고리즘은수행속도가훨씬더빠르다.• 이유: 재귀알고리즘과는달리중복계산이없다.이유: 재귀알고리즘과는달리중복계산이없다.

계산하는항(f[i])의 총 개수계산하는항(f[i])의 총 개수

• T(n) = n + 1

• 즉 f[0]부터 f[n]까지단한번씩만계산한다즉, f[0]부터 f[n]까지단한번씩만계산한다.

Computer Algorithmsby Yang-Sae MoonPage 32

Page 33: 알고리즘알고리즘개요개요 효율 분석 차수) Part 1ysmoon/courses/2011_1/alg/03.pdf · 알고리즘(Algorithm) 알고리즘알고리즘개요개요(효율 , 분석,

알고리즘: 효율, 분석, 차수 – Part 1피보나찌피보나찌 수수 구하기구하기 –– 재귀재귀 vs. vs. 반복반복 (1/2)(1/2)

노드하나(혹은항 하나) 계산에 1 ns 걸린다고가정하자.

반복 재귀 하한n n+1 2n/2 반복 재귀(하한)40 41 1,048,576 41ns 1048s

60 61 1.1109 61ns 1s

80 81 1.11012 81ns 18min

100 101 1.11015 101ns 13days

120 121 1 21018 121ns 36years120 121 1.21018 121ns 36years

160 161 1.21024 161ns 3.8 107years

200 201 1.31030 201ns 4 1013years

Computer Algorithmsby Yang-Sae MoonPage 33

Page 34: 알고리즘알고리즘개요개요 효율 분석 차수) Part 1ysmoon/courses/2011_1/alg/03.pdf · 알고리즘(Algorithm) 알고리즘알고리즘개요개요(효율 , 분석,

알고리즘: 효율, 분석, 차수 – Part 1피보나찌피보나찌 수수 구하기구하기 –– 재귀재귀 vs. vs. 반복반복 (2/2)(2/2)

재귀알고리즘보다는반복알고리즘이항상효율적이다?꼭그렇지만은않다. 꼭그렇지만은않다

특히, 설계단계에서재귀알고리즘은매우유용하다.

피보나찌수 구하기의재귀알고리즘은 Ch. 2에서다루는분할정복

(Divide & Conquer)의전형적인예이다(Divide & Conquer)의전형적인예이다.

피보나찌수 구하기의반복알고리즘은 Ch. 3에서다루는동적프로

그래밍(Dynamic Programming)의간단한보기이다.

Computer Algorithmsby Yang-Sae MoonPage 34

Page 35: 알고리즘알고리즘개요개요 효율 분석 차수) Part 1ysmoon/courses/2011_1/alg/03.pdf · 알고리즘(Algorithm) 알고리즘알고리즘개요개요(효율 , 분석,

강의강의 내용내용알고리즘: 효율, 분석, 차수 – Part 1

프로그램과 알고리즘

순차검색과 이진검색

피보나찌 수 구하기

알고리즘 분석

차수 (O, , ) – Part 2

Computer Algorithmsby Yang-Sae MoonPage 35

Page 36: 알고리즘알고리즘개요개요 효율 분석 차수) Part 1ysmoon/courses/2011_1/alg/03.pdf · 알고리즘(Algorithm) 알고리즘알고리즘개요개요(효율 , 분석,

알고리즘: 효율, 분석, 차수 – Part 1알고리즘의알고리즘의 분석분석(analysis)(analysis)

시간복잡도(Time Complexity) 분석

• 입력크기에따라서단위연산이몇번수행되는지결정하는절차• 입력크기에따라서단위연산이몇번수행되는지결정하는절차

표현척도표현척도

• 단위연산(basic operation): 비교문(comparison), 지정문(assignment) 등

• 입력크기(input size): 배열의크기, 리스트의길이, 행렬에서행과열의크기, 트리에서꼭지점과에지의수

Computer Algorithmsby Yang-Sae MoonPage 36

Page 37: 알고리즘알고리즘개요개요 효율 분석 차수) Part 1ysmoon/courses/2011_1/alg/03.pdf · 알고리즘(Algorithm) 알고리즘알고리즘개요개요(효율 , 분석,

알고리즘: 효율, 분석, 차수 – Part 1분석분석 방법의방법의 종류종류 (1/2)(1/2)

모든경우분석(Every-case analysis)• 복잡도는입력크기에만종속(dependent)적임• 복잡도는입력크기에만종속(dependent)적임

• 입력값과는무관(independent)하게 복잡도는항상일정

• 예: 평균을구하라• 예: 평균을구하라.

최악의경우분석(W t l i )최악의경우분석(Worst-case analysis)• 복잡도는입력크기와입력값모두에종속

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

Computer Algorithmsby Yang-Sae MoonPage 37

Page 38: 알고리즘알고리즘개요개요 효율 분석 차수) Part 1ysmoon/courses/2011_1/alg/03.pdf · 알고리즘(Algorithm) 알고리즘알고리즘개요개요(효율 , 분석,

알고리즘: 효율, 분석, 차수 – Part 1분석분석 방법의방법의 종류종류 (2/2)(2/2)

평균의경우분석(Average-case analysis)• 입력크기와입력값모두에종속• 입력크기와입력값모두에종속

• 모든입력에대해서단위연산이수행되는기대치(평균)

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

확률에따라기대치가다르게계산될수있음

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

최선의경우분석(Best-case analysis)최선의경우분석(Best case analysis)• 입력크기와입력값모두에종속

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

Computer Algorithmsby Yang-Sae MoonPage 38

Page 39: 알고리즘알고리즘개요개요 효율 분석 차수) Part 1ysmoon/courses/2011_1/alg/03.pdf · 알고리즘(Algorithm) 알고리즘알고리즘개요개요(효율 , 분석,

알고리즘: 효율, 분석, 차수 – Part 1배열배열 덧셈덧셈 알고리즘알고리즘

문제: 크기가 n인 배열 S의모든수를더하라.

입력: 양수 n 배열 S[1 n]입력: 양수 n, 배열 S[1..n]

출력: 배열 S에있는모든수의합

알고리즘:number sum (int n, const number S[]){{

index i;number result;

result = 0;for (i = 1; i <= n; i++)

result = result + S[i];result = result + S[i];return result;

}

Computer Algorithmsby Yang-Sae MoonPage 39

Page 40: 알고리즘알고리즘개요개요 효율 분석 차수) Part 1ysmoon/courses/2011_1/alg/03.pdf · 알고리즘(Algorithm) 알고리즘알고리즘개요개요(효율 , 분석,

알고리즘: 효율, 분석, 차수 – Part 1배열배열 덧셈덧셈 알고리즘알고리즘: : 시간시간 복잡도복잡도 분석분석

단위연산: 덧셈 단위연산: 지정문 (for-루프

의첨자지정문포함)입력크기: 배열의크기 n

모든경우분석:

의첨자지정문포함)

입력크기: 배열의크기 n모든경우분석:• 배열 내용에 상관없이 for-루프가

n번 반복된다.모든경우분석:• 배열내용에상관없이 for-루

• 각 루프마다 덧셈이 1회 수행된다.

• 따라서, n에 대해서 덧셈이 수행

배열내용에상관없이 for 루

프가 n번반복된다.

• 따라서, 지정문이되는 총 횟수는 T(n) = n 이다. T(n) = n + n + 1번수행된다.

기본동작을 다르게 함으로써, 시간 복잡도가 다르게 나왔다.그러나, 사실 둘 모두는 같은 복잡도 카테고리에 속한다.

Computer Algorithmsby Yang-Sae MoonPage 40

그러나, 사실 둘 모두는 같은 복잡도 카테고리에 속한다

Page 41: 알고리즘알고리즘개요개요 효율 분석 차수) Part 1ysmoon/courses/2011_1/alg/03.pdf · 알고리즘(Algorithm) 알고리즘알고리즘개요개요(효율 , 분석,

알고리즘: 효율, 분석, 차수 – Part 1버블버블 정렬정렬(Bubble Sort) (Bubble Sort) 알고리즘알고리즘

문제: 비내림차순으로 n개의키를정렬

입력: 양수 n 배열 S[1 n]입력: 양수 n, 배열 S[1..n]

출력: 비내림차순으로정렬된배열

알고리즘:void exchangesort (int n, keytype S[]){

index i, j;

for (i = 1; i <= n-1; i++)exchange sort

for (i = 1; i <= n 1; i++) for (j = i+1; j <= n; j++)

if (S[j] < S[i])exchange S[i] and S[j];exchange S[i] and S[j];

}

for(j = 1;j <= (n-i); j++)

Computer Algorithmsby Yang-Sae MoonPage 41

if (S[j] > S[j+1])exchange S[j] and S[j+1]; bubble sort

Page 42: 알고리즘알고리즘개요개요 효율 분석 차수) Part 1ysmoon/courses/2011_1/alg/03.pdf · 알고리즘(Algorithm) 알고리즘알고리즘개요개요(효율 , 분석,

알고리즘: 효율, 분석, 차수 – Part 1버블버블 정렬정렬 알고리즘알고리즘: : 시간시간 복잡도복잡도 분석분석 II

단위연산: 조건문 (S[j]와 S[i]의 비교)

입력크기: 정렬할항목의수 n입력크기: 정렬할항목의수 n

모든경우분석:• j-루프가수행될때마다조건문을 1번씩수행

• 조건문의총수행횟수

i = 1 : j-루프 n – 1 번수행

i = 2 : j-루프 n – 2 번수행

i = 3 : j-루프 n – 3 번수행

i = n – 1 : j-루프 1 번수행

따라서 ( 1)( ) ( 1) ( 2) 12

n nT n n n

Computer Algorithmsby Yang-Sae MoonPage 42

Page 43: 알고리즘알고리즘개요개요 효율 분석 차수) Part 1ysmoon/courses/2011_1/alg/03.pdf · 알고리즘(Algorithm) 알고리즘알고리즘개요개요(효율 , 분석,

알고리즘: 효율, 분석, 차수 – Part 1버블버블 정렬정렬 알고리즘알고리즘: : 시간시간 복잡도복잡도 분석분석 IIII

단위연산: 교환하는연산 (exchange S[j] and S[i])

입력크기: 정렬할항목의수 n입력크기: 정렬할항목의수 n

최악의경우분석:• 조건문의결과에따라서교환연산의수행여부가결정된다.

• 최악의경우 = 조건문이항상참(true)이되는경우

입력배열이거꾸로정렬되어있는경우= 입력배열이거꾸로정렬되어있는경우

( 1)( ) n n( 1)( )2

n nT n

Computer Algorithmsby Yang-Sae MoonPage 43

Page 44: 알고리즘알고리즘개요개요 효율 분석 차수) Part 1ysmoon/courses/2011_1/alg/03.pdf · 알고리즘(Algorithm) 알고리즘알고리즘개요개요(효율 , 분석,

알고리즘: 효율, 분석, 차수 – Part 1순차순차 검색검색 알고리즘알고리즘: : 시간시간 복잡도복잡도 분석분석(1/4)(1/4)

단위연산: 배열의아이템과키 x와비교연산 (S[location] != x)

입력크기: 배열안에있는아이템의수 n입력크기: 배열안에있는아이템의수 n

최악의경우분석:• x가배열의마지막아이템이거나, x가배열에없는경우, 단위연산이 n번

수행된다.

따라서 ( )W• 따라서, ( )W n n

순차검색 알고리즘의 경우 입력배열의 값에 따라서 검색하는 횟수가 달순차검색 알고리즘의 경우 입력배열의 값에 따라서 검색하는 횟수가 달

라지므로, 모든 경우(every-case)의시간 복잡도 분석은 불가능하다.

순차검색 알고리즘 보기

Computer Algorithmsby Yang-Sae MoonPage 44

순차검색 알고리즘 보기

Page 45: 알고리즘알고리즘개요개요 효율 분석 차수) Part 1ysmoon/courses/2011_1/alg/03.pdf · 알고리즘(Algorithm) 알고리즘알고리즘개요개요(효율 , 분석,

알고리즘: 효율, 분석, 차수 – Part 1순차순차 검색검색 알고리즘알고리즘: : 시간시간 복잡도복잡도 분석분석(2/4)(2/4)

단위연산: 배열의아이템과키 x와비교연산 (S[location] != x)

입력크기: 배열안에있는아이템의수 n

가정:배열의아이템이모두다르다.가정:배열의아이템이모두다르다.

평균의경우분석(경우 1): x가배열 S안에있는경우만고려

• 에대해서 x가배열의 k번째있을확률 = 1/n

• x가배열의 k번째있다면, x를찾기위해서수행하는단위연산의횟수 = k

1 k n

• 따라서,

( 1)1 1 1 1( )n n n n nk k

1 1

( 1)1 1 1 1( )2 2k k

n n nA n k kn n n

Computer Algorithmsby Yang-Sae MoonPage 45

Page 46: 알고리즘알고리즘개요개요 효율 분석 차수) Part 1ysmoon/courses/2011_1/alg/03.pdf · 알고리즘(Algorithm) 알고리즘알고리즘개요개요(효율 , 분석,

알고리즘: 효율, 분석, 차수 – Part 1순차순차 검색검색 알고리즘알고리즘: : 시간시간 복잡도복잡도 분석분석(3/4)(3/4)

평균의경우분석(경우 2): x가배열 S안에없는경우도고려

• 가배열 S안에있을확률을 라고하면• x가배열 S안에있을확률을 p라고하면,

x가배열에있을확률 = p (x가배열의 k번째 있을확률 = p/n)

x가배열에없을확률 = 1 – p

• 따라서,( ) (1 )

n pA n k n p

1( ) (1 )

( 1) 1(1 ) (1 )2 2

kA n k n p

np n n nn p p n p

2 2

12 2

np p

n

• 참고:

2 2

1 ( ) ( 1)/2p A n n

Computer Algorithmsby Yang-Sae MoonPage 46

( ) ( )/1/2 ( ) 3 /4 1/4

pp A n n

Page 47: 알고리즘알고리즘개요개요 효율 분석 차수) Part 1ysmoon/courses/2011_1/alg/03.pdf · 알고리즘(Algorithm) 알고리즘알고리즘개요개요(효율 , 분석,

알고리즘: 효율, 분석, 차수 – Part 1순차순차 검색검색 알고리즘알고리즘: : 시간시간 복잡도복잡도 분석분석(4/4)(4/4)

단위연산: 배열의아이템과키 x와비교연산 (S[location] != x)

입력크기: 배열안에있는아이템의수 n

최선의경우분석:최선의경우분석

• x가 S[1]일때, 입력의크기에상관없이단위연산이 1번만수행된다.

• 따라서 B(n) = 1• 따라서, B(n) = 1

Computer Algorithmsby Yang-Sae MoonPage 47

Page 48: 알고리즘알고리즘개요개요 효율 분석 차수) Part 1ysmoon/courses/2011_1/alg/03.pdf · 알고리즘(Algorithm) 알고리즘알고리즘개요개요(효율 , 분석,

알고리즘: 효율, 분석, 차수 – Part 1계산계산((시간시간) ) 복잡도복잡도: : 어떤어떤 것을것을 사용하지사용하지??

최악, 평균, 최선의경우분석방법중에서어떤분석이가장

정확한가?정확한가

(분석자체야모두정확해야한다.)

최악, 평균, 최선의경우분석방법중에서어떤분석을사용할

것인가?것인가?(응용에따라다르나, 대개최악/평균을사용한다.)

Computer Algorithmsby Yang-Sae MoonPage 48

Page 49: 알고리즘알고리즘개요개요 효율 분석 차수) Part 1ysmoon/courses/2011_1/alg/03.pdf · 알고리즘(Algorithm) 알고리즘알고리즘개요개요(효율 , 분석,

알고리즘: 효율, 분석, 차수 – Part 1정확도정확도 분석분석??

알고리즘이의도한대로수행되는지를증명하는절차

(즉, 알고리즘이정확하게수행되는지를증명하는절차)(즉, 알고리즘이정확하게수행되는지를증명하는절차)

정확한알고리즘이란?정확한알고리즘이란?어떠한입력에대해서도답을출력하면서멈추는알고리즘

정확하지않은알고리즘이란?• 어떤입력에대해서멈추지않거나 또는• 어떤입력에대해서멈추지않거나, 또는

• 틀린답을출력하면서멈추는알고리즘

정확도분석은 프로그램 증명(Program Verification)과 마찬가지로

매우이론적인 분야로서, Dijkstra 등에 의해서 연구되었다.

Computer Algorithmsby Yang-Sae MoonPage 49

매우이론적인 분야로서, j 등에 의해서 연구되었다

Page 50: 알고리즘알고리즘개요개요 효율 분석 차수) Part 1ysmoon/courses/2011_1/alg/03.pdf · 알고리즘(Algorithm) 알고리즘알고리즘개요개요(효율 , 분석,

알고리즘: 효율, 분석, 차수 – Part 1Who is Who is DijkstraDijkstra??

Computer Algorithmsby Yang-Sae MoonPage 50

Page 51: 알고리즘알고리즘개요개요 효율 분석 차수) Part 1ysmoon/courses/2011_1/alg/03.pdf · 알고리즘(Algorithm) 알고리즘알고리즘개요개요(효율 , 분석,

알고리즘: 효율, 분석, 차수 – Part 1Homework Homework #1#1

Computer Algorithmsby Yang-Sae MoonPage 51