자료구조 01 : 알고리즘 분석
개요
알고리즘
주어진 문제를 유한한 시간 내에 해결하는 단계적 절차
데이터 구조
데이터를 조직하고 접근하는 체계적 방식
프로그램
주어진 문제를 유한한 시간 내에 해결하는 단계적 절차
데이터를 조직하고 접근하는 체계적 방식
알고리즘 + 데이터 구조
의사코드
알고리즘을 설명하기 위한 고급 언어
알고리즘을 설명하기 위한 고급 언어
자연어 문장보다 더 구조적, 프로그래밍 언어보다 덜 상세
Alg arrayMax(Arr, n)
input array Arr of n integers
output maximun element of Arr
1. currenMax ← A[0]
2. for i ← 1 to n-1
if(A[i] > currentMax)
currentMax ← A[i]
3. return currentMax
제어
<if문>
if(exp)
statement
elseif(exp)
statement
else
statement
<for문>
for var ← exp to exp
statement
for var ← exp downto exp
statement
<foreach문>
for each var ∈ exp
statement
<while문>
while(exp)
statement
<do-while문>
do
statement
while(exp)
메소드
Alg methodname(arg) 정의
something
return exp 반환
methodname(arg) 호출
주석
{ 주석내용 }
연산
← 치환
= < ≤ > ≥ 관계 연산자
& || ! 논리 연산자
s₁ n² 수학적 표현 (쳠자 등)
임의접근기계 모델
- 무제한의 메모리 셀을 갖는 하나의 CPU
- 메모리 셀은 순번으로 나열되고, 임의의 수/문자 데이터를 저장
- 임의접근기계가 어떤 셀에 접근할 때 항상 상수시간 소요
3-1. 임의접근기계가 원시작업을 실행 시 항상 상수시간 소요
원시작업
- 무제한의 메모리 셀을 갖는 하나의 CPU
- 메모리 셀은 순번으로 나열되고, 임의의 수/문자 데이터를 저장
- 임의접근기계가 어떤 셀에 접근할 때 항상 상수시간 소요
3-1. 임의접근기계가 원시작업을 실행 시 항상 상수시간 소요
의사코드로 표현 가능한, 알고리즘에 의해 수행되는 기본적 계산
(e.g.) EXP, ASS, IND, CAL, RET
원시작업의 수
의사코드를 조사하여 알고리즘이 실행하는 원시작업의 최대 개수를 입력크기의 함수 형태로 결정할 수 있다.
Alg something(n)
input integer n
output integer m
1. m←0 {ASS / 1}
2. for i←0 to n-1 {ASS, EXP / 2+n}
m←i {ASS / n}
3. return m {RET / 1}
{원시작업 갯수 합 : 1 + 2+n + n + 1 = 2n+3}
실행시간
특징
- 실행시간은 입력크기와 함께 성장
- 최악실행시간의 분석이 평균실행시간 대비 용이하고 결정적
실험적 방법을 통한 실행시간 추정
- 과정
- 알고리즘을 구현하는 프로그램을 작성
- 다양한 입력을 사용하여 실행 + System Call로 실행시간 측정
- 도표형태로 결과 작성 ( e.g. : X축 입력크기 / Y축 실행시간 )
- 한계
- 모든 입력에 대한 결과를 반영 불가
- 여러 알고리즘을 비교시 동일한 HW, SW환경 필요
- 알고리즘을 완전한 프로그램으로 구현 어려움
이론적 방법을 통한 실행시간 추정
- 특징 ← 실험적 방법의 한계 해결
- 모든 입력가능성 고려
- hw, sw 무관
- 의사코드로 표현된 알고리즘 사용
- 실행시간 추정
- 가정
원시작업 수 : 5n+3
T(n) : 알고리즘 T에 대한 최악의 실행시간
a : 가장 빠른 원시작업의 실행 시간
b : 가장 느린 원시작업의 실행 시간
- 실행시간 T(n)
a(5n+3) ≤ T(n) ≤ b(5n+3)
실행시간의 증가율
- 알고리즘을 구현하는 프로그램을 작성
- 다양한 입력을 사용하여 실행 + System Call로 실행시간 측정
- 도표형태로 결과 작성 ( e.g. : X축 입력크기 / Y축 실행시간 )
- 모든 입력에 대한 결과를 반영 불가
- 여러 알고리즘을 비교시 동일한 HW, SW환경 필요
- 알고리즘을 완전한 프로그램으로 구현 어려움
- 모든 입력가능성 고려
- hw, sw 무관
- 의사코드로 표현된 알고리즘 사용
- 가정
원시작업 수 : 5n+3
T(n) : 알고리즘 T에 대한 최악의 실행시간
a : 가장 빠른 원시작업의 실행 시간
b : 가장 느린 원시작업의 실행 시간
- 실행시간 T(n)
a(5n+3) ≤ T(n) ≤ b(5n+3)
실행시간의 증가율은 어떤 알고리즘의 고유한 속성이다.
나열된 순서로 입력크기에 따른 실행시간의 증가율이 크다
함수형태 | 함수이름 | n=100일 때 값 |
---|---|---|
c | 상수함수 | 1 |
logn | 로그함수 | 7 |
log2n | 로그제곱함수 | 49 |
n | 선형함수 | 102 |
nlogn | 로그선형함수 | 7*102 |
n2 | 2차함수 | 104 |
n3 | 3차함수 | 106 |
2n | 지수함수 | 1030 |
Big-Oh 표기법
주어진 두 개의 함수 f(n)과 g(n)에 관해,
만약 모든 정수 n≥n0에 대해 f(n)≤c • g(n)가 성립하는
실수의 상수 c>0 및 정수의 상수 n0≥1가 존재하면,
"f(n)=O(g(n))"이라고 말한다.
함수의 증가율의 상한을 나타낸다.
f(n) = O(g(n))
→ f(n)의 증가율이 g(n)의 증가율을 넘지 않는다.
→ 점근적으로 f(n)≤g(n) 이다.
(e.g.)
f(n) = 7n-2
--> f(n) = O(n)이라 두면
--> 7n-2 ≤ cn 은 c=7, n0=1에 대해 만족
Big-Omega 표기법
주어진 두 개의 함수 f(n)과 g(n)에 관해,
만약 모든 정수 n≥n0에 대해 f(n)≥c • g(n)가 성립하는
실수의 상수 c>0 및 정수의 상수 n0≥1가 존재하면,
"f(n)=Ω(g(n))"이라고 말한다.
함수의 증가율의 하한을 나타낸다.
f(n) = Ω(g(n))
→ f(n)의 증가율은 g(n)의 증가율을 넘는다.
→ 점근적으로 f(n)≥g(n) 이다.
Big-Theta 표기법
주어진 두 개의 함수 f(n)과 g(n)에 관해,
만약 모든 정수 n≥n0에 대해 c'•g(n)≤f(n)≤c''•g(n)가 성립하는
실수의 상수 c'>0, c''>0 및 정수의 상수 n0≥1가 존재하면,
"f(n)=Θ(g(n))"이라고 말한다.
함수의 증가율의 상/하한을 모두 나타낸다. ( = 동일함수를 나타낸다.)
f(n) = Θ(g(n))
→ f(n) = O(g(n)) = Ω(g(n))
→ 점근적으로 f(n) = g(n) 이다.
Author And Source
이 문제에 관하여(자료구조 01 : 알고리즘 분석), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@yiwonjin/자료구조-01-알고리즘-분석저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)