49
소프트웨어와 자료구조 자바로 배우는 쉬운 자료구조

소프트웨어와 자료구조 - mclab.silla.ac.krmclab.silla.ac.kr/lecture/201301/ds/ds_lecture_02.pdf가상코드를 이용한 알고리즘의 표현 가상코드, 즉 알고리즘

  • Upload
    others

  • View
    2

  • Download
    0

Embed Size (px)

Citation preview

Page 1: 소프트웨어와 자료구조 - mclab.silla.ac.krmclab.silla.ac.kr/lecture/201301/ds/ds_lecture_02.pdf가상코드를 이용한 알고리즘의 표현 가상코드, 즉 알고리즘

소프트웨어와 자료구조

자바로 배우는 쉬운 자료구조

Page 2: 소프트웨어와 자료구조 - mclab.silla.ac.krmclab.silla.ac.kr/lecture/201301/ds/ds_lecture_02.pdf가상코드를 이용한 알고리즘의 표현 가상코드, 즉 알고리즘

2

소프트웨어 생명주기1

추상 데이터 타입2

알고리즘3

성능 분석4

이 장에서 다룰 내용

Page 3: 소프트웨어와 자료구조 - mclab.silla.ac.krmclab.silla.ac.kr/lecture/201301/ds/ds_lecture_02.pdf가상코드를 이용한 알고리즘의 표현 가상코드, 즉 알고리즘

3

성공적인 소프트웨어 개발이란?

얼마나 정확하고 효율적으로 소프트웨어의 개발과 사용 및 관리가

이루어지는가?

• 개발할 소프트웨어에 대한 정확한 이해

• 사용할 자료와 자료간의 연산관계를 분석하여 최적의 자료구조 정의

소프트웨어 생명주기(Software Life Cycle)

소프트웨어를 체계적으로 개발하고 관리하기 위해서 개발 과정을

단계별로 나누어 구분한 것

Software Development Cycle

일반적으로 6단계로 구분

소프트웨어 생명주기 (1)

Page 4: 소프트웨어와 자료구조 - mclab.silla.ac.krmclab.silla.ac.kr/lecture/201301/ds/ds_lecture_02.pdf가상코드를 이용한 알고리즘의 표현 가상코드, 즉 알고리즘

4

일반적인 소프트웨어의 생명주기

• 필요한 단계로 피드백을 반복 수행하면서 소프트웨어의 완성도를 높인다.

소프트웨어 생명주기 (2)

Page 5: 소프트웨어와 자료구조 - mclab.silla.ac.krmclab.silla.ac.kr/lecture/201301/ds/ds_lecture_02.pdf가상코드를 이용한 알고리즘의 표현 가상코드, 즉 알고리즘

5

요구분석 단계

문제 분석 단계

개발할 소프트웨어의 기능과 제약조건, 목표 등을 소프트웨어 사용

자와 함께 명확히 정의하는 단계

개발할 소프트웨어의 성격을 정확히 이해하고 개발 방법과 필요한

개발 자원 및 예산 예측

요구명세서 작성

시스템 명세

시스템이 무엇을 수행해야 하는가를 정의하는 단계

입력 자료, 처리 내용, 생성되는 출력이 무엇인지를 정의

시스템 기능 명세서 작성

소프트웨어 생명주기 (3)

Page 6: 소프트웨어와 자료구조 - mclab.silla.ac.krmclab.silla.ac.kr/lecture/201301/ds/ds_lecture_02.pdf가상코드를 이용한 알고리즘의 표현 가상코드, 즉 알고리즘

6

설계 단계

시스템 명세 단계에서 정의한 기능을 실제로 수행하기 위한 방법을

논리적으로 결정하는 단계

시스템 구조 설계

• 시스템을 구성하는 내부 프로그램이나 모듈 간의 관계와 구조 설계

프로그램 설계

• 프로그램 내의 각 모듈에서의 처리 절차나 알고리즘을 설계

사용자 인터페이스 설계

• 사용자가 시스템을 사용하기 위해 보여지는 부분 설계

소프트웨어 생명주기 (4)

Page 7: 소프트웨어와 자료구조 - mclab.silla.ac.krmclab.silla.ac.kr/lecture/201301/ds/ds_lecture_02.pdf가상코드를 이용한 알고리즘의 표현 가상코드, 즉 알고리즘

7

설계 방법

• 하향식 설계 방법

상위단계에서 하위단계로 설계해가면서 점차 구체적으로 설계하는 방법

분할 정복(Divide & Conquer) 방식의 설계 방법

소프트웨어 생명주기 (5)

Page 8: 소프트웨어와 자료구조 - mclab.silla.ac.krmclab.silla.ac.kr/lecture/201301/ds/ds_lecture_02.pdf가상코드를 이용한 알고리즘의 표현 가상코드, 즉 알고리즘

8

• 상향식 설계 방법

하위단계의 작은 단위의 문제를 먼저 해결하고 이를 이용하여 상위단계의큰 단위의 문제를 해결하는 방법

• 객체지향 설계 방법

하위단위의 문제해결 도구를 객체로 만들어 재사용하는 방법으로전체 문제를 해결하는 방법

소프트웨어 생명주기 (6)

Page 9: 소프트웨어와 자료구조 - mclab.silla.ac.krmclab.silla.ac.kr/lecture/201301/ds/ds_lecture_02.pdf가상코드를 이용한 알고리즘의 표현 가상코드, 즉 알고리즘

9

구현 단계

설계 단계에서 논리적으로 결정한 문제 해결 방법(알고리즘)을

프로그래밍언어를 사용하여 실제 프로그램을 작성하는 단계

프로그래밍 기법

• 구조화 프로그래밍

지정문과 조건문, 반복문만을 사용하여 프로그램을 작성순차구조, 선택구조, 반복구조의 세가지 제어구조로 표현구조가 명확하여 정확성 검증과 테스트 및 유지보수 용이

• 모듈러 프로그래밍

프로그램을 여러 개의 작은 모듈로 나누어 계층 관계로 구성하는프로그래밍 기법모듈별로 개발과 테스트 및 유지보수 가능모듈의 재사용 가능

소프트웨어 생명주기 (7)

Page 10: 소프트웨어와 자료구조 - mclab.silla.ac.krmclab.silla.ac.kr/lecture/201301/ds/ds_lecture_02.pdf가상코드를 이용한 알고리즘의 표현 가상코드, 즉 알고리즘

10

테스트 단계

개발한 시스템이 요구사항을 만족하는지, 실행결과가 예상한 결과와

정확하게 맞는지를 검사하고 평가하는 일련의 과정

숨어있는 오류를 최대한 찾아내어 시스템의 완성도를 높이는 단계

1단계 : 단위 테스트(Unit Test)

• 시스템의 최소 구성요소가 되는 모듈에 대해서 개별적으로 시행

2단계 : 통합테스트(Integration test)

• 단위 테스트를 통과한 모듈을 연결하여 전체 시스템으로 완성하여 통합적

으로 시행하는 테스트

• 구성요소 연결을 점진적으로 확장하면서 테스트 시행

하향식 테스트상향식 테스트

소프트웨어 생명주기 (8)

Page 11: 소프트웨어와 자료구조 - mclab.silla.ac.krmclab.silla.ac.kr/lecture/201301/ds/ds_lecture_02.pdf가상코드를 이용한 알고리즘의 표현 가상코드, 즉 알고리즘

11

• 하향식/상향식 점진적 테스트

3단계 : 인수 테스트

• 완성된 시스템을 인수하기 위해서 실제 자료를 사용한 최종 테스트

소프트웨어 생명주기 (9)

Page 12: 소프트웨어와 자료구조 - mclab.silla.ac.krmclab.silla.ac.kr/lecture/201301/ds/ds_lecture_02.pdf가상코드를 이용한 알고리즘의 표현 가상코드, 즉 알고리즘

12

유지보수 단계

시스템이 인수되고 설치된 후 일어나는 모든 활동

• 소프트웨어 생명주기에서 가장 긴 기간

유지보수의 유형

• 수정형 유지보수

사용 중에 발견한 프로그램의 오류 수정 작업

• 적응형 유지보수

시스템과 관련한 환경적 변화에 적응하기 위한 재조정 작업

• 완전형 유지보수

시스템의 성능을 향상시키기 위한 개선 작업

• 예방형 유지보수

앞으로 발생할지 모를 변경 사항을 수용하기 위한 대비 작업

소프트웨어 생명주기 (10)

Page 13: 소프트웨어와 자료구조 - mclab.silla.ac.krmclab.silla.ac.kr/lecture/201301/ds/ds_lecture_02.pdf가상코드를 이용한 알고리즘의 표현 가상코드, 즉 알고리즘

13

개발된 소프트웨어의 품질 평가

• 정확성

요구되는 기능들을 정확하게 수행하는 정도를 평가

• 유지 보수성

효율적 유지 보수의 정도를 평가

• 무결성

바이러스 등의 외부 공격에 대한 보안성 평가

• 사용성

사용자가 쉽고 편리하게 사용할 수 있는가에 대한 평가

소프트웨어 생명주기 (11)

Page 14: 소프트웨어와 자료구조 - mclab.silla.ac.krmclab.silla.ac.kr/lecture/201301/ds/ds_lecture_02.pdf가상코드를 이용한 알고리즘의 표현 가상코드, 즉 알고리즘

14

뇌의 추상화 기능

기억할 대상의 구별되는 특징만을 단순화하여 기억하는 기능

• 예: 뇌의 추상화 기능

추상 자료형 (1)

Page 15: 소프트웨어와 자료구조 - mclab.silla.ac.krmclab.silla.ac.kr/lecture/201301/ds/ds_lecture_02.pdf가상코드를 이용한 알고리즘의 표현 가상코드, 즉 알고리즘

15

컴퓨터를 이용한 문제해결에서의 추상화(Abstraction)

크고 복잡한 문제를 단순화시켜 쉽게 해결하기 위한 방법

자료 추상화(Data Abstraction)

• 처리할 자료, 연산, 자료형에 대한 추상화 표현

• 자료 : 프로그램의 처리 대상이 되는 모든 것을 의미

• 연산: 어떤 일을 처리하는 과정. 연산자에 의해 수행

예) 더하기 연산은 +연산자에 의해 수행

• 자료형 : 처리할 자료의 집합과 자료에 대해 수행할 연산자의 집합

정수 자료형의 자료 : 정수의 집합. {…, -1, 0, 1, …}연산자 : 정수에 대한 연산자 집합. {+, -, x, ÷, mod}

추상 자료형 (2)

Page 16: 소프트웨어와 자료구조 - mclab.silla.ac.krmclab.silla.ac.kr/lecture/201301/ds/ds_lecture_02.pdf가상코드를 이용한 알고리즘의 표현 가상코드, 즉 알고리즘

16

추상 자료형(ADT, Abstract Data Type)

자료와 연산자의 특성을 논리적으로 추상화하여 정의한 자료형

추상화와 구체화

추상화 – “무엇(what)인가?”를 논리적으로 정의

구체화 – “어떻게(how) 할 것인가?”를 실제적으로 표현

추상 자료형 (3)

Page 17: 소프트웨어와 자료구조 - mclab.silla.ac.krmclab.silla.ac.kr/lecture/201301/ds/ds_lecture_02.pdf가상코드를 이용한 알고리즘의 표현 가상코드, 즉 알고리즘

17

자료와 연산에 있어서의 추상화와 구체화의 관계

추상 자료형 (4)

Page 18: 소프트웨어와 자료구조 - mclab.silla.ac.krmclab.silla.ac.kr/lecture/201301/ds/ds_lecture_02.pdf가상코드를 이용한 알고리즘의 표현 가상코드, 즉 알고리즘

18

알고리즘• 문제 해결 방법을 추상화하여 각 절차를 논리적으로 기술해 놓은 명세서

알고리즘의 조건

• 입력(input):

알고리즘 수행에 필요한 자료가 외부에서 입력으로 제공될 수 있어야 한다.

• 출력(output)

알고리즘 수행 후 하나 이상의 결과를 출력해야 한다.

• 명확성(definiteness)

수행할 작업의 내용과 순서를 나타내는 알고리즘의 명령어들은 명확하게명세되어야 한다.

• 유한성(finiteness)

알고리즘은 수행 뒤에 반드시 종료되어야 한다.

• 효과성(effectiveness)

알고리즘의 모든 명령어들은 기본적이며 실행이 가능해야 한다.

알고리즘 (1)

Page 19: 소프트웨어와 자료구조 - mclab.silla.ac.krmclab.silla.ac.kr/lecture/201301/ds/ds_lecture_02.pdf가상코드를 이용한 알고리즘의 표현 가상코드, 즉 알고리즘

19

알고리즘 (2)

[요리 재료]

스펀지케이크(20×20cm) 1개, 크림치즈 200g, 달걀 푼 물 2개 분량,

설탕 3큰술, 레몬즙·바닐라에센스 1큰술씩, 딸기시럽(딸기 500g,

설탕 1½ 컵, 레몬즙 1작은술), 딸기 1개, 플레인 요구르트 2큰술

자료

절차

[요리법]

① 케이크 틀의 가장자리에 필름을 돌린 다음 스펀지케이크를 놓는다.

② 볼에 크림치즈를 넣고 거품기로 젓다가 달걀 푼 물과 설탕 3큰술을

세번에 나누어 넣으면서 크림 상태로 만든다.

③ ②에 레몬즙과 바닐라에센스를 넣고 살짝 저은 다음 ①에 붓는다.

이것을 180℃의 오븐에 넣고 20분 정도 굽는다.

④ 냄비에 슬라이스한 딸기와 설탕 1½ 컵을 넣고 끓이다가 약한 불에서

눌어붙지 않도록 저으면서 거품을 걷어낸다. 되직해지면

레몬즙을 넣고 차게 식힌다.

⑤ 접시에 치즈케이크를 한 조각 담고 ④의 시럽을 뿌린 다음

플레인 요구르트와 딸기를 얹어낸다 .

알고리즘

Page 20: 소프트웨어와 자료구조 - mclab.silla.ac.krmclab.silla.ac.kr/lecture/201301/ds/ds_lecture_02.pdf가상코드를 이용한 알고리즘의 표현 가상코드, 즉 알고리즘

20

알고리즘의 표현 방법

자연어를 이용한 서술적 표현 방법

순서도(Flow chart)를 이용한 도식화 표현 방법

가상코드(Pseudo-code)를 이용한 추상화 방법

프로그래밍 언어를 이용한 구체화 방법

알고리즘 (3)

Page 21: 소프트웨어와 자료구조 - mclab.silla.ac.krmclab.silla.ac.kr/lecture/201301/ds/ds_lecture_02.pdf가상코드를 이용한 알고리즘의 표현 가상코드, 즉 알고리즘

21

순서도를 이용한 알고리즘의 표현

순서도에서 사용하는 기호

장점 : 알고리즘의 흐름 파악이 용이함

단점 : 복잡한 알고리즘의 표현이 어려움

알고리즘 (4)

Page 22: 소프트웨어와 자료구조 - mclab.silla.ac.krmclab.silla.ac.kr/lecture/201301/ds/ds_lecture_02.pdf가상코드를 이용한 알고리즘의 표현 가상코드, 즉 알고리즘

22

순서도 예) 1부터 5까지의 합을 구하는 알고리즘

알고리즘 (5)

Page 23: 소프트웨어와 자료구조 - mclab.silla.ac.krmclab.silla.ac.kr/lecture/201301/ds/ds_lecture_02.pdf가상코드를 이용한 알고리즘의 표현 가상코드, 즉 알고리즘

23

가상코드를 이용한 알고리즘의 표현

가상코드, 즉 알고리즘 기술언어(ADL)를 사용하여 프로그래밍

언어의 일반적인 형태와 유사하게 알고리즘을 표현

특정 프로그래밍 언어가 아니므로 직접 실행은 불가능

일반적인 프로그래밍 언어의 형태이므로 원하는 특정 프로그래밍

언어로의 변환 용이

알고리즘 (6)

Page 24: 소프트웨어와 자료구조 - mclab.silla.ac.krmclab.silla.ac.kr/lecture/201301/ds/ds_lecture_02.pdf가상코드를 이용한 알고리즘의 표현 가상코드, 즉 알고리즘

24

가상코드의 형식

기본 요소

• 기호

변수, 자료형 이름, 프로그램 이름, 레코드 필드 명, 문장의 레이블 등을 나타냄문자나 숫자의 조합. 첫 문자는 반드시 영문자 사용

• 자료형

정수형과 실수형의 수치 자료형, 문자형, 논리형, 포인터, 문자열 등의모든 자료형 사용

• 연산자

산술연산자, 관계연산자, 논리연산자

알고리즘 (7)

Page 25: 소프트웨어와 자료구조 - mclab.silla.ac.krmclab.silla.ac.kr/lecture/201301/ds/ds_lecture_02.pdf가상코드를 이용한 알고리즘의 표현 가상코드, 즉 알고리즘

25

대입문

• 사용형식

대입연산자(←)의 오른쪽에 있는 값(식의 계산 결과값이나 변수값)을

대입연산자(←)의 왼쪽에 있는 변수에 저장

조건문

• 조건에 따라 실행할 명령문이 결정되는 선택적 제어 구조

• if 문

형식

알고리즘 (8)

Page 26: 소프트웨어와 자료구조 - mclab.silla.ac.krmclab.silla.ac.kr/lecture/201301/ds/ds_lecture_02.pdf가상코드를 이용한 알고리즘의 표현 가상코드, 즉 알고리즘

26

• if 문의 제어 흐름

중첩 if 문

알고리즘 (9)

Page 27: 소프트웨어와 자료구조 - mclab.silla.ac.krmclab.silla.ac.kr/lecture/201301/ds/ds_lecture_02.pdf가상코드를 이용한 알고리즘의 표현 가상코드, 즉 알고리즘

27

if문 사용 예) 평균 점수에 따른 등급 계산하기

알고리즘 (10)

Page 28: 소프트웨어와 자료구조 - mclab.silla.ac.krmclab.silla.ac.kr/lecture/201301/ds/ds_lecture_02.pdf가상코드를 이용한 알고리즘의 표현 가상코드, 즉 알고리즘

28

• case 문

여러 조건식 중에서 해당 조건을 찾아서 그에 대한 명령문을 수행중첩 if 문으로 표현 가능형식

case 문의 제어 흐름

알고리즘 (11)

Page 29: 소프트웨어와 자료구조 - mclab.silla.ac.krmclab.silla.ac.kr/lecture/201301/ds/ds_lecture_02.pdf가상코드를 이용한 알고리즘의 표현 가상코드, 즉 알고리즘

29

case 문 사용 예) 평균 점수에 따른 등급 계산하기

알고리즘 (12)

Page 30: 소프트웨어와 자료구조 - mclab.silla.ac.krmclab.silla.ac.kr/lecture/201301/ds/ds_lecture_02.pdf가상코드를 이용한 알고리즘의 표현 가상코드, 즉 알고리즘

30

반복문

• 일정한 명령을 반복 수행하는 루프(loop) 형태의 제어구조

• for 문

형식 :

초기값 : 반복문을 시작하는 값조건식 : 반복 수행 여부를 검사하는 조건식증감값 : 반복 회수를 계산하기 위해서 반복문을 한번 수행할 때마다 증가또는 감소시키는 값

for 문의 제어 흐름

알고리즘 (13)

Page 31: 소프트웨어와 자료구조 - mclab.silla.ac.krmclab.silla.ac.kr/lecture/201301/ds/ds_lecture_02.pdf가상코드를 이용한 알고리즘의 표현 가상코드, 즉 알고리즘

31

• while 문

형식 :

조건식이 참인 동안 명령문을 반복 수행while 문의 제어 흐름

알고리즘 (14)

Page 32: 소프트웨어와 자료구조 - mclab.silla.ac.krmclab.silla.ac.kr/lecture/201301/ds/ds_lecture_02.pdf가상코드를 이용한 알고리즘의 표현 가상코드, 즉 알고리즘

32

• do-while 문

형식 :

일단 명령문을 한번 실행한 후에 조건식을 검사하여 조건식이 참인 동안명령문을 반복 수행

do-while 문의 제어 흐름

알고리즘 (15)

Page 33: 소프트웨어와 자료구조 - mclab.silla.ac.krmclab.silla.ac.kr/lecture/201301/ds/ds_lecture_02.pdf가상코드를 이용한 알고리즘의 표현 가상코드, 즉 알고리즘

33

함수문

• 처리작업 별로 모듈화하여 만든 부프로그램

• 형식 :

• 함수의 호출과 실행 및

결과값 반환에 대한 제어 흐름

알고리즘 (16)

Page 34: 소프트웨어와 자료구조 - mclab.silla.ac.krmclab.silla.ac.kr/lecture/201301/ds/ds_lecture_02.pdf가상코드를 이용한 알고리즘의 표현 가상코드, 즉 알고리즘

34

알고리즘 성능 분석 방법

공간 복잡도

• 알고리즘을 프로그램으로 실행하여 완료하기까지 필요한 총 저장 공간량

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

시간 복잡도

• 알고리즘을 프로그램으로 실행하여 완료하기까지의 총 소요시간

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

컴파일 시간 : 프로그램마다 거의 고정적인 시간 소요실행 시간 :

» 동일한 컴퓨터에서의 실제 실행시간을 측정하여 비교

» 컴퓨터의 성능에 따라 달라질 수 있으므로 실제 실행시간보다 명령문의 실행 빈도수를 계산하여 비교

성능분석 (1)

Page 35: 소프트웨어와 자료구조 - mclab.silla.ac.krmclab.silla.ac.kr/lecture/201301/ds/ds_lecture_02.pdf가상코드를 이용한 알고리즘의 표현 가상코드, 즉 알고리즘

35

프로그램 실행시간 측정

컴퓨터에서 수행시간을 측정하는 방법에는 주로 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);

}

성능분석 (2]

Page 36: 소프트웨어와 자료구조 - mclab.silla.ac.krmclab.silla.ac.kr/lecture/201301/ds/ds_lecture_02.pdf가상코드를 이용한 알고리즘의 표현 가상코드, 즉 알고리즘

36

실행 복잡도 분석

알고리즘을 이루고 있는 연산들이 실행 빈도수를 계산하여 숫자로

표시

산술 연산, 대입 연산, 비교 연산, 이동 연산의 기본적인 연산

• 수행시간이 입력의 크기에 따라 변하면 안됨

시간 복잡도 함수

• 알고리즘의 연산의 수행횟수를 고정된 숫자가 아니라 입력의 개수 n에 대

한 함수로 표현 T(n) 으로 표기

성능분석 (2]

연산의 수 = 8

3n+2

연산의 수 =26

5n2 +6

프로그램 A 프로그램 B

워드2005 워드2000

Page 37: 소프트웨어와 자료구조 - mclab.silla.ac.krmclab.silla.ac.kr/lecture/201301/ds/ds_lecture_02.pdf가상코드를 이용한 알고리즘의 표현 가상코드, 즉 알고리즘

37

실행 복잡도 분석 예 (1)

n을 n번 더하는 문제:

• 각 알고리즘이 수행하는 연산의 개수를 세어 본다.

• 단 for 루프 제어 연산은 고려하지 않음

성능분석 (3]

알고리즘 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←1 to n dosum ←sum + 1;

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

대입연산 1 n + 1 n*n + 1

덧셈연산 n n*n

곱셈연산 1

나눗셈연산

전체연산수 2 2n + 1 2n2 + 1

Page 38: 소프트웨어와 자료구조 - mclab.silla.ac.krmclab.silla.ac.kr/lecture/201301/ds/ds_lecture_02.pdf가상코드를 이용한 알고리즘의 표현 가상코드, 즉 알고리즘

38

실행 복잡도 분석 예 (1)

성능분석 (4]

입력의 개수 n

연산의 횟수

알고리즘 A

알고리즘 B

알고리즘 C

Page 39: 소프트웨어와 자료구조 - mclab.silla.ac.krmclab.silla.ac.kr/lecture/201301/ds/ds_lecture_02.pdf가상코드를 이용한 알고리즘의 표현 가상코드, 즉 알고리즘

39

실행 복잡도 분석 예 (2)

피보나치 수열 알고리즘의 빈도수 구하기

성능분석 (5]

fibonacci(n)01 if (n<0) then02 stop ;03 if (n≤1) then04 return n ;05 f1 ← 0 ;06 f2 ← 1 ;07 for (i←2 ; i≤n ; i←i+1) do {08 fn←f1+f2 ;09 f1←f2 ;10 f2←fn ;11 }12 return fn ;13 end

[알고리즘 2-1]

Page 40: 소프트웨어와 자료구조 - mclab.silla.ac.krmclab.silla.ac.kr/lecture/201301/ds/ds_lecture_02.pdf가상코드를 이용한 알고리즘의 표현 가상코드, 즉 알고리즘

40

실행 복잡도 분석 예 (2)n<0, n=0, n=1의 경우에 대한 실행 빈도수

• for 반복문이 수행되지 않기 때문에 실행 빈도수가 작다.

성능분석 (6)

Page 41: 소프트웨어와 자료구조 - mclab.silla.ac.krmclab.silla.ac.kr/lecture/201301/ds/ds_lecture_02.pdf가상코드를 이용한 알고리즘의 표현 가상코드, 즉 알고리즘

41

실행 복잡도 분석 예 (2)n>1의 일반적인 경우에 대한 실행 빈도수

• n에 따라 for 반복문 수행

• 총 실행 빈도수

= 1+0+1+0+1+1+n+(n-1)+(n-1)+(n-1)+0+1+0 = 4n+2

성능분석 (7)

Page 42: 소프트웨어와 자료구조 - mclab.silla.ac.krmclab.silla.ac.kr/lecture/201301/ds/ds_lecture_02.pdf가상코드를 이용한 알고리즘의 표현 가상코드, 즉 알고리즘

42

시간 복잡도 표기법

빅-오(Big-Oh) 표기법 사용

빅-오(Big-Oh) 표기법 순서

① 실행 빈도수를 구하여 실행시간 함수 찾기

② 실행시간 함수의 값에 가장 큰 영향을 주는 n에 대한 항을 선택하여

③ 계수는 생략하고 O (Big-Oh)의 오른쪽 괄호 안에 표시

피보나치 수열의 시간 복잡도 = O (n)

① 실행시간 함수 : 4n+2

② n에 대한 항을 선택 : 4n

③ 계수 4는 생략하고 O (Big-Oh)의 오른쪽 괄호 안에 표시 : O (n)

성능분석 (8)

Page 43: 소프트웨어와 자료구조 - mclab.silla.ac.krmclab.silla.ac.kr/lecture/201301/ds/ds_lecture_02.pdf가상코드를 이용한 알고리즘의 표현 가상코드, 즉 알고리즘

43

시간 복잡도 표기법자료의 개수가 많은 경우에는 차수가 가장 큰 항이

가장 영향을 크게 미치고 다른 항들은 상대적으로

무시될 수 있다.

• (예) 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)

성능분석 (9)

입력의 개수 n

연산의 횟수

))(( nfO

)(nf

0n

n=1000인 경우

T(n)= n2 + n + 1

99% 1%

Page 44: 소프트웨어와 자료구조 - mclab.silla.ac.krmclab.silla.ac.kr/lecture/201301/ds/ds_lecture_02.pdf가상코드를 이용한 알고리즘의 표현 가상코드, 즉 알고리즘

44

시간 복잡도 표기법

빅오 표기법 예

성능분석 (10)

Page 45: 소프트웨어와 자료구조 - mclab.silla.ac.krmclab.silla.ac.kr/lecture/201301/ds/ds_lecture_02.pdf가상코드를 이용한 알고리즘의 표현 가상코드, 즉 알고리즘

45

각 실행 시간 함수에서 n값의 변화에 따른 실행 빈도수 비교

성능분석 (11]

Page 46: 소프트웨어와 자료구조 - mclab.silla.ac.krmclab.silla.ac.kr/lecture/201301/ds/ds_lecture_02.pdf가상코드를 이용한 알고리즘의 표현 가상코드, 즉 알고리즘

46

각 실행 시간 함수에서 n값의 변화에 따른 실행 빈도수 비교

성능분석 (12]

O(1) : 상수형

O(logn) : 로그형

O(n) : 선형

O(nlogn) : 로그선형

O(n2) : 2차형

O(n3) : 3차형

O(nk) : k차형

O(2n) : 지수형

O(n!) : 팩토리얼형

Page 47: 소프트웨어와 자료구조 - mclab.silla.ac.krmclab.silla.ac.kr/lecture/201301/ds/ds_lecture_02.pdf가상코드를 이용한 알고리즘의 표현 가상코드, 즉 알고리즘

47

알고리즘의 수행시간은 입력 자료 집합에 따라 다를 수 있다.

• (예) 정렬 알고리즘의 수행 시간은 입력 집합에 따라 다를 수 있다.

최선의 경우(best case): 수행 시간이 가장 빠른 경우

평균의 경우(average case): 수행시간이 평균적인 경우

최악의 경우(worst case): 수행 시간이 가장 늦은 경우

최선, 평균 최악의 경우 (1]

최악의 경우

최선의 경우

평균적인 경우

A B C D E F G입력 집합

수행

시간

100

50

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

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

려움.

최악의 경우: 가장 널리 사용된다. 계산

하기 쉽고 응용에 따라서 중요한 의미를

가질 수도 있다.

(예) 비행기 관제업무, 게임, 로보틱스

Page 48: 소프트웨어와 자료구조 - mclab.silla.ac.krmclab.silla.ac.kr/lecture/201301/ds/ds_lecture_02.pdf가상코드를 이용한 알고리즘의 표현 가상코드, 즉 알고리즘

48

최선, 평균 최악의 경우 (2]

(예) 순차탐색최선의 경우: 찾고자 하는 숫자가 맨앞에 있는 경우

∴ O(1)

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

∴ O(n)

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

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

∴ O(n)

Page 49: 소프트웨어와 자료구조 - mclab.silla.ac.krmclab.silla.ac.kr/lecture/201301/ds/ds_lecture_02.pdf가상코드를 이용한 알고리즘의 표현 가상코드, 즉 알고리즘

자바로 배우는 쉬운 자료구조 2장 끝