1 / 24

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

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

eric-hull
Download Presentation

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

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 1장. 자료구조의 개요1절. 자료구조와 알고리즘 2절. 추상데이터 타입 3절. 성능 분석 이 완 직 (wjlee@pnu.ac.kr) 2010년 1학기

  2. 학습 목표 • 자료구조와 알고리즘의 개념을 이해한다. • 알고리즘의 표현 방법을 알아본다. • 데이터의 추상화의 필요성을 이해한다. • 알고리즘의 선택 기준과 성능 분석 방법을 알아본다.

  3. 1. 자료구조와 알고리즘 • 자료구조 • 데이터를 프로그램 상에서 표현하는 방법 • 데이터의 특성에 따라서 분류하여 구성하고 저장 및 처리하는 모든 작업을 포함 • 자료구조의 구분

  4. 1. 자료구조와 알고리즘 • 알고리즘 • 문제를 풀기 위한 절차 • 특정 작업을 수행하기 위한 명령어들의 집합 • 알고리즘이 되기 위한 5 가지 조건

  5. 1. 자료구조와 알고리즘 • 알고리즘 기술 방법 • 1) 자연어(국어, 영어) • 알고리즘 조건 중, 명확성을 만족하기 힘듦 • 2) 흐름도(flowchart) • 가장 명확하고판독하기 좋지만, 복잡한 알고리즘 표현이 어렵다. • 3) 유사코드(pseudo-code) • 4) C와 같은 프로그래밍 언어 • 교재에서는 C언어와 자연어를 혼용해서 사용

  6. 1. 자료구조와 알고리즘 • [예제 1-1] 절대값: 주어진 정수에 대한 절대값 구하기 • 1) 자연어 정수 값을 a에 저장한다. a에 저장된 값이 0보다 작을 경우에만 a에 -부호를 붙인 후에 a에 저장한다. • 2) 흐름도

  7. 1. 자료구조와 알고리즘 • [예제 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; }

  8. 2. 추상 데이터 타입 • 데이터 추상화(data abstraction) • 데이터의 명세(specification)와 구현(implementation)을 구분 • 정의: 데이터 타입(data type) • 데이터의 집합과 이러한 데이터에 적용할 수 있는 연산(operation)의 집합 • Ex) int 데이터 타입 • 데이터: {0,+1, -1, +2, -2, …, MAXINT, MININT} • 연산: {+, -, *, /} • 참고) MAXINT, MININT는 특정 기계에서 int 타입으로 표현할수 있는 가장 큰 수와 작은 수이다. • 정의: 추상 데이터 타입(abstract data type; ADT) • 데이터의 명세와 이들 데이터에 대한 연산의 명세가 데이터의 표현과 연산의 구현으로부터 분리된 방식으로 구성된 데이터 타입

  9. 2. 추상 데이터 타입 • 추상화 개념 • DVD 플레이어: 사용자는 DVD 플레이어의 동작 방식만 알면 되고, 내부 구현에 대해서는 신경 쓸 필요가 없다. • 추상화: 명세와 구현을 불리 • 명세: 데이터 타입을 수학적으로 정의 • 데이터와 연산이 무엇(what)인가를 정의, 어떻게(how) 구현할것인지는 정의하지 않음 • 소프트웨어 개발의 중요한 개념 • 시스템 개발에 필요한 인력과 시간을 절감 • 대규모 팀 프로젝트 개발에 유용

  10. 2. 추상 데이터 타입 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-y end NaturalNumber

  11. 3. 성능 분석 • 동일한 문제를 해결하기 위해 여러 가지 알고리즘이 존재할 수 있음 • 가장 효율적인 알고리즘은? • 3.1 성능 평가 • 프로그램의 성능 평가(performance evaluation)를 하기 위한 알고리즘의 효율성 • 공간적 효율성과 시간적 효율성이라는 범주에서 고려 • 정의: 프로그램의 공간 복잡도(space complexity) • 프로그램을 실행시켜 완료하는 데 필요한 공간의 양 • 정의: 프로그램의 시간 복잡도(time complexity) • 프로그램을 실행시켜 완료하는데 필요한 컴퓨터 시간의 양

  12. 3. 성능 분석 • 3.1.1 공간 복잡도 • 공간 복잡도 = 고정공간 + 가변공간 • 고정공간 • 프로그램 입출력 개수와 횟수와 상관없이 고정적인 저장공간 • 명령어 공간(프로그램 코드), 단순 변수, 상수들을 위한 공간 • 가변공간 • 실행과정의 자료와 변수의 저장공간과 함수 호출/리턴에 관련된 정보를 저장하는 공간

  13. 3. 성능 분석 • 3.1.2 시간 복잡도 • 시간 복잡도 = 컴파일 시간 + 실행 시간 • 컴파일 시간: 고정적인 시간, 시간 복잡도에 큰 영향을 미치지 못함 • 실행 시간이 가장 중요한 요소 • 실행 시간 • H/W 환경(CPU 성능, 가속장치 유무, 입출력장치 성능 등)과 S/W 환경(프로그램 언어, 운영체제, 컴파일러 등)에 따라 달라짐 • 실행 환경과 무관한 개략적인 분석 방법을 사용 • 입력 데이터 수 n에 대한 시간 함수 t(n)로 표현 • 할당, 비교, 계산, 입/출력 등의 연산 한번에 소요되는 시간을 모두 1로 가정 • 이러한 연산의 수행 횟수는 입력 데이터 개수 n에 따라 달라짐 • Ex) t(n) = 3n+2

  14. 3. 성능 분석 • 실행시간(연산 수행횟수) 예 알고리즘 A: ta(n) = n2알고리즘 B: tb(n) = 2n+1

  15. 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

  16. 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) = ?

  17. 3. 성능 분석 • 3.2 점근 표기법(O, Ω, Θ) • 입력 개수가 많은 경우에는 차수가 가장 큰 항이 영향을 가장 크게 미치고 다른 항들은 상대적으로 무시될 수 있다.

  18. 3. 성능 분석 • 3.3 빅오(Big “Oh”) 표기법(O) • 빅오 표기법은 O 기호를 사용 알고리즘의 시간적인 효율을 분석, 입력데이터가 최악일 때 알고리즘이 보이는 효율을 기준 • Worst case를 기준으로 “최악의 데이터라도 길어야 이정도 시간이 걸린다”는 의미 수학적 정의 [빅오(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 + 2 cg(n) = 4n

  19. 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() 표현을 사용

  20. 3. 성능 분석 • 빅오 표기법에 따른 점근적인 실행시간 비교

  21. 3. 성능 분석 • 3.3 빅오메가(Ω) 표기법 • 빅오메가(Big Omega, Ω) 표기법은 빅오 기호의 반대 개념이다. 알고리즘 수행 시간의 하한(Lower Bound)으로서 “최소한 이만한 시간은 걸린다”라는 의미이다. 수학적 정의 [오메가(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)

  22. 3. 성능 분석 • [예제 1-4] • 100n+6 = Ω(n) 증명 • 10n2+4n+2 = Ω(n2) 증명 • 6*2n+n2 = Ω(2n) 증명 • 빅오와 동일하게 오메가 표기법도 여러 g(n) 함수를 가지게 된다. • 5n2+3n = Ω(n2), Ω(n),Ω(1)을 모두 만족 • Ω 표기법은 수행 시간의 하한(적어도 이만한 시간 이상 걸린다)이므로 가장 큰 Ω 표기법이 의미 있는 값이다.

  23. 3. 성능 분석 • 3.4 빅세타(Θ) 표기법 • Ω(N)인 문제에 O(N)인 알고리즘이 존재할 경우 빅세타라고 한다. 수학적 정의 [세타(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)

  24. 3. 성능 분석 • [예제 1-5] • 3n+2 = Θ(n) 증명 • n >= 2 일때, 3n <= 3n+2 <= 4n 을 만족하므로 3n+2 = Θ(n)을 만족한다. • 10n2+4n+2 = Θ(n2) 증명 • 6*2n+n2 = Θ(2n) 증명 • 빅세타 표기법은 상한과 하한을 모두 만족하므로 빅오나 빅오메가 표기법보다 가장 정확한 실행시간 측정 방법이다.

More Related