[알고리즘]시간 복잡도란?
류명운
·2014. 10. 27. 22:06
자료구조와 알고리즘을 배울때 핵심 : 공간 , 시간 이용
(공간과 시간은 거의 항상 반비례하는 경향이있다)
시간복잡도: 어떤 알고리즘이 얼마나 걸리느냐(CPU사용량)
공간복잡도: 어떤 알고리즘이 메모리를 얼마나 쓰느냐(RAM사용량)
Related works
2.1 시간 복잡도 나타나는 수
|
중요한 시간들 in algorithm
1(constant) : 입력자료의 수에 관계없이 일정한 실행시간 갖음
Log N : 입력자료의수에 따라 시간이 점점 시간이 조금씩 증가함 - 주로 큰 문제를 일정한 크기를 갖는 작은 문제로 쪼갤때 나타나는 유형. 예) 효율이 좋은 검색 알고리즘.. 이 뭐가 있드라. 이진탐색 같은 것 - Log2n
N(Linear) : 입력 자료의 수에 따라 선형적인 실행 시간이 걸리는 경우- 입력자료 각각에 일정량(시간)이 할당되는 경우
N Log N : 이것은 주로 큰문제를 일정한 크기를 갖는 문제로 쪼개고(Log N), 다시 그것들을 하나로 모으는 경우에 나타남 (N). 예) 효율 좋은 정렬 알고리즘.. quick sorting, heap sorting 등. link: http://wrice.egloos.com/3097929
N² : 이중루프내에서 입력자료를 처리할때 발생함.
N³ : 얘는 삼중 루프내에서 입력 자료 처리할때 발생.
※ 알고리즘에서 가장 기본이 되는 것은 정렬과 검색임 !!!
2.2 시간 복잡도란?
시간 복잡도 = 알고리즘을 구성한 명령어가 실행된 횟수(frequency of calling command)
(+ execution time 인데, h/w 의존하기 때문에 일단 이것은 제외함)
주로 시간과 공간의 반비례하는데, 요즘에는 시간이 우선 !!! ( because of h/w tech was improved)
2.3 시간 복잡도 표현(Notation)
Big O - O(N) : 실행 시간 상한 표현 (가장 많이 쓰임) - 최악의 시간 계산
Ω - Ω(N) : 실행 시간 하한 표현 - 운좋을때 걸리는시간
Θ - Θ(N) : 실행 시간 평균 표현
2.4 시간의 복잡도 계산법
명령이 끝날때마다 실행 횟수를 적어봅니다.
명령어 실행횟수를 모두 더하면 2n²-2n+2 ->상수는 생략하고 최고차항만 생각한다. => O(n²)로 표기합니다.
재귀함수 시간 복잡도 계산법
앞선 방법 처럼 쉽게 구해지지 않은다. ( 우선 재퀴호출이 없다면 상수시간 소요됨 )
따라서, 재귀 호출이 불리는 횟수가 수행 시간을 좌우한다.
Factorial(n) -> Factorial(n -1) .... ->Factorial(2) -> Factorial(1)
이 경우 n번 호출 됨으로 O(n)으로 표기
|
|
n>1
T(n) = T(n-1) +T(n-2) + C
O(2n) > T(n)= Θ(1.6n) > Ω(2n/2)
안좋은 이유 : 중복되는 Fibonacci(2)를 3번이나 계산하게됨.
ref :http://www.youtube.com/watch?v=pqivnzmSbq4
따라서 피보나치는 아래와 같이 반복문을 사용해서 개선할 수 있다.
으로 O(n)이다. 음.. 이건 어짜피 이건 무조건 돌아야 되니까 O(n) = Θ(n) = Ω(n) 이다.
따라서, 피보나치는 반복 알고리즘이 더 재귀보다 성능이 좋음을 알려주는 하나의 예이다.
하지만, 항상 재귀가 나쁜것은 아니다 -> 설계단계에서 재귀 알고리즘 매우 유용하다.
'삶의 늪에 들어 가기 전 > 정리중(미정리)' 카테고리의 다른 글
[공학윤리]조별 발표 - 인터넷 시대의 시민 (0) | 2014.10.28 |
---|---|
[알고리즘]Kruskal1, Kruskal2, Prime 알고리즘에 해당하는 최소 신장 트리 만들기 (0) | 2014.10.28 |
ccna 200-120 덤프자료 (0) | 2014.10.23 |
[발표자료 - 컴퓨터 정보학의 이해] 해커(Hacker) 란? (0) | 2014.10.23 |
[PC활용 3 멀티미디어] 작업결과물 및 내용(14.10. 23) (0) | 2014.10.23 |