Notice
Recent Posts
Recent Comments
Link
«   2024/07   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31
Archives
Today
Total
관리 메뉴

브래의 슬기로운 코딩 생활

알고리즘의 이해, 표현 방식, 성능 분석 본문

Class/자료구조, 알고리즘

알고리즘의 이해, 표현 방식, 성능 분석

김브래 2023. 2. 12. 15:52

알고리즘의 이해


알고리즘

- 문제해결 방법추상화하여 단계적 절차논리적으로 기술해 놓은 명세서

 

알고리즘의 조건

- 입력 input : 알고리즘 수행에 필요한 자료가 외부에서 입력으로 제공 될 수 있어야 한다.
- 출력 output : 알고리즘 수행 후 하나 이상결과를 출력해야 한다.
- 명확성 definiteness : 수행할 작업의 내용과 순서를 나타내는 알고리즘의 명령어들은 명확하게 명세 되어야 한다.
- 유한성 finiteness : 알고리즘은 수행 뒤에 반드시 종료되어야 한다.
- 효과성 effectiveness : 알고리즘의 모든 명령어들은 기본적이며 실행가능해야 한다.

알고리즘 = 자료를 이용하여 절차에 맞게 연산을 하는것


알고리즘의 표현 방법


알고리즘의 표현 방법의 종류

- 자연어를 이용한 서술적 표현 방법
- 순서도 Flow chart를 이용한 도식화 표현 방법
- 프로그래밍 언어를 이용한 구체화 방법
- 가상코드 Pseudo-code를 이용한 추상화 방법
 

순서도를 이용한 도식화

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

가상코드를 이용한 추상화

- 가상코드, 알고리즘 기술언어 ADL, Algorithm Description Language사용하여 프로그래밍 언어의 일반적인 형태유사하게 알고리즘표현
- 특정 프로그래밍 언어가 아니므로 직접 실행불가능
- 일반적인 프로그래밍 언어의 형태이므로 원하는 특정 프로그래밍 언어로의 변환 용이
 

가상코드의 형식

기본 요소
 
기호
 
변수, 자료형 이름, 프로그램 이름, 레코드 필드 명, 문장의 레이블 을 나타냄
문자숫자조합. 첫 문자반드시 영문자 사용.
 
자료형
 
정수형실수형 수치 자료형, 문자형, 논리형, 포인터, 문자열 모든 자료형 사용
 
연산자
 
산술연산자, 관계연산자, 논리연산자
 
 

지정문 형식과 

 

조건문

- 조건에 따라 실행명령문결정되는 선택적 제어구조를 만든다.
- if 형식제어흐름

다단계 조건문

- 중첩 if 의 형식과 제어 흐름

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

case

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

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

반복문

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

for - 형식과 제어흐름

while – do - 형식과 제어흐름

do-while 문 - 형식과 제어흐름

 

함수문

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

형식과


알고리즘의 성능분석


알고리즘 성능 분석 기준

- 기준에는 정확성, 명확성, 수행량, 메모리 사용량, 최적성 있음
 
정확성 : 올바른 자료 입력 시 유한시간 올바른 결과 출력 여부
명확성 : 알고리즘이 얼마나 이해하기 쉽고 명확하게 작성되었는가
수행량 : 일반적인 연산 제외, 알고리즘 특성 나타내는 중요 연산 모두 분석
메모리 사용량
최적성 : 가장 중요

 

알고리즘 성능 분석 방법

공간 복잡도

알고리즘프로그램으로 실행하여 완료하기까지 필요한 총 저장 공간의
공간 복잡도 = 고정 공간 + 가변 공간

 

시간 복잡도

알고리즘프로그램으로 실행하여 완료하기까지의 총 소요시간
시간 복잡도 = 컴파일 시간 + 실행 시간

 

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

 

실행 시간 : 컴퓨터성능에 따라 달라질 수 있으므로 실제 실행시간 보다는 명령문실행 빈도수에 따라 계산

 

실행 빈도수의 계산

지정문, 조건문, 반복문 내의 제어문과 반환문 실행시간 차이거의 없으므로 하나단위시간 갖는 기본 명령문으로 취급

 

시간 복잡도 ) 피보나치 수열 알고리즘의 빈도수 구하기

시간 복잡도 n<0, n=0, n=1경우에 대한 실행 빈도수

알고리즘 성능 분석 표기법

빅오 표기법 (big-O notation) 이란?

 

- 빅오 표기법알고리즘효율성표기해주는 표기법이다

- 알고리즘효율성데이터 개수(n)가 주어졌을 때 덧셈, 뺄셈, 곱셈 같은 기본 연산의 횟수를 의미한다.

- 빅오 표기법은 보통 알고리즘시간 복잡도공간 복잡도를 나타내는데 주로 사용함.

- 시간 복잡도알고리즘시간 효율성의미하고, 공간 복잡도알고리즘공간 (메모리) 효율성의미한다.

- 시간공간 복잡도를 나타내는 방법으로는 점근 표기법이라고 해서

빅오(Big-O) ②  빅오메가(big-Ω)  빅세타(big-Θ) 표기법이 있다.

 

빅오 표기법(Big-O)알고리즘 효율성을 상한선 기준으로 표기한다.

 

- 알고리즘 효율성값이 클수록 , 그래프향할수록 비효율적임의미한다.

 

빅오메가(big-Ω)하한선을 기준으로하고, 빅세타(big-Θ)상한선하한선사이기준으로 표기한다.

 

-표기법 (Big-O)

O(f(n))과 같이 표기, Big Oh of f(n)으로 읽음
 

수학적 정의  

함수 f(n)g(n)이 주어졌을 때, 모든 nn0에 대하여 |f(n)| c |g(n)|만족하는 상수 cn0존재하면, f(n) = O(g(n))이다.
 

함수상한을 나타내기 위한 표기법

최악의 경우에도 g(n)수행 시간 에는 알고리즘 수행 완료 보장
 

먼저 실행 빈도수를 구하여 실행 시간 함수를 찾고, 함수 값 가장 큰 영향주는 n대한 한 개 선택하여 계수생략하고 O 오른쪽 괄호 안 표시

 

[알고리즘 1-1]의 피보나치 수열에서 실행 시간 함수는 4n+2이고, 가장 영향이 큰 항은 4n인데 여기에서 계수 4를 생략하여 O(n)으로 표기

-오메가 표기법 (big-Ω)

Ω(f(n))과 같이 표기, Big Omega of f(n)으로 읽음
 

수학적 정의

함수 f(n)g(n)이 주어졌을 때, 모든 nn0에 대하여 |f(n)| c |g(n)|만족하는 상수 cn0존재하면, f(n) = Ω(g(n))이다.
 

함수하한을 나타내기 위한 표기법

 

어떤 알고리즘의 시간 복잡도 Ω(g(n))으로 분석되었다면, 알고리즘 수행에는 적어도 g(n)의 수행 시간이 필요함의미

 

-세타 표기법 (big-Θ)

θ(f(n))과 같이 표기, Big Theta of f(n)으로 읽음

 

수학적 정의
f(n)g(n)이 주어졌을 때, 모든 nn0에 대하여 c1 |g(n)| f(n)c2 |g(n)을 만족하는 상수 c1, c2n0이 존재하면, f(n) = θ(g(n))이다
 

상한과 하한이 같은 정확한 차수를 표현하기 위한 표기법

- f(n)= θ (g(n))이 되려면 f(n)= O(g(n))이면서 f(n)= Ω(g(n))이어야 함

빅 오의 자료구조 적용