01 (algorithms) introduction · 2019-09-29 · 자료구조 자료구조분류 3 문자형...

25
자료구조 & 알고리즘 알고리즘 설계와 분석 (Algorithm Design and Analysis) 자료구조 & 알고리즘 알고리즘 설계와 분석 (Algorithm Design and Analysis) Seo, Doo-Ok Clickseo.com [email protected]

Upload: others

Post on 31-Jan-2020

0 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: 01 (Algorithms) Introduction · 2019-09-29 · 자료구조 자료구조분류 3 문자형 정수형 실수형 문자열 리스트(list) 연결리스트(linked list) 스택(stack)

자료구조 & 알고리즘

알고리즘 설계와 분석(Algorithm Design and Analysis)

자료구조 & 알고리즘

알고리즘 설계와 분석(Algorithm Design and Analysis)

Seo, Doo-Ok

[email protected]

Page 2: 01 (Algorithms) Introduction · 2019-09-29 · 자료구조 자료구조분류 3 문자형 정수형 실수형 문자열 리스트(list) 연결리스트(linked list) 스택(stack)

목 차

자료구조

알고리즘

2

Page 3: 01 (Algorithms) Introduction · 2019-09-29 · 자료구조 자료구조분류 3 문자형 정수형 실수형 문자열 리스트(list) 연결리스트(linked list) 스택(stack)

자료구조

자료구조 분류

3

문자형

정수형

실수형

문자열

리스트 (list)

연결 리스트 (linked list)

스택 (stack)

큐 (queue)

트리 (tree)

그래프 (graph)

자료구조

단순구조 선형구조 비선형구조

순차 파일

색인 파일

직접 파일

파일구조

Page 4: 01 (Algorithms) Introduction · 2019-09-29 · 자료구조 자료구조분류 3 문자형 정수형 실수형 문자열 리스트(list) 연결리스트(linked list) 스택(stack)

알고리즘

자료구조

알고리즘

알고리즘 분석

알고리즘 분석 : 수행시간

점근적 분석과 표기법

4

Page 5: 01 (Algorithms) Introduction · 2019-09-29 · 자료구조 자료구조분류 3 문자형 정수형 실수형 문자열 리스트(list) 연결리스트(linked list) 스택(stack)

알고리즘 (1/3)

알고리즘(Algorithm)

주어진 문제를 해결하기 위한 잘 정의된 동작들의 유한 집합• 어떤 작업을 수행하기 위해 입력을 받아 원하는 출력을 만들어내는 과정을 기술

• 문제를 풀거나 작업을 수행하기 위한 단계적인 방법

자료구조와 알고리즘• 자료구조 : 자료 (행위의 객체 : 무엇을)

• 알고리즘 : 문제 해결의 방법 (행위적인 측면 : 어떻게 하라)

5

“잘 정의된 문제 해결 과정”

“무엇을 어떻게 하라”

Page 6: 01 (Algorithms) Introduction · 2019-09-29 · 자료구조 자료구조분류 3 문자형 정수형 실수형 문자열 리스트(list) 연결리스트(linked list) 스택(stack)

알고리즘 (2/3)

순서도(flowchart) : 알고리즘을 그림으로 표현

6

...

실행 문장 #2

실행 문장 #1

실행 문장 #n

순차구조

(decision condition)판단 조건

(decision condition)

실행 문장 #1 실행 문장 #2

참 (true) 거짓 (false)

선택구조

(decision condition)판단 조건

(decision condition)

실행 문장 #1

참 (true)

거짓 (false)

반복구조

Page 7: 01 (Algorithms) Introduction · 2019-09-29 · 자료구조 자료구조분류 3 문자형 정수형 실수형 문자열 리스트(list) 연결리스트(linked list) 스택(stack)

알고리즘 (3/3)

의사코드(pseudo-code) : 영어와 비슷한 자연어로 표현

7

순차구조

선택구조

반복구조

action 1

action 2

.

.

.

action n

if (condition)

then

action

action

else

action

action

End if

while (condition)

action

action

End while

Page 8: 01 (Algorithms) Introduction · 2019-09-29 · 자료구조 자료구조분류 3 문자형 정수형 실수형 문자열 리스트(list) 연결리스트(linked list) 스택(stack)

알고리즘 분석 (1/3)

경험적 분석과 수학적 분석

경험적 분석(Empirical analysis)

• 알고리즘을 프로그래밍 언어로 구현 후에 실행 시간을 비교해 보는 것

• 장점 : 신빙성 있는 자료를 제공하며 수학적인 지식이 필요 없다.

수학적 분석(Mathematical analysis)

• 알고리즘 자체만을 가지고 수학적 분석을 하는 것

• 장점 : 프로그래밍 과정에서 같은 알고리즘이더라도 프로그래머의 능력에 따라나타날 수 있는 성능의 편차를 없앨 수 있다.

최악의 경우와 최선의 경우• 최악의 경우(worst case)

• 최선의 경우(best case)

• 평균적 경우(average case)

8

“알고리즘의 성능을 나타내는 데에는

최악의 경우에 한해서 나타내는 것이 보통이다.”

Page 9: 01 (Algorithms) Introduction · 2019-09-29 · 자료구조 자료구조분류 3 문자형 정수형 실수형 문자열 리스트(list) 연결리스트(linked list) 스택(stack)

알고리즘 분석 (2/3)

알고리즘 분석의 단계

1. 알고리즘을 판단할 수 있는 입력 자료를 결정

2. 알고리즘을 구성하는 동작을 추상적이고 기본적인 동작들로분해하여 그 동작들의 수행 시간을 계산

3. 수학적인 알고리즘 분석

9

“알고리즘의 분석은 원하는 정도의 결과가 나올 때까지 분석하고,

측정하고, 개선시키는 과정의 반복이다.”

Page 10: 01 (Algorithms) Introduction · 2019-09-29 · 자료구조 자료구조분류 3 문자형 정수형 실수형 문자열 리스트(list) 연결리스트(linked list) 스택(stack)

알고리즘 분석 (3/3)

일반적인 알고리즘 설계 방법

무작위(randomized) 알고리즘 : 난수의 통계적 특성을 이용

분할 정복(divide-and-conquer) 알고리즘

• 분할(divide), 정복(conquer), 결합(combine)의 과정

• 하위 문제들이 서로 독립적이다.

동적 프로그래밍(dynamic-programming)

• 하위 문제들이 서로 독립적이지 않다.

욕심쟁이(greedy) 알고리즘

• 매 순간 가장 좋은 것을 선택

• 예) 허프만 코딩(Huffman coding) : 자료 압축

근사(approximation) 알고리즘

• 최적의 해를 구하는 대신에 “충분히 좋은” 해를 구한다.

• 예) 외판원 여행 문제

10

Page 11: 01 (Algorithms) Introduction · 2019-09-29 · 자료구조 자료구조분류 3 문자형 정수형 실수형 문자열 리스트(list) 연결리스트(linked list) 스택(stack)

11

알고리즘 분석

수행 시간

Page 12: 01 (Algorithms) Introduction · 2019-09-29 · 자료구조 자료구조분류 3 문자형 정수형 실수형 문자열 리스트(list) 연결리스트(linked list) 스택(stack)

알고리즘 분석 : 수행 시간 (1/7)

알고리즘의 수행 시간

입력의 크기에 대해 시간이 어떤 비율로 소요되는지로 표현

• 정렬 : 정렬하고자 하는 개체의 수

• 계승 : 계승치를 구하고자 하는 자연수의 크기

• 도시간의 최단 거리 : 도시들의 총 수와 도시간 간선(도로)의 총수

알고리즘의 수행 시간을 좌우하는 기분

• for(또는 while) 문의 반복 횟수

• 특정 행이 수행되는 횟수

• 함수의 호출 횟수

12

Page 13: 01 (Algorithms) Introduction · 2019-09-29 · 자료구조 자료구조분류 3 문자형 정수형 실수형 문자열 리스트(list) 연결리스트(linked list) 스택(stack)

알고리즘 분석 : 수행 시간 (2/7)

알고리즘의 예 #1

입력의 크기가 n : 간단한 연산

13

sample1(A[ ], n)

{

k = ;

return A[k] ;

}

2n/

“n 에 관계없이 상수 시간이 소요된다.”

Page 14: 01 (Algorithms) Introduction · 2019-09-29 · 자료구조 자료구조분류 3 문자형 정수형 실수형 문자열 리스트(list) 연결리스트(linked list) 스택(stack)

알고리즘 분석 : 수행 시간 (3/7)

알고리즘의 예 #2

배열 A[1, ..., n]의 모든 원소를 더하는 알고리즘

14

“n 에 비례하는 시간이 소요된다.”

sample2(A[ ], n)

{

sum ← 0 ;

for i ← 1 to n

sum ← sum+ A[i] ;

return sum ;

}

Page 15: 01 (Algorithms) Introduction · 2019-09-29 · 자료구조 자료구조분류 3 문자형 정수형 실수형 문자열 리스트(list) 연결리스트(linked list) 스택(stack)

알고리즘 분석 : 수행 시간 (4/7)

알고리즘의 예 #3

배열 A[1, ..., n]의 모든 원소 쌍을 곱한 합을 구하는 알고리즘

15

“n2 에 비례하는 시간이 소요된다.”

sample3(A[ ], n)

{

sum ← 0 ;

for i ← 1 to n

for j ← 1 to n

sum ← sum+ A[i] * A[j] ;

return sum ;

}

Page 16: 01 (Algorithms) Introduction · 2019-09-29 · 자료구조 자료구조분류 3 문자형 정수형 실수형 문자열 리스트(list) 연결리스트(linked list) 스택(stack)

알고리즘 분석 : 수행 시간 (5/7)

알고리즘의 예 #4

배열에서 반을 임의로 뽑아 그 중 최대값을 계속 더하는 알고리즘

16

“n3 에 비례하는 시간이 소요된다.”

sample4(A[ ], n)

{

sum ← 0 ;

for i ← 1 to n

for j ← 1 to n {

k ← A[1 ... n] 에서 임의로 개를 뽑을 때 이들 중 최대값 ;

sum ← sum + k ;

}

return sum ;

}

2n/

n 에 비례하는시간 소요

Page 17: 01 (Algorithms) Introduction · 2019-09-29 · 자료구조 자료구조분류 3 문자형 정수형 실수형 문자열 리스트(list) 연결리스트(linked list) 스택(stack)

알고리즘 분석 : 수행 시간 (6/7)

알고리즘의 예 #5

배열 A[1, ..., n]에서 i < j 인 모든 원소 쌍의 곱을 합산하는알고리즘

17

“n2 에 비례하는 시간이 소요된다.”

sample5(A[ ], n)

{

sum ← 0 ;

for i ← 1 to n-1

for j ← i+1 to n

sum ← sum + A[i] * A[j] ;

return sum ;

}

for 루프의 총 반복횟수 :

2)1(12...)2()1(

nnnn

Page 18: 01 (Algorithms) Introduction · 2019-09-29 · 자료구조 자료구조분류 3 문자형 정수형 실수형 문자열 리스트(list) 연결리스트(linked list) 스택(stack)

알고리즘 분석 : 수행 시간 (7/7)

알고리즘의 예 #6

재귀 호출 알고리즘

18

“n 에 비례하는 시간이 소요된다.”

factorial(n)

{

if (n=1) then

return 1 ;

return n * factorial(n - 1) ;

}

Page 19: 01 (Algorithms) Introduction · 2019-09-29 · 자료구조 자료구조분류 3 문자형 정수형 실수형 문자열 리스트(list) 연결리스트(linked list) 스택(stack)

19

알고리즘 분석

점근적 분석과 표기법

Page 20: 01 (Algorithms) Introduction · 2019-09-29 · 자료구조 자료구조분류 3 문자형 정수형 실수형 문자열 리스트(list) 연결리스트(linked list) 스택(stack)

점근적 분석과 표기법 (1/5)

점근적 분석(Asymptotic Analysis)

알고리즘의 수행시간을 분석할 때는 항상 입력의 크기가 충분히 큰

때에 대해서 분석한다.

• 함수의 점근적 증가율

• 점근적 표기법 (Asymptotic Notations)

Ο, Ω, Θ, ω, ο 표기법

20

)(lim nfn

Page 21: 01 (Algorithms) Introduction · 2019-09-29 · 자료구조 자료구조분류 3 문자형 정수형 실수형 문자열 리스트(list) 연결리스트(linked list) 스택(stack)

점근적 분석과 표기법 (2/5)

21

문제의 크기 (n)

수행 시간

n

함수10 100 1,000 10,000 100,000 1,000,000

1 1 1 1 1 1 1log2n 3 6 9 13 16 19

n 10 102 103 104 105 106

n*log2n 30 664 9,965 105 106 107

n2 102 104 106 108 1010 1012

n3 103 106 109 1012 1015 1018

2n 103 1030 10301 103,010 1010,103 10301,030

“여러 가지 함수의 증가율 비교.”

Page 22: 01 (Algorithms) Introduction · 2019-09-29 · 자료구조 자료구조분류 3 문자형 정수형 실수형 문자열 리스트(list) 연결리스트(linked list) 스택(stack)

점근적 분석과 표기법 (3/5)

O -표기법 O (f(n))

• 점근적 증가율이 f(n)을 넘지 않는 모든 함수들의 집합• 최고차항의 차수가 f(n)과 일치하거나 더 작은 함수들의 집합• 예 : O(n), O(n log n), O(n2), O(2n), …

O – 표기의 수학적 정의• O(g(n)) = { f(n) | ∃c > 0, n0 ≥ 0 s.t.∀n ≥ n0, f(n) ≤ cg(n) }• O(g(n)) = { f(n) | 모든 n ≥ n0 에 대하여

f(n) ≤ cg(n)인 양의 상수 c와 n0가 존재한다. }• f(n) ∈ O(g(n)을 관행적으로 f(n) = O(g(n))이라고 쓴다.

직관적 의미• f(n) = O(g(n)) ⇒ f 는 g 보다 빠르게 증가하지 않는다

• 상수 비율의 차이는 무시

22

Page 23: 01 (Algorithms) Introduction · 2019-09-29 · 자료구조 자료구조분류 3 문자형 정수형 실수형 문자열 리스트(list) 연결리스트(linked list) 스택(stack)

점근적 분석과 표기법 (4/5)

Ω –표기법

Ω(f(n))• 점근적 증가율이 적어도 f(n)의 비율로 증가하는 함수

• 최고차항의 차수가 f(n)과 일치하거나 더 큰 함수들의 집합

• O(f(n))과 대칭적

Ω – 표기의 수학적 정의• Ω(g(n)) = { f(n) | ∃c > 0, n0 ≥ 0 s.t.∀n ≥ n0, cg(n)≤f(n) }

• Ω(g(n)) = { f(n) | 모든 n ≥ n0 에 대하여

cg(n) ≤ f(n)인 양의 상수 c와 n0가 존재한다. }

직관적 의미• f(n) = Ω(g(n)) ⇒ f 는 g 보다 느리게 증가하지 않는다.

23

Page 24: 01 (Algorithms) Introduction · 2019-09-29 · 자료구조 자료구조분류 3 문자형 정수형 실수형 문자열 리스트(list) 연결리스트(linked list) 스택(stack)

점근적 분석과 표기법 (5/5)

Θ –표기법

Θ(f(n))• 점근적 증가율이 f(n)과 일치하는 모든 함수들의 집합

• 최고차항의 차수가 f(n)과 일치하는 모든 함수들의 집합

Θ –표기의 수학적 정의• Θ(f(n)) = O(f(n)) ∩ Ω(f(n))

직관적 의미• g(n) = Θ(f(n)) ⇒ g 는 f 와 같은 정도로 증가한다.

24

Page 25: 01 (Algorithms) Introduction · 2019-09-29 · 자료구조 자료구조분류 3 문자형 정수형 실수형 문자열 리스트(list) 연결리스트(linked list) 스택(stack)

참고문헌

25

[1] 주우석, “IT CookBook, CㆍC++ 로 배우는 자료구조론”, 한빛아카데미, 2015.

[2] 문병로, “IT CookBook, 쉽게 배우는 알고리즘 - 관계 중심의 사고법”(개정판), 개정판, 한빛아카데미, 2018.

[3] 카사이 아사오, 진명조 역, “C 언어로 배우는 알고리즘 입문”, 한빛미디어, 2005.

[4] 카일 루든(Kyle Loudon), 허욱 역, “Algorithms with C : C로 구현한 알고리즘”, 한빛미디어, 2000.

[5] 이재규, “C 로 배우는 알고리즘 : 개념과 기본 알고리즘”, 도서출판 세화, 2007.

이 강의자료는 저작권법에 따라 보호받는 저작물이므로 무단 전제와 무단 복제를 금지하며,

내용의 전부 또는 일부를 이용하려면 반드시 저작권자의 서면 동의를 받아야 합니다.

Copyright © Clickseo.com. All rights reserved.