알고리즘 (Algorithm) | 프로그램(Program) |
---|---|
설계(Design) 시간 | 구현(Implementation) 시간 |
도메인 지식(Domain Knowledge) | 프로그래머 |
임의 언어(수학 등) | 프로그래밍 언어(C/C++, R, 파이썬) |
하드웨어 및 운영체제 독립 | 하드웨어 및 운영체제 의존 |
알고리즘 분석 | 프로그램 테스트 |
사전 분석(Priori Analysis) | 사후 검정(Posteriori Testing) |
---|---|
알고리즘 | 프로그램 |
프로그래밍 언어 독립적 | 프로그래밍 언어에 의존 |
하드웨어 독립적 | 하드웨어에 의존 |
시공간(Time & Space) 함수 | 실행시간과 저장공간 점검 |
알고리즘 특성
[1] 2 1
알고리즘 성능평가
상기 알고리즘(swap
)에 대해서 시간 복잡도와 공간 복잡도는 다음과 같다.
a
, b
, temp
, result
사실, 이런 단순한 경우 알고리즘 성능평가가 무의미하지만, 지금에서 화성에 가는 알고리즘을 제작할 경우 시간 복잡도와 공간복잡도 뿐만 아니라 다양한 요인을 고려해야된다. 이유는 어떤 알고리즘을 취하냐에 따라 결과가 극도로 달라지기 때문이다.
A <- c(8,3,9,7,2)
calculate_sum <- function(A, n) {
sum_val <- 0
for(i in 1:n) {
sum_val <- sum_val + A[i]
}
return(sum_val)
}
calculate_sum(A, 1)
[1] 8
[1] 11
[1] 29
Frequency Count Method을 적용하여 상기 calculate_sum()
함수를 분석하면 다음과 같다.
for
루프 \(n+1\), sum_val
\(n\), 반환 1 = \(2n+3 \approx O(n)\)A - n
, n - 1
, sum_val - 1
, i = 1
= \(n + 3 \approx O(n)\)A <- diag(x = 1, nrow=3, ncol=3)
B <- matrix(1:9, nrow=3)
matrix_sum <- function(A, B, n) {
sum_mat <- matrix(1:(n*n), nrow=n)
for(i in 1:n) {
for(j in 1:n) {
sum_mat[i,j] <- A[i,j] + B[i,j]
}
}
return(sum_mat)
}
matrix_sum(A,B,1)
[,1]
[1,] 2
[,1] [,2]
[1,] 2 4
[2,] 2 6
[,1] [,2] [,3]
[1,] 2 4 7
[2,] 2 6 8
[3,] 3 6 10
Frequency Count Method을 적용하여 상기 행렬 합을 구하는 matrix_sum()
함수를 분석하면 다음과 같다.
for(i in 1:n)
→ \(n+1\)for(j in 1:n)
→ \(n \times (n+1)\)sum_mat[i,j] <- A[i,j] + B[i,j]
→ \(n \times n\)A
, B
, sum_mat
→ \(n^2\)n
, i
, j
→ \(3\)