01장.자료구조와 알고리즘

Similar documents
슬라이드 1

슬라이드 1

슬라이드 1

슬라이드 1

02장.배열과 클래스

Microsoft PowerPoint - ch07 - 포인터 pm0415

11장 포인터

PowerPoint 프레젠테이션

Microsoft PowerPoint - chap-11.pptx

chap x: G입력

Microsoft PowerPoint - chap02-C프로그램시작하기.pptx

슬라이드 1

Microsoft PowerPoint - 제11장 포인터(강의)

Microsoft PowerPoint - 제11장 포인터

제 11 장포인터 유준범 (JUNBEOM YOO) Ver 본강의자료는생능출판사의 PPT 강의자료 를기반으로제작되었습니다.

슬라이드 1

Chap 6: Graphs

<322EBCF8C8AF28BFACBDC0B9AEC1A6292E687770>

2002년 2학기 자료구조

PowerPoint 프레젠테이션

C 언어 프로그래밊 과제 풀이

Microsoft PowerPoint - 05-chap03-ArrayAndPointer.ppt

알고리즘 1장 기본개념

untitled

제 14 장포인터활용 유준범 (JUNBEOM YOO) Ver 본강의자료는생능출판사의 PPT 강의자료 를기반으로제작되었습니다.

목차 포인터의개요 배열과포인터 포인터의구조 실무응용예제 C 2

[ 마이크로프로세서 1] 2 주차 3 차시. 포인터와구조체 2 주차 3 차시포인터와구조체 학습목표 1. C 언어에서가장어려운포인터와구조체를설명할수있다. 2. Call By Value 와 Call By Reference 를구분할수있다. 학습내용 1 : 함수 (Functi

중간고사

Microsoft PowerPoint - 08-chap06-Queue.ppt

03_queue

chap01_time_complexity.key

Microsoft PowerPoint - 08-Queue.ppt

슬라이드 1

슬라이드 1

Chapter 4. LISTS

OCW_C언어 기초

슬라이드 1

11장 포인터

슬라이드 1

Microsoft PowerPoint - ch09 - 연결형리스트, Stack, Queue와 응용 pm0100

A Dynamic Grid Services Deployment Mechanism for On-Demand Resource Provisioning

Chapter 4. LISTS

Microsoft PowerPoint - chap06-2pointer.ppt

정보

Chap 6: Graphs

06장.리스트

원형연결리스트에대한설명중틀린것은 모든노드들이연결되어있다 마지막에삽입하기가간단한다 헤더노드를가질수있다 최종노드포인터가 NULL이다 리스트의 번째요소를가장빠르게찾을수있는구현방법은무엇인가 배열 단순연결리스트 원형연결리스트 이중연결리스트 단순연결리스트의노드포인터 가마지막노드를

Microsoft PowerPoint - chap03-변수와데이터형.pptx

슬라이드 1

untitled

PowerPoint Presentation

Microsoft PowerPoint - ch10 - 이진트리, AVL 트리, 트리 응용 pm0600

Microsoft PowerPoint - chap11-포인터의활용.pptx

14장.탐색

C++ Programming

Data structure: Assignment 1 Seung-Hoon Na October 1, Assignment 1 Binary search 주어진 정렬된 입력 파일이 있다고 가정하자. 단, 파일내의 숫자는 공백으로 구 분, file내에 숫자들은

C 프로그래밊 개요

슬라이드 1

Microsoft PowerPoint 자바-기본문법(Ch2).pptx

Microsoft PowerPoint - additional01.ppt [호환 모드]

금오공대 컴퓨터공학전공 강의자료

chap 5: Trees

Microsoft PowerPoint - Chapter_04.pptx

Microsoft PowerPoint - chap-03.pptx

본 강의에 들어가기 전

ch15

프로그래밍개론및실습 2015 년 2 학기프로그래밍개론및실습과목으로본내용은강의교재인생능출판사, 두근두근 C 언어수업, 천인국지음을발췌수정하였음

학습목차 2.1 다차원배열이란 차원배열의주소와값의참조

PowerPoint 프레젠테이션

Microsoft PowerPoint 알고리즘 개요(Part 1).pptx

설계란 무엇인가?

PowerPoint Presentation

C++ Programming

Microsoft PowerPoint - Chapter_08.pptx

슬라이드 1

Microsoft PowerPoint - C++ 5 .pptx

KNK_C_05_Pointers_Arrays_structures_summary_v02

PowerPoint 프레젠테이션

Microsoft PowerPoint - [2009] 02.pptx

<4D F736F F F696E74202D2031C1D6C2F72D31C2F7BDC32028B0ADC0C7C0DAB7E D20C7C1B7CEB1D7B7A1B9D6BEF0BEEE20B0FAB8F1BCD2B

A Hierarchical Approach to Interactive Motion Editing for Human-like Figures

금오공대 컴퓨터공학전공 강의자료

<4D F736F F F696E74202D20C1A63134C0E520C6F7C0CEC5CD5FC8B0BFEB>

슬라이드 1

PowerPoint Presentation

쉽게 배우는 알고리즘 강의노트

C 프로그래밊 개요

Microsoft PowerPoint - chap-05.pptx

설계란 무엇인가?

비트와바이트 비트와바이트 비트 (Bit) : 2진수값하나 (0 또는 1) 를저장할수있는최소메모리공간 1비트 2비트 3비트... n비트 2^1 = 2개 2^2 = 4개 2^3 = 8개... 2^n 개 1 바이트는 8 비트 2 2

Microsoft PowerPoint - chap06-1Array.ppt

04장.큐

1. auto_ptr 다음프로그램의문제점은무엇인가? void func(void) int *p = new int; cout << " 양수입력 : "; cin >> *p; if (*p <= 0) cout << " 양수를입력해야합니다 " << endl; return; 동적할

쉽게 풀어쓴 C 프로그래밍

Microsoft PowerPoint - chap13-입출력라이브러리.pptx

<342EBAAFBCF620B9D720B9D9C0CEB5F92E687770>

윤성우의 열혈 TCP/IP 소켓 프로그래밍

Frama-C/JESSIS 사용법 소개

JAVA 프로그래밍실습 실습 1) 실습목표 - 메소드개념이해하기 - 매개변수이해하기 - 새메소드만들기 - Math 클래스의기존메소드이용하기 ( ) 문제 - 직사각형모양의땅이있다. 이땅의둘레, 면적과대각

< E20C6DFBFFEBEEE20C0DBBCBAC0BB20C0A7C7D12043BEF0BEEE20492E707074>

Transcription:

---------------- DATA STRUCTURES USING C ---------------- CHAPTER 자료구조와알고리즘 1/30

자료구조 일상생활에서자료를정리하고조직화하는이유는? 사물을편리하고효율적으로사용하기위함 다양한자료를효율적인규칙에따라정리한예 2/30

컴퓨터에서의자료구조 자료구조 (Data Structure) 컴퓨터에서자료를정리하고조직화하는다양한구조 일상생활에서의예 물건을쌓아두는것 영화관매표소의줄 자료구조 스택 큐 a b c NULL 할일리스트 리스트 영어사전사전, 탐색구조 지도 조직도 그래프 트리 C B A Ticket Box 전단 (front) 후단 (rear) 3/30

자료구조의분류 단순자료구조 정수실수문자문자열포인터 스택 3장큐 4장덱리스트 6장 배열연결리스트 2장 5장 자료구조 복합자료구조 선형구조 8장트리우선순위큐 일반트리이진트리 10장 이진탐색트리 AVL 트리 9장 순환알고리즘 7 장 비선형구조 그래프 방향그래프 무방향그래프 11 장 정렬알고리즘 13 장 맵 14 장 가중치그래프 12 장 4/30

컴퓨터프로그램의구성 컴퓨터프로그램은무엇으로이루어져있나? 프로그램 = 자료구조 + 알고리즘 5/30

( 예 ) 최대값탐색프로그램 = 배열 + 순차탐색 6/30

알고리즘 컴퓨터로문제를풀기위한단계적인절차 예 ) 전화번호부에서특정사람이름찾기 알고리즘의조건 입력 : 0개이상의입력이존재하여야한다. 출력 : 1개이상의출력이존재하여야한다. 명백성 : 각명령어의의미는모호하지않고명확해야함. 유한성 : 한정된수의단계후에는반드시종료되어야함. 유효성 : 각명령어들은실행가능한연산이어야한다. 박철수의전화번호는바로부근으로넘기면찾을수있겠군 7/30

알고리즘의기술방법 방법들 영어나한국어와같은자연어 흐름도 (flow chart) 유사코드 (pseudo-code) 특정한프로그래밍언어 (C언어, C++, java 등 ) ( 예 ) 배열에서최대값찾기알고리즘 0 1 2 3 4 5 6 7 8 9 10 8/30

알고리즘의기술방법 (1) (1) 자연어로표기된알고리즘 인간이읽기가쉽다. 단어들을정확하게정의하지않으면의미전달이모호해질우려가있다. ArrayMax(A,n) 1. 배열 A 의첫번째요소를변수 tmp 에복사 2. 배열 A 의다음요소들을차례대로 tmp 와비교하면더크면 tmp 로복사 3. 배열 A 의모든요소를비교했으면 tmp 를반환 9/30

알고리즘의기술방법 (2) (2) 흐름도로표기된알고리즘 직관적이고이해하기쉬운알고리즘기술방법 그러나복잡한알고리즘의경우, 상당히복잡해짐. tmpmax A[0] i 0 i<n no no A[i]>tmpMax yes tmpmax A[i] tmpmax i++ 10/30

알고리즘의기술방법 (3) (3) 유사코드로표현된알고리즘 알고리즘의고수준기술방법 자연어보다는더구조적인표현방법 프로그래밍언어보다는덜구체적인표현방법 알고리즘기술에가장많이사용 프로그램을구현할때의여러가지문제들을감출수있음 알고리즘의핵심적인내용에만집중할수있음 ArrayMax(A,n) tmp A[0]; for i 1 to n-1 do if tmp < A[i] then tmp A[i]; return tmp; 대입연산자가 임을유의 11/30

알고리즘의기술방법 (4) (4) 특정언어로표현된알고리즘 알고리즘의가장정확한기술가능 실제구현시의많은구체적인사항들이알고리즘의핵심적인내용들의이해를방해할수있음 예 ) C 언어로표기된알고리즘 #define MAX_ELEMENTS 100 int 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; } 12/30

자료형과추상자료형 추상화란? 어떤시스템의간략화된기술또는명세 시스템의정말핵심적인구조나동작에만집중 자료형 (data type) 데이터의집합과연산의집합 데이터 : {,-2,-1,0,1,2, } 예 ) int 데이터타입연산 : +, -, /, *, % 추상자료형 (ADT: Abstract Data Type) 데이터타입을추상적 ( 수학적 ) 으로정의한것 데이터나연산이무엇 (what) 인가를정의함 데이터나연산을어떻게 (how) 구현할것인지는정의하지않음 13/30

추상자료형의정의 데이터 + 연산 객체 9 2 8 7 3 연산 자연수 ADT 데이터 : 1에서시작하여 INT_MAX까지의순서화된정수의부분범위연산 : add(x,y): x+y가 INT_MAX보다작으면 x+y를반환 distance(x,y): x가 y보다크면 x-y를반환하고작으면 y-x를반환 equal(x,y): x와 y가같은값이면 TRUE, 아니면 FALSE를반환 successor(x): x가 INT_MAX보다작으면 x+1을반환한다. 14/30

추상자료형과자료구조 추상자료형과자료구조의관계 자료구조는추상자료형을프로그래밍언어로구현한것 먼저각자료구조의추상자료형을소개 추상자료형의구현 이책에서는 C 언어를사용 추상자료형의데이터 : 구조체를사용 추상자료형의연산 : 함수를사용 다른방법 : 객체지향언어 (C++, Java 등 ) 15/30

알고리즘의성능분석 알고리즘의성능분석기법 실행시간을측정하는방법 두개의알고리즘의실제실행시간을측정하는것 실제로구현하는것이필요 동일한하드웨어를사용하여야함 알고리즘의복잡도를분석하는방법 직접구현하지않고서도수행시간을분석하는것 알고리즘이수행하는연산의횟수를측정하여비교 일반적으로연산의횟수는 n의함수 시간복잡도분석 : 수행시간분석 공간복잡도분석 : 수행시필요로하는메모리공간분석 16/30

(1) 실행시간측정 clock 함수사용 : clock_t clock(void); 호출되었을때의시스템시각반환 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); } 17/30

(2) 복잡도분석 시간복잡도 산술, 대입, 비교, 이동의기본적인연산고려 알고리즘수행에필요한연산의개수를계산 입력의개수 n에대한함수-> 시간복잡도함수, T(n) 알고리즘 A 알고리즘 B 18/30

복잡도분석의예 n 을 n 번더하는문제 각알고리즘이수행하는연산의개수계산 단 for 루프제어연산은고려하지않음 알고리즘 A 알고리즘 B 알고리즘 C sum n*n; sum 0; for i 1 to n do sum sum + n; sum 0; for i 1 to n do for j 1 to n do sum sum + 1; 알고리즘 A 알고리즘 B 알고리즘 C 대입연산 1 n + 1 n*n + 1 덧셈연산 n n*n 곱셈연산 1 나눗셈연산 전체연산수 2 2n + 1 2n 2 + 1 19/30

연산의횟수를그래프로표현 연산의횟수 알고리즘 C 알고리즘 B 알고리즘 A 입력의개수 n 20/30

시간복잡도함수계산예 코드를분석해보면수행되는수행되는연산들의횟수를입력크기의함수로만들수있다. 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( 최대 ) 21/30

빅오표기법 차수가가장큰항이가장영향을크게미치고다른항들은상대적으로무시될수있음 예 : T(n) = n 2 + n + 1 n=1 일때 : T(n) = 1 + 1 + 1 = 3 (33.3%) n=10 일때 : T(n) = 100 + 10 + 1 = 111 (90%) n=100 일때 : T(n) = 10000 + 100 + 1 = 10101 (99%) n=1,000 일때 : T(n) = 1000000 + 1000 + 1 = 1001001 (99.9%) n=100 인경우 T(n)= n 2 + n + 1 99% 1% 22/30

빅오표기법의정의 두개의함수 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) 연산의횟수 O( g( n)) f (n) n 0 입력의개수 n 23/30

빅오표기법의예 예제 1.1 빅오표기법 f(n)=5 이면 O(1) 이다. 왜냐하면 n0=1, c=10 일때, n 1 에대하여 5 10 1 이되기때문이다. f(n)=2n+1 이면 O(n) 이다. 왜냐하면 n0=2, c=3 일때, n 2 에대하여 2n+1 3n 이되기때문이다. f(n)=3n 2 +100 이면 O(n 2 ) 이다. 왜냐하면 n0=100, c=5 일때, n 100 에대하여 3n 2 +100 5 2 이되기때문이다. f(n)=5 2 n + 10n 2 +100 이면 O(2 n ) 이다. 왜냐하면 n0=1000, c=10 일때, n 1000 에대하여 5 2 n + 10n 2 +100 < 10 2 n 이되기때문이다. 24/30

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

빅오표기법의종류 시간복잡도 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 n 2 1 4 16 64 256 1024 n 3 1 8 64 512 4096 32768 2 n 2 4 16 256 65536 4294967296 n! 1 2 24 40326 20922789888000 26313 10 33 26/30

빅오메가표기법 정의 모든 n n0 에대하여 f(n) c g(n) 을만족하는 2 개의상수 c 와 n0 가존재하면 f(n)=ω(g(n)) 이다. 빅오메가는함수의하한을표시 ( 예 ) n 1 이면 2n+1 > n 이므로 n = Ω(n) 연산의수 O( g( n)) 상한 f (n) ( g( n)) 하한 n 0 입력의개수 n 27/30

빅세타표기법 정의 모든 n n0 에대하여 c1 g(n) f(n) c2 g(n) 을만족하는 3 개의상수 c1, c2 와 n0 가존재하면 f(n)=θ(g(n)) 이다. 연산의수 O( g( n)) 상한 빅세타는함수의하한인동시에상한을표시한다. f(n)=o(g(n)) 이면서 f(n)= Ω(g(n)) 이면 f(n)= θ(n) 이다. ( 예 ) n 1 이면 n 2n+1 3n 이므로 2n+1 = θ(n) n 0 f (n) ( g( n)) 하한입력의개수 n 28/30

최선, 평균, 최악의경우 실행시간은입력집합에따라다를수있음 최선의경우 (best case): 수행시간이가장빠른경우 의미가없는경우가많다. 평균의경우 (average case): 수행시간이평균적인경우 계산하기가상당히어려움. 최악의경우 (worst case): 수행시간이가장늦은경우 가장널리사용된다. 계산하기쉽고응용에따라서중요한의미를가질수도있다. ( 예 ) 비행기관제업무, 게임, 로보틱스 29/30

예 : 순차탐색의최선, 평균, 최악 int sequentialsearch(int list[], int n, int key) { for(int i=0 ; i<n ; i++) } // 탐색에성공하면키값의인덱스반환 if(list[i]==key) return i; return 1; // 탐색에실패하면 -1 반환 [0] [1] [2] [3] [4] [5] [6] [7] [8] [9] 최선의경우 : O(1) 최악의경우 : O(n) 5 9 10 17 21 29 33 37 38 43 인덱스 0 에서 5 발견숫자비교횟수 = 1 [0] [1] [2] [3] [4] [5] [6] [7] [8] [9] 5 9 10 17 21 29 33 37 38 43 평균적인경우 : (1+2+ +n)/n=(n+1)/2 O(n) 인덱스 0 에서 43 발견숫자비교횟수 = 10 30/30