함수의 점근적 분석법
: 문제의 크기(주어진 숫자)가 매우 클 때 내가 만든 알고리즘이 얼마만큼의 계산량을 요구하는가를 분석하는 것
Linear Search와 Binary Search의 비교를 예로 들면
Linear Search
:어떤 값을 찾으려고 할 때 앞에서부터 순차적으로 체크하는 것
Binary Search
:Array가 sorting 되어있을 때만 사용 가능. 중간값과 찾고자하는 값을 비교해서 중간값보다 찾고자하는 값이 작으면 중간값을 기준으로 왼쪽부분만 검색하면 됨
⇒n이 증가함에따라 Linear Search 계산량도 증가하지만 Binary Search는 크게 증가하지 않는것으로 보아 이 경우에는 Binary Search가 더 효율적인 알고리즘이라고 볼 수 있다.
알고리즘 분석
- 알고리즘이 주어졌을 때 무엇을 성능의 지표로 삼을지를 결정해야 한다.
- data structure와 알고리즘의 관계성을 고려해야함
- 우리가 이 알고리즘을 어떤 컴퓨터나 머신에서 구동되는지 고려하지말고 온전히 수학적으로만 생각한다.
- 주어진 수가 무한히 커졌을 때 두 알고리즘의 차이가 어떻게 되는지를 분석하는것이다. = 가장 높은 차수의 계수가 중요하다. ex)n^-1 = n^ + 3n + 2
두 알고리즘 f(n)과 g(n)이 다항식으로 표현됐을 때
- f(n)의 최고차항의 계수 : α
- g(n)의 최고차항의 계수: β
- M = α/β +1
위와 같은 조건일때
f(n) < Mg(n)
이 항상 성립한다는 것을 알 수 있다.
하지만 다음과 같이 차수가 다르면
f(n)은 g(n)을 절대 따라잡을 수 없다.
따라서
가 성립한다면 이 두 함수는 동일한 복잡도를 가진다고 할 수 있다.
라면 f(n)이 g(n)보다 낮은 복잡도를 가지고 있다. 즉 f(n)이 효율적인 알고리즘이다.
'IT > 알고리즘' 카테고리의 다른 글
카운팅 정렬 (0) | 2023.04.30 |
---|---|
다익스트라 알고리즘 (0) | 2023.04.28 |
패스트캠퍼스 Java 코딩테스트 강의 1주차 (0) | 2023.04.22 |
병합 정렬 / 합병 정렬 ( C언어) (0) | 2022.12.15 |
DFS / BFS (0) | 2022.12.02 |