컴퓨터 공학 알고리즘 이란?
해결하려는 문제가 있고, 컴퓨터로 구현 가능한 것
예를 들어 1+1의 문제가 있다면 답 2를 만들기 위한 문제 풀이를 컴퓨터로 구현한다면,
1+1이라는 문제를 해결하는 알고리즘을 구현한 것이다.
흔히 알고리즘이라 생각하는 것들
- 상기 1+1과 같은 쉬운 코드는 실무에서는 알고리즘이라 부르지 않음
- 그렇다고 명확한 기준이 존재하지 않음
- 하지만 알고리즘 책이나 위키 피디 등 공신력 있는 곳에 실린 것들은 확실히 알고리즘이라고 부르고 있음
훌륭한 알고리즘이란?
- 입력과 출력이 명확하다. (단, 입력은 빈 값일 수 있다.)
- 문제 풀이 단계가 명확하며, 모호하지 않는다.
- 유한 시간 안에 결과가 도출되어야 한다.
- 포팅이 어려운 해결법은 피한다. ( 예를 들어 특정 언어에서 지원하는 특정 API를 사용하여 풀이)
- 같은 문제를 푸는 다양한 방법 중에 가장 효율 적임 ( 시간 복잡도, 공간 복잡도 등을 따짐)
알고리즘의 효율성
- 자원을 효율적으로 사용한다.
- CPU 속도, 메모리 사용량 등
- 시간과 공간은 종종 상반 관계를 가진다.
- 자원을 많이 사용할수록 그 알고리즘이 복잡할 가능성이 높다.
- 시간 복잡도 ( time complexity)
- 공간 복잡도 ( space complexity)
- 알고리즘 복잡도를 표현하는 방법 중 하나 : 빅오 (Big - O) 표기법
알고리즘의 효율성 분석은 다소 추상적
알고리즘 공부를 할 때는 하드웨어 차이는 신경 쓰지 않는다. 그러므로 알고리즘 자체에 집중이 가능하다.
즉, RAM( random - access machine , 랜덤 접근 기계 [메모리 RAM을 뜻하는게 아님]) 를 사용한다는 전제로 알고리즘 풀이를 한다.
- 가상의 기계
- 레지스터를 갖춘 CPU 1개
- 메모리 간접 참조 (indirection) 지원
- 캐시 메모리 혹은 가상 메모리 등은 없음
그러므로 실제 코드 실행 속도는 하드웨어 따라 매우 달라질 수 있음
'프로그래밍 > 알고리즘' 카테고리의 다른 글
[알고리즘]05. 주먹구구식 알고리즘 (0) | 2022.12.15 |
---|---|
[알고리즘]04. 재귀 함수 (0) | 2022.12.15 |
[알고리즘]03. 기초 자료 구조와 시간 복잡도 (0) | 2022.12.15 |
[알고리즘]02.점근 표기법 및 빅오 표기법 (0) | 2022.12.15 |
[알고리즘]00. 알고리즘 공부를 시작 하면서 (0) | 2022.12.14 |