프로그램 = 자료구조 + 알고리즘
자료구조란? 자료를 정리하여 보관하는 여러 가지 구조
알고리즘이란? 주어진 문제를 처리하는 절차(현재 상태와 도달하고자 하는 상태의 gap을 문제라고 한다.)
메모리에서 자료구조를 표현할 때 아래와 같은 구조를 가진다.
알고리즘의 조건
의사코드(pseudocode)가 알고리즘 기술에 가장 많이 사용된다.
데이터 타입과 그 데이터 타입이 사용할 수 있는 연산을 같이 생각해야 한다.
추상자료형(ADT: Abstract Data Type)이란? 데이터 타입을 추상적(수학적)으로 정의한 것
데이터나 연산이 무엇(what)인지 정의하고, 그에 반해 어떻게(how) 컴퓨터 상에서 구현할 것인지는 신경쓰지 않는다.
추상화(abstraction)란? 사용자에게 중요한 정보는 강조되고 반면 중요하지 않은 구현 세부 사항은 제거하는 것
추상자료형의 장점으로는 외부로부터 내부 자료를 함부로 접근 못하게 한다는 것이다.
이를, 캡슐화(Encapsulation) 또는 정보은닉(Information Hiding)라고 한다.
시간 복잡도(time complexity)란? 얼마나 오래 걸리느냐를 표시
공간 복잡도(space complexity)란? 메모리를 얼마나 잡아먹느냐를 표시
알고리즘의 복잡도 분석은 직접 구현하지 않고서도 수행 시간을 분석할 수 있다.
알고리즘의 성능분석을 표기할 때 빅오표기법
을 사용하는데 연산희 횟수를 대략적(점근적)으로 표기한 것이고 최악의 경우 이정도의 성능을 낼 수 있음을 알려준다.
즉, 정확한 연산의 개수보다는 일반적인 증가추세가 중요하다는 의미이다.
만약, T(n) = n^2 + n + 1 이라면 n^2이 차수가 가장 높기 때문에 O(n^2)이라고 표기한다.
아래의 표는 대표적인 Big-O Complexity를 나타낸 것이다.
순차탐색에서의 예시를 들자면 아래와 같은 배열이 있다고 가정하자.
Best case - 찾고자 하는 값이 5라면, 이 숫자가 맨 앞에 있어서 한번만 탐색하면 되므로 O(1)이다.
Worst case - 찾고자 하는 값이 43이라면, 이 숫자가 맨 뒤에 있어서 n번 탐색하면 되므로 O(n)이다.
Average case - 우리가 찾고자 하는 값들을 균일하게 탐색한다고 가정하면 (1 + 2 + ... + n) / n = (n + 1) / 2이므로 O(n)이다.