Upload
others
View
0
Download
0
Embed Size (px)
Citation preview
알고리즘알고리즘(Algorithm) (Algorithm) 알고리즘알고리즘(Algorithm) (Algorithm) 알고리즘알고리즘 개요개요 ((효율효율, , 분석분석, , 차수차수) Part 1) Part 1(( ,, ,, ))
20112011년년 봄학기봄학기
강원대학교강원대학교 컴퓨터과학전공컴퓨터과학전공 문양세문양세강원대학교강원대학교 컴퓨터과학전공컴퓨터과학전공 문양세문양세
강의강의 내용내용알고리즘: 효율, 분석, 차수 – Part 1
프로그램과 알고리즘
순차검색과 이진검색
피보나찌 수 구하기
알고리즘 분석
차수 (O, , ) – Part 2
Computer Algorithmsby Yang-Sae MoonPage 2
프로그램의프로그램의 설계설계 과정과정알고리즘: 효율, 분석, 차수 – Part 1
문제 알고리즘 프로그램만족?설계 분석 예
아니오
재설계
알고리즘은 주어진 문제를 논리적으로 해결하는 과정이다.
분석을 통해 작성한 알고리즘의 정확성을 파악할 수 있고 분석을 통해 작성한 알고리즘의 정확성을 파악할 수 있고, 효율성을 정량적으로 나타낼 수 있다.
(일반적으로) 알고리즘은 프로그래밍 언어에 독립적이다
Computer Algorithmsby Yang-Sae MoonPage 3
(일반적으로) 알고리즘은 프로그래밍 언어에 독립적이다.
알고리즘알고리즘 과목의과목의 학습학습 목표목표알고리즘: 효율, 분석, 차수 – Part 1
Design(설계): 다양한 문제에 대해, 알고리즘을 설계하는 기법을 배운다.다양한 문제에 대해, 알고리즘을 설계하는 기법을 배운다
Analysis(분석): Analysis(분석): 알고리즘을 분석하여 시간/공간 복잡도를 구하는 방법을 배운다.
Computational Complexity(계산 복잡도):문제를 분석하여 계산 복잡도를 구하는 방법을 배운다.
Computer Algorithmsby Yang-Sae MoonPage 4
설계설계((알고리즘알고리즘))가가 없다면없다면 ……알고리즘: 효율, 분석, 차수 – Part 1
Computer Algorithmsby Yang-Sae MoonPage 5
알고리즘이란알고리즘이란??알고리즘: 효율, 분석, 차수 – Part 1
정의:문제에 대한 답(해결책)을 찾기 위해서 계산하는 절차이다.
좀 더 구체적인 정의
• 알고리즘은 단계별로 주의 깊게 설계된 계산 과정이다.
• 알고리즘은 입력을 받아서 출력으로 전환시켜주는 일련의 계산 절차이다.
음…. 결국, 알고리즘이라는 것은 어떤 절차를 기술하는 것이다.
또 한번 음 주어진 입력이 있을 때 원하는 해답을 출력하기 위해또 한번 음… 주어진 입력이 있을 때, 원하는 해답을 출력하기 위해
서, 어떻게 계산하면 되는지 그 절차를 기술하는 것이다.
Computer Algorithmsby Yang-Sae MoonPage 6
알고리즘의알고리즘의 예예알고리즘: 효율, 분석, 차수 – Part 1
주어진 문제: 전화번호부에서 “홍길동”의 전화번호 찾기
알고리즘(해결책)알고리즘(해결책)
• 순차검색(sequential search): 전화번호부의 첫 쪽부터 홍길동이라는 이름이 나
올 때까지 순서대로 찾는다.올 때까지 순서대로 찾는다.
• (수정된) 이진검색(binary search): 전환번호부는 “가나다”순으로 되어있으
므로 먼저 “ᄒ”이 있을 만한 곳으로 넘겨본 후 앞뒤로 뒤적여가며 찾는다.
분석: 어떤 알고리즘이 더 좋은가?
Computer Algorithmsby Yang-Sae MoonPage 7
문제문제(Problem)(Problem)의의 표기표기//표현표현 방법방법알고리즘: 효율, 분석, 차수 – Part 1
문제: 해결책을 찾고자 던지는 질문
매개변수(파라미터 parameter):매개변수(파라미터, parameter):문제에서 어떤 특정 값이 주어지지 않은 변수(variable)
문제의 사례(instance) 입력(input):문제의 사례(instance) = 입력(input):문제에 주어진 파라미터에 특정 값을 지정한 것(예)
사례에 대한 해답( l i ) 출력( )사례에 대한 해답(solution) = 출력(output):주어진 사례에 관한 질문에 대한 답
Computer Algorithmsby Yang-Sae MoonPage 8
문제의문제의 표기표기 예예알고리즘: 효율, 분석, 차수 – 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
알고리즘의알고리즘의 표기표기((기술기술))알고리즘: 효율, 분석, 차수 – Part 1
자연어: 한글또는영어 (부정확하고모호함)
프로그래밍언어: C C++ Java Pascal 등프로그래밍언어: C, C++, Java, Pascal 등(특정언어에의존적이어서일반적인알고리즘기술에부적합)
의사코드(P d d )의사코드(Pseudo-code):직접실행할수있는프로그래밍언어는아니지만, 실제프로그램에
거의가깝게계산과정을표현할수 있는언어거의가깝게계산과정을표현할수 있는언어
알고리즘은보통의사코드로표현한다.
본강의에서는 C++(혹은 C)에 가까운의사코드를사용한다.
Computer Algorithmsby Yang-Sae MoonPage 10
프로그래밍프로그래밍 언어언어 vsvs 알고리즘알고리즘//자료구조자료구조알고리즘: 효율, 분석, 차수 – Part 1
Computer Algorithmsby Yang-Sae MoonPage 11
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
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
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
강의강의 내용내용알고리즘: 효율, 분석, 차수 – Part 1
프로그램과 알고리즘
순차검색과 이진검색
피보나찌 수 구하기
알고리즘 분석
차수 (O, , ) – Part 2
Computer Algorithmsby Yang-Sae MoonPage 15
순차검색순차검색 (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
순차검색순차검색 (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를찾지못했나?돌아가기
순차검색순차검색 (Sequential Search) (3/3)(Sequential Search) (3/3)알고리즘: 효율, 분석, 차수 – Part 1
순차검색알고리즘으로키를찾기위해서 S에있는항목을몇개나
검색해야하는가?검색해야하는가
• 키와같은항목의위치에따라다름
• 최악의경우: n• 평균의경우: n/2
좀더 빨리찾을수는없는가?• 더이상빨리찾을수있는알고리즘은존재하지않는다.• 배열 S에있는항목에대한정보가전혀없는상황에서, 모든항목을검색하지않
고임의의항목 x를항상찾을수있다는보장이없기때문이다.• 만약 배열 S가정렬되어있다는정보가존재한다면? 이진검색만약, 배열 S가정렬되어있다는정보가존재한다면? 이진검색
Computer Algorithmsby Yang-Sae MoonPage 18
순차검색순차검색 ---- C ProgramC Program알고리즘: 효율, 분석, 차수 – Part 1
실제 C 프로그램을봅시다.
알고리즘과는어떤차이가있는지확인합시다알고리즘과는어떤차이가있는지확인합시다.
Computer Algorithmsby Yang-Sae MoonPage 19
이진검색이진검색 (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
알고리즘: 효율, 분석, 차수 – 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를찾지못하였나?
알고리즘: 효율, 분석, 차수 – 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
알고리즘: 효율, 분석, 차수 – 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
강의강의 내용내용알고리즘: 효율, 분석, 차수 – Part 1
프로그램과 알고리즘
순차검색과 이진검색
피보나찌 수 구하기
알고리즘 분석
차수 (O, , ) – Part 2
Computer Algorithmsby Yang-Sae MoonPage 24
알고리즘: 효율, 분석, 차수 – 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
알고리즘: 효율, 분석, 차수 – Part 1자연계의자연계의 피보나찌피보나찌 수열수열
Computer Algorithmsby Yang-Sae MoonPage 26
알고리즘: 효율, 분석, 차수 – 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
알고리즘: 효율, 분석, 차수 – Part 1피보나찌피보나찌 수수 구하기구하기 –– 재귀재귀 알고리즘알고리즘 (2/4)(2/4)
분석: 피보나찌수 구하기재귀알고리즘은 수행속도가매우느리다.• 이유: 같은피보나찌수를중복하여계산한다.이유 같은피 나찌수를중복하여계산한다
• 예: fib(5) 계산을위해서는 fib(2)를 세번이나중복계산한다.
함수 fib(5) 호출시의재귀트리 (recursive tree)( ) ( )
Computer Algorithmsby Yang-Sae MoonPage 28
실제호출되는상황을봅시다!
알고리즘: 효율, 분석, 차수 – 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
알고리즘: 효율, 분석, 차수 – 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
알고리즘: 효율, 분석, 차수 – 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];}
알고리즘: 효율, 분석, 차수 – 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
알고리즘: 효율, 분석, 차수 – 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
알고리즘: 효율, 분석, 차수 – Part 1피보나찌피보나찌 수수 구하기구하기 –– 재귀재귀 vs. vs. 반복반복 (2/2)(2/2)
재귀알고리즘보다는반복알고리즘이항상효율적이다?꼭그렇지만은않다. 꼭그렇지만은않다
특히, 설계단계에서재귀알고리즘은매우유용하다.
피보나찌수 구하기의재귀알고리즘은 Ch. 2에서다루는분할정복
(Divide & Conquer)의전형적인예이다(Divide & Conquer)의전형적인예이다.
피보나찌수 구하기의반복알고리즘은 Ch. 3에서다루는동적프로
그래밍(Dynamic Programming)의간단한보기이다.
Computer Algorithmsby Yang-Sae MoonPage 34
강의강의 내용내용알고리즘: 효율, 분석, 차수 – Part 1
프로그램과 알고리즘
순차검색과 이진검색
피보나찌 수 구하기
알고리즘 분석
차수 (O, , ) – Part 2
Computer Algorithmsby Yang-Sae MoonPage 35
알고리즘: 효율, 분석, 차수 – Part 1알고리즘의알고리즘의 분석분석(analysis)(analysis)
시간복잡도(Time Complexity) 분석
• 입력크기에따라서단위연산이몇번수행되는지결정하는절차• 입력크기에따라서단위연산이몇번수행되는지결정하는절차
표현척도표현척도
• 단위연산(basic operation): 비교문(comparison), 지정문(assignment) 등
• 입력크기(input size): 배열의크기, 리스트의길이, 행렬에서행과열의크기, 트리에서꼭지점과에지의수
Computer Algorithmsby Yang-Sae MoonPage 36
알고리즘: 효율, 분석, 차수 – 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
알고리즘: 효율, 분석, 차수 – Part 1분석분석 방법의방법의 종류종류 (2/2)(2/2)
평균의경우분석(Average-case analysis)• 입력크기와입력값모두에종속• 입력크기와입력값모두에종속
• 모든입력에대해서단위연산이수행되는기대치(평균)
• 각입력값에대해서확률할당이가능• 각입력값에대해서확률할당이가능
확률에따라기대치가다르게계산될수있음
• 일반적으로최악의경우보다계산이복잡일반적 최악의경우 다계산이복잡
최선의경우분석(Best-case analysis)최선의경우분석(Best case analysis)• 입력크기와입력값모두에종속
• 단위연산이수행되는횟수가최소(최선)인경우선택단위연산이수행되는횟수가최소(최선)인경우선택
Computer Algorithmsby Yang-Sae MoonPage 38
알고리즘: 효율, 분석, 차수 – 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
알고리즘: 효율, 분석, 차수 – 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
그러나, 사실 둘 모두는 같은 복잡도 카테고리에 속한다
알고리즘: 효율, 분석, 차수 – 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
알고리즘: 효율, 분석, 차수 – 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
알고리즘: 효율, 분석, 차수 – 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
알고리즘: 효율, 분석, 차수 – 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
순차검색 알고리즘 보기
알고리즘: 효율, 분석, 차수 – 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
알고리즘: 효율, 분석, 차수 – 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
알고리즘: 효율, 분석, 차수 – 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
알고리즘: 효율, 분석, 차수 – Part 1계산계산((시간시간) ) 복잡도복잡도: : 어떤어떤 것을것을 사용하지사용하지??
최악, 평균, 최선의경우분석방법중에서어떤분석이가장
정확한가?정확한가
(분석자체야모두정확해야한다.)
최악, 평균, 최선의경우분석방법중에서어떤분석을사용할
것인가?것인가?(응용에따라다르나, 대개최악/평균을사용한다.)
Computer Algorithmsby Yang-Sae MoonPage 48
알고리즘: 효율, 분석, 차수 – Part 1정확도정확도 분석분석??
알고리즘이의도한대로수행되는지를증명하는절차
(즉, 알고리즘이정확하게수행되는지를증명하는절차)(즉, 알고리즘이정확하게수행되는지를증명하는절차)
정확한알고리즘이란?정확한알고리즘이란?어떠한입력에대해서도답을출력하면서멈추는알고리즘
정확하지않은알고리즘이란?• 어떤입력에대해서멈추지않거나 또는• 어떤입력에대해서멈추지않거나, 또는
• 틀린답을출력하면서멈추는알고리즘
정확도분석은 프로그램 증명(Program Verification)과 마찬가지로
매우이론적인 분야로서, Dijkstra 등에 의해서 연구되었다.
Computer Algorithmsby Yang-Sae MoonPage 49
매우이론적인 분야로서, j 등에 의해서 연구되었다
알고리즘: 효율, 분석, 차수 – Part 1Who is Who is DijkstraDijkstra??
Computer Algorithmsby Yang-Sae MoonPage 50
알고리즘: 효율, 분석, 차수 – Part 1Homework Homework #1#1
Computer Algorithmsby Yang-Sae MoonPage 51