알고리즘 분석 알고리즘 정의 알고리즘 요건(Criteria) 특정한 일을 수행하기 위한 명령어의 유한 집합

Slides:



Advertisements
Similar presentations
알고리즘 기본 개념 정렬 알고리즘 탐색 알고리즘 알고리즘 복잡도.
Advertisements

컴퓨터와 인터넷.
(Program = Algorithm + Data Structure)
2장. 프로그램의 기본 구성. 2장. 프로그램의 기본 구성 2-1"Hello, World!" 들여다 보기 /* Hello.c */ #include int main(void) { printf("Hello, World! \n"); return 0;
MS-Access의 개요 1강 MOS Access 2003 CORE 학습내용 액세스 응용 프로그램은 유용한 데이터를
1. 컴파일러 개론 1-1. Compiler 정의 1-2. Language Processing System
9장. C 언어의 핵심! 함수. 9장. C 언어의 핵심! 함수 9-1 함수의 정의와 선언 main 함수 다시 보기 : 함수의 기본 형태 { } 그림 9-1.
연결리스트(linked list).
Report #2 - Solution 문제 #1: 다음과 같이 프로그램을 작성하라.
컴퓨터 프로그래밍 기초 [Final] 기말고사
제7강 학습 내용 주소지정 방식의 예 값 즉시 지정 방식과 실행 예 레지스터 직접지정 방식 메모리 직접지정 방식과 실행 예
보고서 #7 (기한: 6/2) 2개의 스택, stk1, stk2를 이용하여 큐를 구현하라.
Windows Server 장. 사고를 대비한 데이터 백업.
CHAP 1:자료구조와 알고리즘 순천향대학교 컴퓨터공학과 하 상 호.
오브젝트 조합 회로 IT CookBook, VHDL을 이용한 디지털 회로 입문.
Chapter 02 순환 (Recursion).
제3장 스택과 큐.
11장. 포인터 01_ 포인터의 기본 02_ 포인터와 Const.
8장 함수 함수의 필요성 라이브러리 함수와 사용자 정의 함수 함수의 정의, 원형, 호출 배열을 함수 인자로 전달 재귀호출.
SqlParameter 클래스 선문 비트 18기 발표자 : 박성한.
컴퓨터 프로그래밍 기초 #02 : printf(), scanf()
DK-128 실습 EEPROM 제어 아이티즌 기술연구소
컴파일러 입문 제 11 장 코드 최적화.
C#.
MATLAB
JA A V W. 03.
사용자 함수 사용하기 함수 함수 정의 프로그램에서 특정한 기능을 수행하도록 만든 하나의 단위 작업
자바 5.0 프로그래밍.
프로그래밍 개요
어서와 C언어는 처음이지 제14장.
자료구조: CHAP 7 트리 –review 순천향대학교 컴퓨터공학과 하 상 호.
메모리 관리 & 동적 할당.
2장. 데이터베이스 관리 시스템 데이터베이스 관리 시스템의 등장 배경 데이터베이스 관리 시스템의 정의
쉽게 풀어쓴 C언어 Express 제14장 포인터 활용 C Express Slide 1 (of 22)
제1장 자료구조를 배우기 위한 준비.
쉽게 배우는 알고리즘 1장. 알고리즘 설계와 분석의 기초.
논리회로 설계 및 실험 5주차.
컴퓨터 프로그래밍 기초 - 10th : 포인터 및 구조체 -
2장. 변수와 타입.
Chapter 03. 관계 데이터베이스 설계.
04. DBMS 개요 명지대학교 ICT 융합대학 김정호.
자바 5.0 프로그래밍.
제 1 장. 자료구조와 알고리즘.
컴퓨터 프로그래밍 기초 - 8th : 함수와 변수 / 배열 -
메모리 타입 분석을 통한 안전하고 효율적인 메모리 재사용
보고서 #7 (기한: 6/2) 2개의 스택, stk1, stk2를 이용하여 큐를 구현하라.
9장. C 언어의 핵심! 함수. 9장. C 언어의 핵심! 함수 9-1 함수의 정의와 선언 main 함수 다시 보기 : 함수의 기본 형태 { } 그림 9-1.
Canary value 스택 가드(Stack Guard).
알고리즘의 분석(analysis) 공간적 효율성(Space Efficiency)과 시간적 효율성(Time Efficiency)
알고리즘(Algorithm)  알고리즘 개요 (효율, 분석, 차수) Part 년 봄학기
알고리즘 알고리즘이란 무엇인가?.
데이터 동적 할당 Collection class.
디버깅 관련 옵션 실습해보기 발표 : 2008년 5월 19일 2분반 정 훈 승
Internet Computing KUT Youn-Hee Han
클러스터 시스템에서 효과적인 미디어 트랜스코딩 부하분산 정책
4장. 데이터 표현 방식의 이해. 4장. 데이터 표현 방식의 이해 4-1 컴퓨터의 데이터 표현 진법에 대한 이해 n 진수 표현 방식 : n개의 문자를 이용해서 데이터를 표현 그림 4-1.
AT MEGA 128 기초와 응용 I 기본적인 구조.
5장. 선택 알고리즘.
7주차: Functions and Arrays
쉽게 배우는 알고리즘 2장. 점화식과 점근적 복잡도 분석
멀티미디어시스템 제 5 장. 멀티미디어 데이터베이스 개념 IT응용시스템공학과 김 형 진 교수.
TVM ver 최종보고서
발표자 : 이지연 Programming Systems Lab.
알고리즘의 분석(analysis) 공간적 효율성(Space Efficiency)과 시간적 효율성(Time Efficiency)
알기쉽게 해설한 데이터구조 고 갑 승 한남대학교
왜 ‘프로그래밍’을 ‘비이공계 학생’이 알아야 하는가?
제 4 장 Record.
29장. 템플릿과 STL 01_ 템플릿 02_ STL.
6 객체.
알고리즘의 분석(analysis) 공간적 효율성(Space Efficiency)과 시간적 효율성(Time Efficiency)
Presentation transcript:

알고리즘 분석 알고리즘 정의 알고리즘 요건(Criteria) 특정한 일을 수행하기 위한 명령어의 유한 집합 입력 : (외부) 원인 >= 0 출력 : 결과 >= 1 명백성(definiteness) : 모호하지 않은 명확한 명령 유한성(finiteness) : 반드시 종료 유효성(effectiveness) : 기본적, 실행가능 Program = algorithm Flowchart is not algorithm

성능분석 성능분석을 배우는 목적 성능분석의 목적 성능평가의 기준 경험과 실전 훈련이 요구됨 프로그램에 대한 평가 능력 향상 보다 좋은 시스템 또는 알고리즘으로 개선 및 개발 시스템의 문제점 도출 성능평가의 기준 시스템이 원래의 명세와 부합하는가? 정확하게 동작하는가? 개발문서, 기술전수문서 및 사용법 설명서등 문서화가 잘 되어 있는가 ? 프로그램의 논리적 단위(즉, 함수)는 효과적으로 사용되고 있는가 ? 프로그램의 코드는 읽기 쉬운가? 기억장치를 효율적으로 사용하는가? 작업에 대한 프로그램의 실행시간은 받아들일 만 한가 ? 경험과 실전 훈련이 요구됨

성능평가 방법 성능분석(Performance Analysis) 성능측정(Performance Measurement) 특정 컴퓨터에 상관없이 알고리즘이나 프로그램의 시간과 공간을 추산하는 방법 복잡도 이론(Complexity Theory)에 기반을 둠 공간복잡도(Space Complexity) 시간복잡도(Time Complexity) 성능측정(Performance Measurement) 컴퓨터에 의존적인 실행시간 추산

공간 복잡도 공간 복잡도 : 프로그램이 필요로 하는 메모리 공간을 산출함 총 공간 요구량 : 고정 공간 요구량 + 가변 공간 요구량 프로그램이 필요로 하는 공간 고정 공간 요구 : 처리할 데이터의 량에 무관하게 항상 요구되는 공간 즉, 프로그램의 성능에 큰 영향을 주지 않음 명령어 공간(코드 저장 공간), 단순 변수, 고정크기의 구조화 변수, 성수, …. 가변 공간 요구 : 처리할 데이터의 량에 따라 다르게 요구되는 공간 프로그램의 성능에 큰 영향을 줌

가변 공간 요구량에 대한 예1 가변 공간 요구량을 고정 공간 요구량으로 변환 10M RAM A 대학 : 3,000명 성적처리 프로그램 자체 처리 읽기 40M RAM B 대학 : 16,000명 고정 공간 요구량 3 M RAM 1M 1M 1M 1M Slicing B 대학 : 16,000명

고정 공간 요구량 및 가변 공간 요구량의 예 프로그램 P가 문제 I를 푸는데 소요되는 가변 공간 요구량을 Sp(I)라 할때 Case - 1 Case - 2 : 반복기법 int sum(int a, int b) { return a+b; } int sum(int list[], int n) { int i, res= 0; for(i=0; i<n; i++) res = res + list[i]; }

Case - 3 : 순환기법 int sum(int list[], int n) { if(n < 0) return 0; else return list[n-1] + sum(list, n-1); } 즉, Sizeof(PSB)=6Byte라 할때 n=10 이면 Ssum(n) = 60 Bytes n=100 이면 Ssum(n) = 600 Bytes ...... n이 상당히 크면 Ssum(n) = 상당히 큰 가변 공간 요구됨 프로그램 A 프로그램 상태 정보 복원 프로그램 상태 정보 저장 프로그램 B 시스템이 불안정함.

시간 복잡도 프로그램 P에 소요되는 시간 : 컴파일 시간 + 실행시간 컴파일 시간 : 컴파일러의 속성에 따라 매우 다양하다 개발자의 입장에서는 중요한 요소임. 그러나, 알고리즘의 특성을 기술할 때에는 제외시킴 실행시간 프로그램이 완료될때 까지 소요되는 실제 시간을 측정하는 방법 프로그램의 성능측정에서 논의됨. 프로그램이 수행하는 연산의 횟수를 계산하는 방법 일반적인 알고리즘의 성능을 기술할 때 많이 사용됨 알고리듬에 대한 객관적인 성능 비교가 용이함. (즉, 컴퓨터나 컴파일러등에 독립적으로 알고리듬의 시간 복잡도를 계산하는 일반적인 방법)

연산횟수를 계산하는 방법 프로그램 단계의 정의 연산회수를 계산하는 방법 실행시간이 인스턴스 특성에 상관없이 구문적으로나 의미적으로 같은 뜻을 가지는 프로그램의 단위 연산회수를 계산하는 방법 방법론 Counter를 이용하는 방식 테이블 방식 점화식과 점근적 계산 방식

카운터를 이용하는 방식의 예 시작 int sum(int list[], int n) { int res=0; int counter=1; int i; for(i=0; i<n; i++) counter++; res = res + list[i]; } return res; int sum(int list[], int n) { int counter=1; for(i=0; i<n; i++) counter+=2; } res=0 i=0 counter=1 counter++ i<n res=res+list[i] return res; counter++ counter++ 끝

테이블 방식 예 절차 s/e 빈도수 총 단계수 int sum(int list[], int n) { int res=0; 각 문장에 대한 단계수 s/e(Steps/Execution) 결정 빈도수(Frequency : 문장이 실행되는 횟수) 계산 총 단계수(s/e * 빈도수)를 구한다. s/e 빈도수 총 단계수 int sum(int list[], int n) { int res=0; int i; for(i=0; i<n; i++) res = res + list[i]; } return res; 1 1 n+1 n 1 n+1 n

Matrix Addition

Recursive Function

Asymptotic Notation ( , ,  ) q Definition : [Big ] f(n)= (g(n)) (read as *f of n is big oh of g of n ) if there exist positive constants c and n0 such that f(n) ≤cg(n) for all n, n ≥ n0. e.g. , 3n+2= (n) as 3n + 2 ≤ 4n for all n≤2. 10n2 + 4n +2 =  (n2) as 10n2 + 4n + 2≤11n2 for all n≥5. (1), (log n), (n), (n log n), (n2), (n3), and (2n) - g(n) is an upper bound on the value of f(n) for all n, n≥n0 q Theorem 1.2 : If f(n) = amnm + … + a1n + a0, then f(n) = (nm)

q Definition : [ mega ] q Theorem 1.3 : f(n) = (g(n)) (read as f of n is omega of g of n) iff there exist positive constants c and n0 such that f(n) ≥cg(n) for all n, n ≥ n0. e.g., 3n + 2 = (n) as 3n + 2 ≥3n for all n ≥ 1. 10n2 + 4n + 2 = (n2) as 10n2 + 4n + 2 ≥ n2 for all n ≥ 1. - g(n) is a lower bound on f(n) q Theorem 1.3 : If f(n) = amnm + … + a1n + a0 and am > 0, then f(n) = (nm)

q Definition : [Theta] q Theorem 1.3 : f(n) =  (g(n)) (read as *f of n is theta of g of n ) iff there exist positive constants c1, c2 and n0 such that c1 g(n) ≤ f(n) ≤ c2g(n) for all n, n ≥ n0. e.g., 3n + 2 = (n) as 3n + 2 ≥ 3n for all n ≥ 2 and 3n + 2 < 4n for all n ≥ 2, so c1 = 3, c2 = 4, and n0 = 2. 10n2 + 4n + 2 = (n2). - g(n) is both an upper bound and lower bound on f(n) q Theorem 1.3 : If f(n) = amnm + … + a1n + a0 and am > 0, then f(n) = (nm)

Practical Complexities class of time complexities O(1): constant, 대부분 명령어가 한번에 실행되는 프로그램 O(log2n): logarithmic, 큰 문제를 분할해서 해결하는 프로그램 O(n): linear, 입력 아이템 N에 대해서 처리하는 프로그램 O(n·log2n): log-linear, 큰 문제를 분할해서 해결하고 합병하는 프로그램 O(n2): quadratic, 모든 쌍의 아이템을 처리하는 프로그램 O(n3): cubic O(2n): exponential O(n!): factorial polynomial time exponential time

알고리즘 분석 규칙 합의 규칙 : 프로그램 부분 p1 실행후 p2 실행 -> O(max(f(n), g(n))) 곱의 규칙 : T1(n)T2(n) -> O(f(n)g(n)) 배정문 : O(1) 순차문 : 합의 규칙 조건문 : 조건 평가 시간(O(1)) + 조건별 실행시간 최대치 반복문 : 루프반복회수 만큼 body 실행시간과 종료조건 평가시간(O(1))의 합  루프반복회수 * body의 실행시간 최대치 (1) for i:= 1 to n-1 (2) for j:= n downto i+1 (3) if A[j-1] > A[j] then begin (4) temp := A[j-1] (5) A[j-1] := A[j] (6) A[j]:= temp end (4)-(6) : O(1) (3)-(6) : O(1) (2)-(6) : O((n-i)*1) (1)-(6) : n(n-1)/2

Computing asymptotic complexity (1) Determine the complexity of each statement (2) Take the maximum (ex)

배열 배열정의 : a set of pairs (index and value) 배열 연산 : retrieve, store 배열표현 : 순차표현, 링크표현 메모리표현 : Row major order, Column major order 패턴매칭 정의, 패턴매칭알고리즘 분석 간단한 알고리즘 : O(nm) KMP 알고리즘 : O(n+m) BM 알고리즘 : O(n+m)

스택과 큐 스택 정의 : 삽입과 삭제가 top에서만 행해지는 순서 리스트 특성 : LIFO 연산 : add, delete 응용 : recursive call, interrupt, arithmetic expression, subroutine call and return, syntactic analyzer 큐의 정의 : 삽입이 rear에서 행해지고 삭제가 front에서 일어나는 순서리스트 특성 : FIFO 응용 : multiprocessing, CPU scheduling, Job scheduling 식의 평가 : Infix의 postfix로의 변환

링크 리스트 linear list(선형 리스트) : 순서가 있는 리스트 sequential list(순서 리스트) : 순서대로 저장                                  논리적 순서와 물리적 순서가 일치 linked list(연결 리스트) : 순서와 무관하게 저장(link로 순서 유지)                              논리적 순서와 물리적 순서가 불일치 nonlinear(비선형 리스트) : 순서를 정할 수 없는 리스트        tree(트리) : 계층적 리스트        graph(그래프) : 비계층적 리스트 순서리스트의 표현 : 순차표현 vs. 링크표현 스택과 큐의 링크 리스트 표현(알고리즘) 동치관계 Single linked list와 doubly linked list의 장단점