1. 효율적인 알고리즘
- 알고리즘이 시작하여 결과가 나올 때까지의 수행 시간이 짧으면서 컴퓨터 내에 있는 메모리와 같은 자원을 덜 사용하는 알고리즘이다. 일반적으로 수행시간이 메모리 공간보다도 더 중요하게 고려됨
2. 수행 시간 측정 방법
1) 알고리즘을 프로그래밍 언어로 작성하여 실제 컴퓨터 상에서 실행 시켜 수행시간 측정
- 알고리즘을 구현하고 테스트 하는 것이 필요
- 똑같은 하드웨어를 사용해서 알고리즘 수행 시간을 측정해야 함
- 소프트웨어 환경 또한 중요 (예: 프로그래밍 언어에 따라 수행 속도가 달라질 수 있다. 언어 번역 방식 차이에 따라..)
- 실험되지 않은 입력에 대해서는 수행 시간이 합당하다고 볼 수 없다.
2) 알고리즘 복잡도 분석
- 실제 알고리즘을 구현하지 않고서도 알고리즘의 효율성을 따져보는 기법, 구현하지 않고도 모든 입력을 고려하는 방법이고 실행 하드웨어나 소프트웨어 환경과는 관계없이 알고리즘의 효율성을 평가할 수 있다.
3. 알고리즘 분석
- 시간 복잡도와 공간 복잡도 측면을 고려할 수 있음
- 대개 알고리즘 복잡도라 하면 시간 복잡도를 의미함 (알고리즘이 차지 하는 공간 보다는 수행 시간에 더 중요)
1) 시간 복잡도: 알고리즘 수행 시간 분석
2) 공간 복잡도: 알고리즘이 사용하는 기억공간 분석
4. 시간 복잡도
- 알고리즘의 절대적인 수행 시간을 나타내는 것이 아님,
- 어떤 알고리즘이 수행하는 연산(산술연산, 대입연산, 비교연산, 이동 연산)의 개수를 계산하여 알고리즘을 비교할 수 있다.
5. 시간 복잡도 함수
- 연산들의 수행횟수는 고정된 숫자가 아님, 보통 프로그램에 주어지는 입력의 개수 n에 따라 변하게 됨
- 연산의 수를 입력의 개수 n의 함수로 나타낸 것, T(n)으로 표기함
예시) 양의 정수 n을 n번 더하는 문제
1) 알고리즘 종류
알고리즘 A |
알고리즘 B |
알고리즘 C |
sum <- n*n; |
for i <- 1 to n do sum <- sum + n; |
for i <- 1 to n do for j <- 1 to n do sum <- sum + 1; |
2) 알고리즘 비교
|
알고리즘 A |
알고리즘 B |
알고리즘 C |
대입연산 |
1 |
n |
n*n |
덧셈연산 |
|
n |
n*n |
곱셈연산 |
1 |
|
|
나눗셈연산 |
|
|
|
전체 연산 수 |
2 |
2n |
2n^2 |
- 모든 연산이 동일한 시간이 걸리고 하나의 연산이 t만큼 시간이 걸린다고 가정, 루프 제어 연산 생략
- A는 2t에 비례하는 시간이 필요, B는 2nt의 시간, C는 2n^t만큼의 시간이 걸림
그러므로 n이 커질수록 알고리즘간의 차이가 커지게 됨.
연산의 개수를 이용하여 알고리즘들을 비교하고 비교한 결과를 바탕으로 가장 효율적인 알고리즘을 선택할 수 있다.
6. 빅오 표기법
- 입력 자료의 개수가 큰 경우에는 차수가 가장 큰 항이 전체의 값을 주도함
- n의 값에 따른 함수의 상한 값을 나타내는 방법
- 시간 복잡도 함수에서 불필요한 정보를 제거하여 알고리즘 분석을 쉽게 할 목적으로 시간 복잡도를 표시 하는 방법
(기본 연산의 횟수가 다항식으로 표현되었을 경우 다항식의 최고차항만을 남기고 다른 항들과 상수항을 버리는 것, 최고차항의 계수도 버리고 단지 최고차항의 차수만을 사용)
* 주의 log n은 없애면 안된다.
- 많이 사용하는 빅오표기법 (순서대로 표기)
'컴&프로그래밍 > Etc, Install' 카테고리의 다른 글
MAMP에서 MySQL 패스워드 변경 (0) | 2021.09.28 |
---|---|
Mac OS X tree 명령어 설치, 실행 (1) | 2015.07.03 |
티스토리에 구문강조가 적용된 소스코드 삽입하는 방법 (1) | 2015.07.03 |
Mac OS X Eclipse CDT(C/C++ Development Tooling) 설치 (3) | 2015.02.03 |
NSAutorealsePool과 automic reference counting mode (1) | 2011.12.14 |