1 장 . 자료구조의 개요 1 절 . 자료구조와 알고리즘 2 절 . 추상데이터...

24
이 이 이 ([email protected] ) 2010 이 1 이이 1 장 . 장장장장장 장장 1 장 . 장장장장장 장장장장 2 장 . 장장장장장 장장 3 장 . 장장 장장

Upload: eric-hull

Post on 30-Dec-2015

112 views

Category:

Documents


0 download

DESCRIPTION

1 장 . 자료구조의 개요 1 절 . 자료구조와 알고리즘 2 절 . 추상데이터 타입 3 절 . 성능 분석. 이 완 직 ( [email protected] ) 2010 년 1 학기. 학습 목표. 자료구조와 알고리즘의 개념을 이해한다 . 알고리즘의 표현 방법을 알아본다 . 데이터의 추상화의 필요성을 이해한다 . 알고리즘의 선택 기준과 성능 분석 방법을 알아본다. 1. 자료구조와 알고리즘. 자료구조 데이터를 프로그램 상에서 표현하는 방법 - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: 1 장 .  자료구조의 개요 1 절 .  자료구조와 알고리즘 2 절 .  추상데이터 타입 3 절 .  성능 분석

이 완 직 ([email protected])2010 년 1 학기

1 장 . 자료구조의 개요1 절 . 자료구조와 알고리즘2 절 . 추상데이터 타입3 절 . 성능 분석

Page 2: 1 장 .  자료구조의 개요 1 절 .  자료구조와 알고리즘 2 절 .  추상데이터 타입 3 절 .  성능 분석

1. 자료구조와 알고리즘의 개념을 이해한다 .

2. 알고리즘의 표현 방법을 알아본다 .

3. 데이터의 추상화의 필요성을 이해한다 .

4. 알고리즘의 선택 기준과 성능 분석 방법을 알아본다 .

학습 목표

2

Page 3: 1 장 .  자료구조의 개요 1 절 .  자료구조와 알고리즘 2 절 .  추상데이터 타입 3 절 .  성능 분석

• 자료구조– 데이터를 프로그램 상에서 표현하는 방법– 데이터의 특성에 따라서 분류하여 구성하고 저장 및 처리하는

모든 작업을 포함

• 자료구조의 구분

1. 자료구조와 알고리즘

3

Page 4: 1 장 .  자료구조의 개요 1 절 .  자료구조와 알고리즘 2 절 .  추상데이터 타입 3 절 .  성능 분석

• 알고리즘– 문제를 풀기 위한 절차– 특정 작업을 수행하기 위한 명령어들의 집합

• 알고리즘이 되기 위한 5 가지 조건

1. 자료구조와 알고리즘

4

Page 5: 1 장 .  자료구조의 개요 1 절 .  자료구조와 알고리즘 2 절 .  추상데이터 타입 3 절 .  성능 분석

• 알고리즘 기술 방법

– 1) 자연어 ( 국어 , 영어 )• 알고리즘 조건 중 , 명확성을 만족하기 힘듦

– 2) 흐름도 (flowchart)• 가장 명확하고 판독하기 좋지만 , 복잡한 알고리즘 표현이 어렵다 .

– 3) 유사코드 (pseudo-code)

– 4) C 와 같은 프로그래밍 언어

• 교재에서는 C 언어와 자연어를 혼용해서 사용

1. 자료구조와 알고리즘

5

Page 6: 1 장 .  자료구조의 개요 1 절 .  자료구조와 알고리즘 2 절 .  추상데이터 타입 3 절 .  성능 분석

• [ 예제 1-1] 절대값 : 주어진 정수에 대한 절대값 구하기

– 1) 자연어정수 값을 a 에 저장한다 . a 에 저장된 값이 0 보다 작을 경우에만 a 에 - 부호를 붙인 후에 a 에 저장한다 .

– 2) 흐름도

1. 자료구조와 알고리즘

6

Page 7: 1 장 .  자료구조의 개요 1 절 .  자료구조와 알고리즘 2 절 .  추상데이터 타입 3 절 .  성능 분석

• [ 예제 1-1] 절대값

– 3) 의사 코드a ← -5; if a < 0 then

a ← -a;print a;

– 4) C 언어int abs(int a){ if (a < 0) //a 가 0 보다 작으면 a=-a; // 부호를 변경한다 . return a;}

1. 자료구조와 알고리즘

7

Page 8: 1 장 .  자료구조의 개요 1 절 .  자료구조와 알고리즘 2 절 .  추상데이터 타입 3 절 .  성능 분석

• 데이터 추상화 (data abstraction) – 데이터의 명세 (specification) 와 구현 (implementation) 을

구분

• 정의 : 데이터 타입 (data type)– 데이터의 집합과 이러한 데이터에 적용할 수 있는 연산

(operation) 의 집합

– Ex) int 데이터 타입• 데이터 : {0,+1, -1, +2, -2, …, MAXINT, MININT}• 연산 : {+, -, *, /}

– 참고 ) MAXINT, MININT 는 특정 기계에서 int 타입으로 표현할수 있는 가장 큰 수와 작은 수이다 .

• 정의 : 추상 데이터 타입 (abstract data type; ADT)– 데이터의 명세와 이들 데이터에 대한 연산의 명세가 데이터의

표현과 연산의 구현으로부터 분리된 방식으로 구성된 데이터 타입

2. 추상 데이터 타입

8

Page 9: 1 장 .  자료구조의 개요 1 절 .  자료구조와 알고리즘 2 절 .  추상데이터 타입 3 절 .  성능 분석

• 추상화 개념– DVD 플레이어 : 사용자는 DVD

플레이어의 동작 방식만 알면 되고 , 내부 구현에 대해서는 신경 쓸 필요가 없다 .

2. 추상 데이터 타입

9

• 추상화 : 명세와 구현을 불리– 명세 : 데이터 타입을 수학적으로 정의

– 데이터와 연산이 무엇 (what) 인가를 정의 , 어떻게 (how) 구현할 것인지는 정의하지 않음

– 소프트웨어 개발의 중요한 개념– 시스템 개발에 필요한 인력과 시간을 절감– 대규모 팀 프로젝트 개발에 유용

Page 10: 1 장 .  자료구조의 개요 1 절 .  자료구조와 알고리즘 2 절 .  추상데이터 타입 3 절 .  성능 분석

ADT 1.1 : 자연수 (NaturalNumber) 추상 데이터 타입

ADT NaturalNumber is

객체 : 정수의 순서가 있는 부분 범위로서 , 0 부터 해당 컴퓨터의 최대 정수 (MAXINT) 까지 값을 갖음 함수 : 모든 x, y ∈ NaturalNumber, TRUE, FALSE ∈ Boolean 이고 +, -, <, ==, = 는 일반적인 정수 연산에 대해

Zero():NaturalNumber ::= 0 IsZero(x):Boolean ::= if (x == 0) IsZero = TRUE

else IsZero = FALSE Add(x,y):NaturalNumber ::= if (x+y <= MAXINT) Add = x+y

else Add = MAXINT Equal(x,y):Boolean ::= if (x == y) Equal = TRUE

else Equal = FALSE Successor(x):NaturalNumber ::= if (x == MAXINT) Successor = x

else Successor = x+1 Subtract(x,y):NaturalNumber ::= if (x<y) Subtract = 0

else Subtract = x-yend NaturalNumber

2. 추상 데이터 타입

10

Page 11: 1 장 .  자료구조의 개요 1 절 .  자료구조와 알고리즘 2 절 .  추상데이터 타입 3 절 .  성능 분석

• 동일한 문제를 해결하기 위해 여러 가지 알고리즘이 존재할 수 있음

• 가장 효율적인 알고리즘은 ?

• 3.1 성능 평가– 프로그램의 성능 평가 (performance evaluation) 를 하기 위한

알고리즘의 효율성– 공간적 효율성과 시간적 효율성이라는 범주에서 고려

– 정의 : 프로그램의 공간 복잡도 (space complexity)• 프로그램을 실행시켜 완료하는 데 필요한 공간의 양

– 정의 : 프로그램의 시간 복잡도 (time complexity)• 프로그램을 실행시켜 완료하는데 필요한 컴퓨터 시간의 양

3. 성능 분석

11

Page 12: 1 장 .  자료구조의 개요 1 절 .  자료구조와 알고리즘 2 절 .  추상데이터 타입 3 절 .  성능 분석

• 3.1.1 공간 복잡도

– 공간 복잡도 = 고정공간 + 가변공간

• 고정공간– 프로그램 입출력 개수와 횟수와 상관없이 고정적인 저장공간– 명령어 공간 ( 프로그램 코드 ), 단순 변수 , 상수들을 위한 공간

• 가변공간– 실행과정의 자료와 변수의 저장공간과 함수 호출 /리턴에 관련된

정보를 저장하는 공간

3. 성능 분석

12

Page 13: 1 장 .  자료구조의 개요 1 절 .  자료구조와 알고리즘 2 절 .  추상데이터 타입 3 절 .  성능 분석

• 3.1.2 시간 복잡도– 시간 복잡도 = 컴파일 시간 + 실행 시간

• 컴파일 시간 : 고정적인 시간 , 시간 복잡도에 큰 영향을 미치지 못함• 실행 시간이 가장 중요한 요소

– 실행 시간• H/W 환경 (CPU 성능 , 가속장치 유무 , 입출력장치 성능 등 ) 과

S/W 환경 ( 프로그램 언어 , 운영체제 , 컴파일러 등 ) 에 따라 달라짐• 실행 환경과 무관한 개략적인 분석 방법을 사용

• 입력 데이터 수 n 에 대한 시간 함수 t(n) 로 표현– 할당 , 비교 , 계산 , 입 /출력 등의 연산 한번에 소요되는 시간을 모두 1

로 가정– 이러한 연산의 수행 횟수는 입력 데이터 개수 n 에 따라 달라짐– Ex) t(n) = 3n+2

3. 성능 분석

13

Page 14: 1 장 .  자료구조의 개요 1 절 .  자료구조와 알고리즘 2 절 .  추상데이터 타입 3 절 .  성능 분석

• 실행시간 ( 연산 수행횟수 ) 예

알고리즘 A: ta(n) = n2 알고리즘 B: tb(n) = 2n+1

3. 성능 분석

14

Page 15: 1 장 .  자료구조의 개요 1 절 .  자료구조와 알고리즘 2 절 .  추상데이터 타입 3 절 .  성능 분석

• 프로그램 단계 (step) 수 측정 : 연산의 총 횟수를 정확히 계산

– 주석 /선언문 : 0 step– 산술식 및 지정문 : 1 step

• a = b; // 1 a = b + c; // 2– 반복문 : 반복에 연결된 문장은 반복마다 그 문장의 step 수 추가

• while <expr>: 매 반복시 마다 expr step 추가• do … while <expr> : 매 반복시 마다 expr step 추가• for(<init-stmt>; <expr1>; <expr2>) :

– 첫 번째 반복에는 <init-stmt> + <expr1> step 추가– 두 번째 반복부터는 <expr1> + <expr2> step 추가

– if(<expr>), switch(<expr>): expr step 추가– 분기 명령문 (continue, break, goto, return): 1 step– 함수 호출 : 1 step, 함수 명령문 : 0 step

3. 성능 분석

15

Page 16: 1 장 .  자료구조의 개요 1 절 .  자료구조와 알고리즘 2 절 .  추상데이터 타입 3 절 .  성능 분석

• [ 예제 1-2] 나눗셈 예제

int div1(const int n){ return n/3;}

int div2(const int n){ int q = 0; while(n>=3) { n=n-3; q=q+1; } return n;}

tdiv1(n) = ? tdiv2(n) = ?

3. 성능 분석

16

Page 17: 1 장 .  자료구조의 개요 1 절 .  자료구조와 알고리즘 2 절 .  추상데이터 타입 3 절 .  성능 분석

• 3.2 점근 표기법 (O, Ω, Θ)

– 입력 개수가 많은 경우에는 차수가 가장 큰 항이 영향을 가장 크게 미치고 다른 항들은 상대적으로 무시될 수 있다 .

3. 성능 분석

17

Page 18: 1 장 .  자료구조의 개요 1 절 .  자료구조와 알고리즘 2 절 .  추상데이터 타입 3 절 .  성능 분석

• 3.3 빅오 (Big “Oh”) 표기법 (O)– 빅오 표기법은 O 기호를 사용 알고리즘의 시간적인 효율을 분

석 , 입력데이터가 최악일 때 알고리즘이 보이는 효율을 기준– Worst case 를 기준으로 “ 최악의 데이터라도 길어야 이정도

시간이 걸린다” 는 의미

3. 성능 분석

18

수학적 정의 [ 빅오 (Big "oh")] : 모든 n, n≥n0, 에 대해 f(n) ≤ cg(n)인 조건을 만족하는 두 양의 상수 c 와 n0 가 존 재 하 기 만 하 면 f(n) = Ο(g(n))(f of n 은 "big-oh" of g of n이라 읽음 ) 이다 .

f(n) = 3n + 2cg(n) = 4n

Page 19: 1 장 .  자료구조의 개요 1 절 .  자료구조와 알고리즘 2 절 .  추상데이터 타입 3 절 .  성능 분석

• [ 예제 1-3]– f(n) = 3n+2 는 O(n) 증명– f(n) = 100n+6 은 O(n) 증명– f(n) = 10n2+4n+2 는 O(n2) 증명

– f(n) = 3n+2 는 O(n2) 증명

• 위의 예와 같이 3n+2 는 O(n), O(n2) 를 모두 만족– O() 표기는 최악의 경우를 가정한 점근 표기법– “ 길어야 n 시간이면 된다 .” 는 당연히 “ 길어야 n2 시간이면

된다” 를 만족– 하지만 일반적인 경우 , 가장 작은 상한 범위 (Upper Bound)

가 의미 있으므로 최소 O() 표현을 사용

3. 성능 분석

19

Page 20: 1 장 .  자료구조의 개요 1 절 .  자료구조와 알고리즘 2 절 .  추상데이터 타입 3 절 .  성능 분석

• 빅오 표기법에 따른 점근적인 실행시간 비교

3. 성능 분석

20

Page 21: 1 장 .  자료구조의 개요 1 절 .  자료구조와 알고리즘 2 절 .  추상데이터 타입 3 절 .  성능 분석

• 3.3 빅오메가 (Ω) 표기법– 빅오메가 (Big Omega, Ω) 표기법은 빅오 기호의 반대

개념이다 . 알고리즘 수행 시간의 하한 (Lower Bound) 으로서 “최소한 이만한 시간은 걸린다”라는 의미이다 .

3. 성능 분석

21

수학적 정의 [ 오메가 (Omega)] : 모든 n, n≥n0, 에 대해 f(n) ≥ cg(n)을 만족하는 두 양의 상수 c 와 n0 가 존재하기만 하면 f(n) = Ω(g(n)) (f of n 은 "omega" of g of n 이 라 읽음 ) 이다 .

3n + 2 = Ω(n)

Page 22: 1 장 .  자료구조의 개요 1 절 .  자료구조와 알고리즘 2 절 .  추상데이터 타입 3 절 .  성능 분석

• [ 예제 1-4]– 100n+6 = Ω(n) 증명– 10n2+4n+2 = Ω(n2) 증명 – 6*2n+n2 = Ω(2n) 증명

• 빅오와 동일하게 오메가 표기법도 여러 g(n) 함수를 가지게 된다 .– 5n2+3n = Ω(n2), Ω(n),Ω(1) 을 모두 만족– Ω 표기법은 수행 시간의 하한 ( 적어도 이만한 시간 이상 걸린

다 ) 이므로 가장 큰 Ω 표기법이 의미 있는 값이다 .

3. 성능 분석

22

Page 23: 1 장 .  자료구조의 개요 1 절 .  자료구조와 알고리즘 2 절 .  추상데이터 타입 3 절 .  성능 분석

• 3.4 빅세타 (Θ) 표기법– Ω(N) 인 문제에 O(N) 인 알고리즘이 존재할 경우 빅세타라고

한다 .

3. 성능 분석

23

수학적 정의 [ 세타 (Theta)] : 모든 n, n≥n0, 에 대해 C1g(n) ≤ f(n) ≤ C2g(n) 을 만족하는 세 양의 상수 C1, C2 와 n0 가 존재하기만 하면 f(n) = Θ(g(n)) (f of n 은 "theta" of g of n 이라 읽음 ) 이다 .3n + 2 = Θ(n)

Page 24: 1 장 .  자료구조의 개요 1 절 .  자료구조와 알고리즘 2 절 .  추상데이터 타입 3 절 .  성능 분석

• [ 예제 1-5]– 3n+2 = Θ(n) 증명

• n >= 2 일때 , 3n <= 3n+2 <= 4n 을 만족하므로 3n+2 = Θ(n) 을 만족한다 .

– 10n2+4n+2 = Θ(n2) 증명 – 6*2n+n2 = Θ(2n) 증명

• 빅세타 표기법은 상한과 하한을 모두 만족하므로 빅오나 빅오메가 표기법보다 가장 정확한 실행시간 측정 방법이다 .

3. 성능 분석

24