제 1 장 데이터 구조 개요

54
1 1 제제제 제제 제제 제제제 제제 제제

Upload: heavynne-mays

Post on 04-Jan-2016

67 views

Category:

Documents


0 download

DESCRIPTION

제 1 장 데이터 구조 개요. 컴퓨터 시스템. 데이터. 정보. 데이터. 데이터 : 컴퓨터에 의해 처리하려는 대상 정 보 : 어떤 문제를 해결하기 위해 컴퓨터 시스템에 의해 처리된 데이터 또는 의미 있는 데이터 데이터의 종류 수치 데이터 – 예 ) 정수 , 실수 , 배정도 실수 , 복소수 등 문자 데이터 – 예 ) 영문자 , ASCII, 한글코드 등 논리 데이터 – 예 ) 참 (True) / 거짓 (False) 포인터 데이터 – 예 ) 기억장소의 주소. - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: 제  1  장  데이터 구조 개요

제 제 1 1 장 장

데이터 구조 개요데이터 구조 개요

Page 2: 제  1  장  데이터 구조 개요

데이터 : 컴퓨터에 의해 처리하려는 대상

정 보 : 어떤 문제를 해결하기 위해 컴퓨터 시스템에 의해 처리된 데이터 또는 의미 있는 데이터

데이터의 종류 수치 데이터 – 예 ) 정수 , 실수 , 배정도 실수 , 복소수 등 문자 데이터 – 예 ) 영문자 , ASCII, 한글코드 등 논리 데이터 – 예 ) 참 (True) / 거짓 (False)

포인터 데이터 – 예 ) 기억장소의 주소

데이터데이터

컴퓨터 시스템데이터 정보

Page 3: 제  1  장  데이터 구조 개요

정수 정수의 표현

정수를 표현하는 방법 ( 양의 정수는 모두 동일 )

부호있는 절대치 부호있는 1 의 보수 부호있는 2 의 보수

수치수치 데이터 데이터 - - 정수 정수 (1) (1)

크기 표시 부분 ((n-1)개 비트 )

부호비트

n-1 n-2 n-3 ..... 3 2 1 0

Page 4: 제  1  장  데이터 구조 개요

정수 정수 표현의 예 (4 비트로 표현 시 )

10 진수 부호있는 부호있는 부호있는 절대치 1 의보수 2 의 보수

+7 0111 0111 0111

+0 0000 0000 0000

-0 1000 1111 -

-5 1101 1010 1011

-8 - - 1000

수치수치 데이터 데이터 - - 정수 정수 (2) (2)

Page 5: 제  1  장  데이터 구조 개요

수치수치 데이터 데이터 - - 실수 실수 (1) (1)

실수 고정 소수점 (Fixed point)

소수점을 사용하여 표현하는 방법 컴퓨터와 외부와의 입출력에 사용 유효 숫자에 비해 자리수가 너무 클 경우 , 저장하기에 비효율적

예 ) 0.00000012 9300000000.0

Page 6: 제  1  장  데이터 구조 개요

수치수치 데이터 데이터 - - 실수 실수 (2) (2)

실수 부동 소수점 (Floating point)

지수부와 가수부로 나누어 표현

예 ) 0.00000012 = 0.12 0.12 10 10-6-6

9300000000.0 = 0.93 0.93 10 101010

정규화 (Normalization) 가수 부분의 소수점 밑 첫자리가 0 이 아니도록 정렬

예 ) –18.6875 = 10010.10112 = 0.1001010110.10010101122 2 255

Page 7: 제  1  장  데이터 구조 개요

수치수치 데이터 데이터 - - 실수 실수 (3) (3)

실수 부동 소수점 (Floating point) ( 계속 )

지수부분 = 실제 지수 + 편중값

예 ) 0.1001010110.10010101122 2 255

실제 지수 실제 지수 55

편중값 편중값 64 64 인 경우인 경우 , , 지수부분은 지수부분은 69 = 100010169 = 1000101

11 10001011000101 100101011000000000000000100101011000000000000000

부호 지수부분 가수부분

Page 8: 제  1  장  데이터 구조 개요

수치데이터 – 기타 수치 데이터 수치데이터 – 기타 수치 데이터 (1)(1)

기타 수치 데이터의 표현 배정도 실수 (Double-precision floating point number) 복소수 코드화된 10 진수 (BCD)

여러 가지 10 진 코드 BCD 8421 코드

10 진법 숫자를 각 자리수 별로 4 비트로 표현 2421 코드

BCD 8421 코드와 동일하지만 가중값을 2, 4, 2, 1 로 함 보수를 쉽게 구할 수 있음

Excess-3 코드 BCD 8421 코드에 00112 를 더해서 구함 보수를 쉽게 구할 수 있음

Page 9: 제  1  장  데이터 구조 개요

수치데이터 – 기타 수치 데이터 수치데이터 – 기타 수치 데이터 (2)(2)

여러 가지 10 진 코드 Gray 코드

가중치 값을 갖지 않고 4 비트 2 진 코드로부터 다음과 같이 정의 맨 왼쪽의 자리에 있는 2 진 코드의 숫자를 그대로 가져옴 맨 왼쪽에서부터 시작하여 오늘쪽의 인접 자릿수에 있는 숫자를 합하여 코드의

해당 자리 숫자를 만들어 냄 이를 계속 반복

Excess-3 Gray 코드 Gray 코드와 유사하지만 , Excess-3 코드를 기본으로 만들어짐

Hamming 코드 BCD 코드를 기본으로 하여 오류를 검출 , 교정할 목적으로 3 개의

비트를 추가하여 만들어짐

Page 10: 제  1  장  데이터 구조 개요

비수치 데이터 비수치 데이터 (1)(1)

문자 데이터 영문자 (A-Z), 숫자 (0-9), 특수문자로 구성

6 비트 이상 필요 ASCII (American Standard Code for Information Exchange)

7 비트 코드 EBCDIC (Extended Binary Coded Decimal Interchange)

8 비트 코드 한글코드

완성형 , 조합형

논리 데이터 참 , 거짓만을 나타내는 데이터

Page 11: 제  1  장  데이터 구조 개요

비수치 데이터 비수치 데이터 (2)(2)

포인터 데이터 현재의 데이터에 다음 데이터의 위치 정보를 포함하여 표현 현재의 데이터로부터 다음 데이터의 주소 결정 다음 데이터의 위치를 나타내는 데이터를 포인터 (pointer) 또는 링크

(link) 라고 부름

실수 실수 2.718282.71828 의 부동소수점 표현의 부동소수점 표현

포 인 터포 인 터

포 인 터포 인 터

포 인 터포 인 터

포인터를 사용한 경우포인터를 사용한 경우

실수 실수 2.718282.71828 의 부동소수점 표현의 부동소수점 표현

실수 실수 2.718282.71828 의 부동소수점 표현의 부동소수점 표현

실수 실수 2.718282.71828 의 부동소수점 표현의 부동소수점 표현

실수 실수 2.718282.71828 의 부동소수점 표현의 부동소수점 표현

포인터를 사용하지 않은 경우포인터를 사용하지 않은 경우

Page 12: 제  1  장  데이터 구조 개요

비수치 데이터 비수치 데이터 (3)(3)

포인터 데이터의 장점 기억장치 측면에서 효율적이다 .

데이터의 형태와 복잡성에 관계없이 참조할 수 있는 방법을 제공해 준다 .

데이터 구조의 재구성이 빠르다 .

Page 13: 제  1  장  데이터 구조 개요

비수치 데이터 비수치 데이터 (4)(4)

포인터가 데이터를 참조하는 방식 절대 방식

참조될 데이터가 저장되어 있는 기억장치의 절대주소를 이용 상대 방식

기준 위치로부터 포인터가 가리키는 데이터의 위치까지의 차이값을 이용

기준 위치는 기준 레지스터 (Base Register) 라는 특정 레지스터에 저장예 ) 기준위치 : 72467246, 포인터의 값 : 1212

포인터가 가리키는 데이터의 절대주소 : 7246+12 = 72587246+12 = 7258

오늘날의 대부분 컴퓨터는 상대 방식을 채택

Page 14: 제  1  장  데이터 구조 개요

추상화 추상화 (1)(1)

추상화 (abstraction) 의 정의 많은 표상 (image) 에서 공통되는 측면이나 중요한 속성을

뽑아내어 이를 사유의 대상으로 삼는 작용

추상화구체적인 대상들

구체화

개념적인 대상

3

추상화의 정의추상화의 정의 추상화의 예추상화의 예

Page 15: 제  1  장  데이터 구조 개요

추상화 추상화 (2)(2)

전산학 분야에서의 추상화

프로그래머 입장 : x 의 기억장소에 상수 10 이 저장 하드웨어 입장 : 상수 10 의 표시방법 , 변수 x 의 구현방법 ,

치환연산의 처리방법에 대한 이해 다양한 컴퓨터에서 그 컴퓨터의 고유 방식에 따라 상수 10 이

표현되고 저장되는 모든 구체적 경우를 프로그래밍 언어의 치환문으로 추상화

int x = 10;int x = 10;

Page 16: 제  1  장  데이터 구조 개요

문제 해결과 추상화 문제 해결과 추상화 (1)(1)

문제 해결의 단계 문제 도출 단계 : 현실세계로부터 관심 있는 부분을 문제로 규정 문제 변환 단계 : 처리대상과 처리방식에 따라 데이터와 알고리즘

을 규정하여 프로그램을 작성하는 단계 실행 단계 : 프로그램이 해당 컴퓨터의 기계어로 바뀌어 실행되고

결과 출력

정확한 문제해결은 정확한 데이터와 알고리즘의 선택에 달려 있음

Page 17: 제  1  장  데이터 구조 개요

문제 해결과 추상화 문제 해결과 추상화 (2)(2)

컴퓨터에 의한 문제 해결컴퓨터에 의한 문제 해결

단계단계문제변환문제변환

수행자수행자사 람사 람

실행실행

컴퓨터컴퓨터

결과분석결과분석

사 람사 람

문제도출문제도출

문제 처리

대상

처리방식

자료

알고

리즘 프로그램

기계어

풀이결과

해답현실

Page 18: 제  1  장  데이터 구조 개요

문제 해결과 추상화 문제 해결과 추상화 (3)(3)

데이터와 연산 컴퓨터 시스템은 문제 해결을 위한 적합한 연산을 통하여

정보를 얻는 일을 수행 다양한 데이터가 사용되면 데이터마다 서로 다른 연산 수행

3 + 2 = 5 정수집합 자료

덧셈

뺄셈

곱셈

나눗셈

연 산

숫자 및 연산 기호숫자 및 연산 기호 정수 집합과 사칙 연산정수 집합과 사칙 연산

-95

-2

10-1

2100

Page 19: 제  1  장  데이터 구조 개요

문제 해결과 추상화 문제 해결과 추상화 (4)(4)

연산의 추상화

구현에 대한 자세한 내용을 모르지만 수행되는 기능만을 아는 것 무엇이 수행 (what to do) 되는지는 알지만 어떻게 수행 (how to do)

되는지는 모름 프로그래밍 언어에서 제공하는 내장 함수

int x = 3 + 2;int x = 3 + 2;float y = 3.5 + 2.74float y = 3.5 + 2.74x = sqrt(n);x = sqrt(n);

Page 20: 제  1  장  데이터 구조 개요

문제 해결과 추상화 문제 해결과 추상화 (5)(5)

알고리즘의 추상화 세세하고 지협적인 특징은 무시하고 핵심만을 간추려 놓은 것

데이터 형태를 규정하지 않는다면 동일한 알고리즘으로 간주 데이터 형태는 알고리즘의 구현 시 고려 장점

다양한 환경에서 알고리즘의 재사용 가능 다양한 응용에 적용되는 프로그램으로 구현 가능

예예 ) ) 데이터 정렬 알고리즘데이터 정렬 알고리즘

Page 21: 제  1  장  데이터 구조 개요

사전

해야할일 리스트

Ticket Box

일상생활에서의 사물의 조직화

조직도

일상생활에서의 사물의 조직화일상생활에서의 사물의 조직화

Page 22: 제  1  장  데이터 구조 개요

해야할일 리스트

a b c NULL

A

B

C

Ticket Box

전단 (front) 후단 (rear)

일상생활과 자료구조의 비교일상생활과 자료구조의 비교

일상생활에서의 예 자료구조

물건을 쌓아두는 것 스택

영화관 매표소의 줄 큐

할일 리스트 리스트

영어사전 사전 , 탐색구조

지도 그래프

조직도 트리

Page 23: 제  1  장  데이터 구조 개요

8080 7070 9090 3030

score[]

자료구조 알고리즘

tmp←score[0]; for i ← 1 to n do

if score[i]>tmp then tmp←score[i];

자료구조와 알고리즘자료구조와 알고리즘 프로그램 = 자료구조 + 알고리즘 ( 예 ) 최대값 탐색 프로그램 = 배열 + 순차탐색

Page 24: 제  1  장  데이터 구조 개요

데이터 구조의 정의 데이터 구조의 정의 (1)(1)

데이터 형태 (Data Type) 데이터 객체 (data object) 의 집합과 데이터 객체를 생성 ,

소멸 , 수정할 수 있는 연산 (operation) 의 집합으로 구성 종류

스칼라 데이터 형태 : 정수형 , 실수형 , 논리형 , 문자형 구조적 데이터 형태 : 데이터 형태들의 집합

95

237-37

12

0-1

64

영역영역 실체실체

17 92 A

43 58 F

26 74 C학번필드

점수필드

37 86 B

학점필드

영역영역 실체실체

스칼라 데이터 형태 스칼라 데이터 형태 (( 정수형정수형 )) 구조적 데이터 형태 구조적 데이터 형태 (( 레코드형레코드형 ))

Page 25: 제  1  장  데이터 구조 개요

데이터 구조의데이터 구조의 정의 정의 (2)(2)

데이터 구조 (Data Structure) 데이터 형태의 경우 프로그램에 종속적으로 선언 데이터 구조는 프로그램에 관계없이 문제 해결자의 머리 속에

있는 데이터의 개념적인 형태 데이터 구조를 추상화 시키면 추상 데이터 형태 (ADT: Abstract

Data Type) 를 얻게 됨 .

추상 데이터 형태 사용자가 사용할 수 있는 기능의 이름만 제공하고 사용자는 이를

이용해서 필요한 데이터 구조를 만듦 .

예 ) 스택에서의 푸쉬 (push) 와 팝 (pop)

Page 26: 제  1  장  데이터 구조 개요

데이터 구조의 종류데이터 구조의 종류

광의의 광의의 데이터 구조데이터 구조

기초 데이터 형태 기초 데이터 형태

• 정수형정수형• 실수형실수형• 문자형문자형• 논리형논리형• 포인터형포인터형

협의의 협의의 데이터 구조데이터 구조

파일 구조 파일 구조

단순 형태 단순 형태

• 스트링 스트링 • 배 열배 열• 레코드레코드

복합형태복합형태 (( 선형선형))

• 스택 스택 • 큐 큐 • 리스트리스트

복합형태복합형태 (( 비선형비선형 ))

• 그래프그래프• 일반트리 일반트리 • 이진트리이진트리• 특수트리특수트리

Page 27: 제  1  장  데이터 구조 개요

추상 데이터 타입 (ADT: Abstract Data Type) 데이터 타입을 추상적 ( 수학적 ) 으로 정의한 것 데이터나 연산이 무엇 (what) 인가는 정의되지만 데이터나

연산을 어떻게 (how) 컴퓨터 상에서 구현할 것인지는 정의되지 않는다 .

추상 데이터 타입 추상 데이터 타입 (1)(1)

Page 28: 제  1  장  데이터 구조 개요

추상 데이터 타입 추상 데이터 타입 (2)(2)

객체 추상 데이터 타입에 속하는 객체가 정의된다 .

연산 이들 객체들 사이의 연산이 정의된다 . 이 연산은 추상 데이터

타입과 외부를 연결하는 인터페이스의 역할을 한다 .

23

97

8

연산객체

추상 데이터 타입

Page 29: 제  1  장  데이터 구조 개요

추상 데이터 타입의 예추상 데이터 타입의 예 : : 자연수자연수

Nat_No객체 : 0 에서 시작하여 INT_MAX까지의 순서화된 정수의 부분범위연산 :

zero() ::= return 0; is_zero() ::= if (x) return FALSE; else return TRUE; add(x,y) ::= if( (x+y) <= INT_MAX ) return x+y; else return INT_MAX sub(x,y) ::= if ( x<y ) return 0; else return x-y; equal(x,y)::= if( x=y ) return TRUE;

else return FALSE; successor(x)::= if( (x+y) <= INT_MAX )

return x+1;

Page 30: 제  1  장  데이터 구조 개요

추상 데이터 타입과 추상 데이터 타입과 VTR VTR

▪VCR 의 인터페이스가 제공하는 특정한 작업만을 할 수 있다 .

▪ 사용자는 이러한 작업들을 이해해야 한다 . 즉 비디오를 시청하기 위해서는 무엇을 해야 하는지를 알아야 한다 .

▪VCR 의 내부를 볼 수는 없다 .

▪VCR 의 내부에서 무엇이 일어나고 있는지를 몰라도 이용할 수 있다 .

▪ 누군가가 VCR 의 내부의 기계장치를 교환한다고 하더라도 인터페이스만 바뀌지 않는 한 그대로 사용이 가능하다 .

▪ 사용자들은 추상 데이터 타입이 제공하는 연산만을 사용할 수 있다 .

▪ 사용자들은 추상 데이터 타입을 어떻게 사용하는지를 알아야 한다 .

▪ 사용자들은 추상 데이터 타입 내부의 데이터를 접근할 수 없다 .

▪ 사용자들은 어떻게 구현되었는지 몰라도 이용할 수 있다 .

▪ 만약 다른 사람이 추상 데이터 타입의 구현을 변경하더라도 인터페이스가 변경되지 않으면 사용할 수 있다 .

Page 31: 제  1  장  데이터 구조 개요

알고리즘 개요알고리즘 개요

데이터 구조와 알고리즘 데이터 구조 : 처리할 대상 알고리즘 : 대상을 처리하는 방법

상호 의존적인 밀접한 관계

알고리즘의 정의 어떤 특정 문제를 위한 명령어들의 유한 집합 좋은 알고리즘 : 수행시간과 기억장치의 사용 측면에서 효율적인

알고리즘

Page 32: 제  1  장  데이터 구조 개요

알고리즘의 표현 알고리즘의 표현 (1)(1)

알고리즘의 조건 입력 (input)

자료가 외부에서 제공될 수 있어야 함 . 출력 (output)

적어도 하나 이상의 결과를 내어야 함 . 명확성 (definiteness)

각 명령어들은 명확하고 모호하지 않아야 함 . 유한성 (finiteness)

알고리즘의 명령어대로 수행했을 때 유한번의 수행 후에 마쳐야 함 . 효과성 (effectiveness)

모든 명령어들은 원칙적으로 종이와 연필만으로 수행될 수 있을 정도로 실행이 가능해야 함 .

Page 33: 제  1  장  데이터 구조 개요

알고리즘의 표현 알고리즘의 표현 (2)(2)

알고리즘의 표현 방법 자연어

한글이나 영어 사용 알고리즘 기술의 용이성 자연어의 모호성에 의하여 명확성 유지의 어려움

순서도 (flow chart) 좋은 알고리즘의 표현 방법임 규모가 큰 문제에 대해서 코딩의 어려움

의사코드 (pseudo code) 프로그래밍 언어에 가까우며 특정 언어의 구조에 제약을 받지

않음 실행을 위해서는 새로이 코딩하여야 함

프로그래밍 언어 C 언어와 같은 프로그래밍 언어를 사용하여 표현

Page 34: 제  1  장  데이터 구조 개요

알고리즘의 표현 알고리즘의 표현 (3)(3)

( 예 ) 배열에서 최대값 찾기 알고리즘

0 1 2 3 4 5 6 7 8 9 10

Page 35: 제  1  장  데이터 구조 개요

알고리즘의 표현 알고리즘의 표현 (4)(4)

ArrayMax(A,n) 1. 배열 A의 첫번쨰 요소를 변수 tmp 에 복사2. 배열 A의 다음 요소들을 차례대로 tmp 와 비교하면 더 크면 tm

p 로 복사3. 배열 A의 모든 요소를 비교했으면 tmp 를 반환

자연어로 표기된 알고리즘 인간이 읽기가 쉽다 . 그러나 자연어의 단어들을 정확하게 정의하지 않으면 의미

전달이 모호해질 우려가 있다 .

( 예 ) 배열에서 최대값 찾기 알고리즘

Page 36: 제  1  장  데이터 구조 개요

tmp←A[0]i←1

i < n

A[i]>tmp

tmp←A[i] tmp

no

yes

i++

noyes

알고리즘의 표현 알고리즘의 표현 (5)(5)

흐름도로 표기된 알고리즘 직관적이고 이해하기 쉬운

알고리즘 기술 방법 그러나 복잡한 알고리즘의

경우 , 상당히 복잡해짐 .

Page 37: 제  1  장  데이터 구조 개요

알고리즘의 표현 알고리즘의 표현 (6)(6)

유사코드로 표현된 알고리즘 알고리즘의 고수준 기술 방법 자연어보다는 더 구조적인

표현 방법 프로그래밍 언어보다는 덜

구체적인 표현방법 알고리즘 기술에 가장 많이

사용 프로그램을 구현할 때의

여러가지 문제들을 감출 수 있다 . 즉 알고리즘의 핵심적인 내용에만 집중할 수 있다 .

ArrayMax(A,n) tmp ← A[0]; for i←1 to n-1 do

if tmp < A[i] then tmp ← A[i];

return tmp;

대입 연산자가 ←임을 유의

Page 38: 제  1  장  데이터 구조 개요

알고리즘의 표현 알고리즘의 표현 (7)(7)

#define MAX_ELEMENTS 100int score[MAX_ELEMENTS];int find_max_score(int n){

int i, tmp;tmp=score[0];for(i=1;i<n;i++){

if( score[i] > tmp ){tmp = score[i];

}}return tmp;

}

C 로 표현된 알고리즘 알고리즘의 가장 정확한 기술이 가능 반면 실제 구현시의 많은 구체적인 사항들이 알고리즘의 핵심적인

내용들의 이해를 방해할 수 있다 .

Page 39: 제  1  장  데이터 구조 개요

알고리즘의 분석알고리즘의 분석

정확성 (correctness) 올바른 입력에 대해서 유한 시간 내에 옳은 답을 내는 것을 의미함 .

수행량 (amount of work done) 알고리즘을 수행하는데 걸리는 수행 횟수를 나타내는데 , 최선의 경우 ,

최악의 경우 및 평균의 경우로 나타낼 수 있음 .

기억 장소 사용량 (amount of space used) 알고리즘의 수행 시 필요한 컴퓨터의 기억 공간의 사용량을 의미함 .

단순성 /명확성 (simplicity/clarity) 알고리즘의 작성이 쉽고 간결하여 해독성이 높아야 한다는 것을 말함 .

최적성 (optimality) “어떤 알고리즘이 최적이다” 라고 하는 것은 그 알고리즘보다 더 적은 중요

연산을 수행하는 알고리즘이 없다는 것을 의미함 .

Page 40: 제  1  장  데이터 구조 개요

알고리즘의 성능분석알고리즘의 성능분석 알고리즘의 성능 분석 기법

수행 시간 측정 두 개의 알고리즘의 실제 수행 시간을 측정하는 것 실제로 구현하는 것이 필요 동일한 하드웨어를 사용하여야 함

알고리즘의 복잡도 분석 직접 구현하지 않고서도 수행 시간을 분석하는 것 알고리즘이 수행하는 연산의 횟수를 측정하여 비교 일반적으로 연산의 횟수는 n 의 함수 시간 복잡도 분석 : 수행 시간 분석 공간 복잡도 분석 : 수행시 필요로 하는 메모리 공간 분석

Page 41: 제  1  장  데이터 구조 개요

수행시간측정수행시간측정 컴퓨터에서 수행시간을 측정하는 방법에는 주로 clock 함수가 사용된다 . clock_t clock(void);

clock 함수는 호출되었을 때의 시스템 시각을 CLOCKS_PER_SEC 단위로 반환 수행시간을 측정하는 전형적인 프로그램

#include <stdio.h> #include <stdlib.h> #include <time.h> void main( void ) {    clock_t start, finish;    double  duration;    start = clock();     // 수행시간을 측정하고 하는 코드 ....      // ....    finish = clock();    duration = (double)(finish - start) / CLOCKS_PER_SEC;    printf("%f 초입니다 .\n", duration); }

Page 42: 제  1  장  데이터 구조 개요

복잡도 분석 복잡도 분석 (1)(1)

시간 복잡도는 알고리즘을 이루고 있는 연산들이 몇 번이나 수행되는지를 숫자로 표시

산술 연산 , 대입 연산 , 비교 연산 , 이동 연산 등 알고리즘의 중요 연산만을 고려 어느 알고리즘에나 포함될 수 있는 기본적인 연산은 제외 예 ) for 문의 index 증감 등

문제에 대응하는 중요 연산 예 :

문제 중요 연산

배열에서 x 를 찾아라 배열 내의 원소와 x 를 비교하는 연산

실수로 된 두 행렬을 곱하라 두 실수를 곱하는 연산

숫자의 배열을 순서대로 정렬 두 숫자를 비교하는 연산

이진 트리의 순회 링크를 순회하는 연산

Page 43: 제  1  장  데이터 구조 개요

복잡도 분석 복잡도 분석 (2)(2)

시간복잡도 함수 알고리즘이 수행하는 중요 연산의 수행 횟수를 계산하여 두 개의

알고리즘을 비교 연산의 수행횟수를 고정된 숫자가 아니라 입력의 개수 n 에 대한 함수로

표현 시간복잡도 함수 T(n) 이라고 표기

연산의 수 = 83n+2

연산의 수 =265n2 +6

프로그램 A 프로그램 B

워드 2005 워드 2000

Page 44: 제  1  장  데이터 구조 개요

복잡도 분석의 예복잡도 분석의 예

알고리즘 A 알고리즘 B 알고리즘 C

sum ←n*n;for i←1 to n do  sum ←sum + n;

for i←1 to n do  for ←1 to n do    sum ←sum + 1;

  알고리즘 A 알고리즘 B 알고리즘 C

대입연산 1    n       n*n     

덧셈연산     n     n*n     

곱셈연산 1    

나눗셈연산      

전체연산수 2   2n       2n2    

• n 을 n번 더하는 문제 : 각 알고리즘이 수행하는 중요 연산의 개수를 세어 본다 . 단 for 루프 제어 연산은 고려하지 않음 .

Page 45: 제  1  장  데이터 구조 개요

입력의 개수 n

연산의 횟수

알고리즘 A

알고리즘 B

알고리즘 C

연산의 횟수를 그래프로 표현연산의 횟수를 그래프로 표현

Page 46: 제  1  장  데이터 구조 개요

시간복잡도 함수 계산 예시간복잡도 함수 계산 예

ArrayMax(A,n) tmp ← A[0]; 1번의 대입 연산 for i←1 to n-1 do 루프 제어 연산은 제외

if tmp < A[i] then n-1번의 비교 연산tmp ← A[i]; n-1번의 대입 연산 ( 최대 )

return tmp; 1번의 반환 연산

총 연산수 = 2n( 최대 )

코드를 분석해보면 수행되는 수행되는 연산들의 횟수를 입력 크기의 함수로 만들 수 있다 .

Page 47: 제  1  장  데이터 구조 개요

빅오 표기법빅오 표기법

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

( 예 )  n=1,000 일 때 , T(n)의 값은 1,001,001 이고 이중에서 첫 번째 항인 의 값이 전체의 약 99% 인 1,000,000 이고 두 번째 항의 값이 1000 으로 전체의 약 1% 를 차지한다 .

따라서 보통 시간복잡도 함수에서 가장 영향을 크게 미치는 항만을 고려하면 충분하다 .

빅오표기법 : 연산의 횟수를 대략적 ( 점근적 ) 으로 표기한 것

두개의 함수 f(n) 과 g(n) 이 주어졌을 때 ,

모든 n≥n0 에 대하여 |f(n)| ≤ c|g(n)| 을 만족하는 2 개의 상수 c 와 n0 가 존재하면 f(n)=O(g(n)) 이다 .

빅오는 함수의 상한을 표시한다 . ( 예 ) n≥5 이면 2n+1 <10n 이므로 2n+1 = O(n)

입력의 개수 n

연산의 횟수 ))(( nfO

)(nf

0n

n=1000 인 경우

T(n)= n2 + n + 1

99%

1%

Page 48: 제  1  장  데이터 구조 개요

빅오 표기법의 예빅오 표기법의 예

Page 49: 제  1  장  데이터 구조 개요

빅오 표기법의 종류빅오 표기법의 종류 O(1) : 상수형 O(logn) : 로그형 O(n) : 선형 O(nlogn) : 로그선형 O(n2) : 2 차형 O(n3) : 3 차형 O(nk) : k 차형 O(2n) : 지수형 O(n!) : 팩토리얼형

시간복잡도n

1 2 4 8 16 32

1 1 1 1 1 1 1

logn 0 1 2 3 4 5

n 1 2 4 8 16 32

nlogn 0 2 8 24 64 160

n2 1 4 16 64 256 1024

n3 1 8 64 512 4096 32768

2n 2 4 16 256 65536 4294967296

n! 1 2 24 40326 20922789888000 26313×1033

Page 50: 제  1  장  데이터 구조 개요

빅오 표기법이외의 표기법빅오 표기법이외의 표기법

.

빅오메가 표기법 모든 n≥n0 에 대하여 |f(n)| ≥ c|g(n)|

을 만족하는 2 개의 상수 c 와 n0 가 존재하면 f(n)=Ω(g(n)) 이다 .

빅오메가는 함수의 하한을 표시한다 . ( 예 ) n ≥ 5 이면 2n+1 <10n 이므로

n = Ω(n)

빅세타 표기법 모든 n≥n0 에 대하여 c1|g(n)| ≤ |f(n)|

≤ c2|g(n)| 을 만족하는 3 개의 상수 c

1, c2 와 n0 가 존재하면 f(n)=θ(g(n))이다 .

빅세타는 함수의 하한인 동시에 상한을 표시한다 .

f(n)=O(n) 이면서 f(n)= Ω(n) 이면 f(n)= θ(n) 이다 .

( 예 ) n ≥ 1 이면 n ≤ 2n+1 ≤ 3n이므로 2n+1 = θ(n)

입력의 개수 n

연산의 수

))(( nf

))(( nfO

)(nf

상한

하한

0n

Page 51: 제  1  장  데이터 구조 개요

최선최선 , , 평균평균 , , 최악의 경우최악의 경우 알고리즘의 수행시간은 입력 자료 집합에 따라 다를 수 있다 .

( 예 ) 정렬 알고리즘의 수행 시간은 입력 집합에 따라 다를 수 있다 . 최선의 경우 (best case): 수행 시간이 가장 빠른 경우 평균의 경우 (average case): 수행시간이 평균적인 경우 최악의 경우 (worst case): 수행 시간이 가장 늦은 경우

최악의 경우

최선의 경우

평균적인 경우

A B C D E F G입력 집합

수행

시간

100

50

최선의 경우 : 의미가 없는 경우가 많다 .

평균적인 경우 : 계산하기가 상당히 어려움 .

최악의 경우 : 가장 널리 사용된다 . 계산하기 쉽고 응용에 따라서 중요한 의미를 가질 수도 있다 . (예 ) 비행기 관제업무 , 게임 ,

로보틱스

Page 52: 제  1  장  데이터 구조 개요

최선최선 , , 평균평균 , , 최악의 경우최악의 경우 ( 예 ) 순차탐색

최선의 경우 : 찾고자 하는 숫자가 맨앞에 있는 경우

∴ O(1)

최악의 경우 : 찾고자 하는 숫자가 맨뒤에 있는 경우

∴ O(n)

평균적인 경우 : 각 요소들이 균일하게 탐색된다고 가정하면

(1+2+…+n)/n=(n+1)/2 ∴ O(n)

Page 53: 제  1  장  데이터 구조 개요

자료 구조의 자료 구조의 CC 언어 표현방법언어 표현방법 자료구조와 관련된 데이터들을 구조체로 정의 연산을 호출할 경우 , 이 구조체를 함수의 파라미터로

전달 ( 예 )

// 자료구조 스택과 관련된 자료들을 정의typedef int element;typedef struct {

int top;element stack[MAX_STACK_SIZE];

} StackType;

// 자료구조 스택과 관련된 연산들을 정의void push(StackType *s, element item){

if( s->top >= (MAX_STACK_SIZE -1)){stack_full();return;

}s->stack[++(s->top)] = item;

}

자료구조의 요소

관련된 데이터를 구조체로 정의

연산을 호출할때 구조체를 함수의 파라미터로 전달

Page 54: 제  1  장  데이터 구조 개요

자료구조 기술규칙자료구조 기술규칙 상수

대문자로 표기 ( 예 ) #define MAX_ELEMENT 100

변수의 이름 소문자를 사용하였으며 언더라인을 사용하여 단어와 단어를 분리 ( 예 ) int increment;     int new_node;

함수의 이름 동사를 이용하여 함수가 하는 작업을 표기 ( 예 ) int add(ListNode *node)    // 혼동이 없는 경우       int list_add(ListNode *node) //혼동이 생길 우려가 있는 경우

typedef 의 사용 C 언어에서 사용자 정의 데이터 타입을 만드는 경우에 쓰이는 키워드

( 예 ) typedef int element;      typedef struct ListNode {              element data;              struct ListNode *link;       } ListNode;

             

typedef <새로운 타입의 정의 > < 새로운 타입 이름 >;