Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- 알고리즘
- NumPy
- 정보처리기사 c언어
- pandas
- programmers
- 노마드코딩
- 파이썬
- 알고리즘 스터디
- javascript
- 데이터시각화
- String Method
- Join
- queue
- 백준
- python
- 프로그래머스
- 자료구조
- Selenium
- dataframe
- 선그래프
- Matplotlib
- aws jupyter notebook
- Algorithm
- Stack
- openCV
- 코딩테스트
- 알고리즘스터디
- type hint
- 가상환경
- MySQL
Archives
- Today
- Total
조금씩 꾸준히 완성을 향해
알고리즘의 시간복잡도(Time Complexity) / Big-O 표기법 본문
DataStructure & Algorithm/이론 정리
알고리즘의 시간복잡도(Time Complexity) / Big-O 표기법
all_sound 2022. 9. 26. 23:11Time Complexity
- 수행시간이란 특정 입력에 대해 수행되는 알고리즘의 기본연산(primitive operation)의 횟수를 말한다. (가상컴퓨터에서 가상언어로 작성된 가상코드를 실행한다고 가정
- 알고리즘의 수행시간 = 최악의 경우의 입력(worst-case input)에 대한 기본연산의 수행 횟수
- 입력의 크기 n에 대한 함수 T(n)으로 표기 -> 어떠한 입력에 대해서도 T(n) 시간 이내에 종료됨을 보장
▶ example
#input : n개의 정수가 담긴 배열 A
#output : A의 수 중에서 최대값
def func(A, n):
max = 0 # 1번(할당)
for i in A:
if i > max: # n-1번(크기를 확인하는 최악의 경우)
max = i # n-1번(할당을 하는 최악의 경우)
return max
# T(n) = 2n - 1
Big-O Notation
- 정확한 횟수가 아니라 함수 값의 증가율이 가장 큰 항 하나로 수행시간을 간략히 표기하는 방법을 근사적 표기법(Asymptotic Notation)이라고 부르고, Big-O(대문자 O)로 표현한다.
- 수행시간의 증가 정도(rate of the growth of T(n) as n goes big)를 중시
- 최고차 항만을 남기고 나머지는 생략하는 식으로 수행시간을 간략히 표기한다.
▶ 표현 방법
- n이 증가할 때 가장 빨리 증가하는 항(최고차 항)만 남기고 다른 항은 모두 생략
- 가장 빨리 증가하는 항에 곱해진 상수 역시 생략
- 남은 항을 O() 안에 넣어 표기
▶ O(1) 시간 알고리즘 (constant time algorithm)
def add(a):
return a+1
▶ O(log n) 시간 알고리즘(logarithmic time algorithm)
def get_bits(a):
cnt =0
while a > 0:
a = a//2
cnt+=1
return cnt
▶ O(n) 시간 알고리즘(linear time algorithm)
def func(A, n):
max = 0
for i in A:
if i > max:
max = i
return max
▶ O(n^2 ) 시간 알고리즘(quadratic time algorithm)
def list_sum(X, Y, n):
sum=0
for i in X:
for j in Y:
sum += i*j
return sum
▶O(n^3 ) 시간 알고리즘(cubic time algorithm)
▶ O(2^n ) 이상의 시간이 필요한 알고리즘(exponential time algorithm)
사진 출처 : https://www.bigocheatsheet.com/
'DataStructure & Algorithm > 이론 정리' 카테고리의 다른 글
그리디 알고리즘(탐욕법) / Greedy Algorithm (0) | 2022.10.10 |
---|---|
Python 알고리즘의 성능 평가 (1) | 2022.10.10 |
[자료 구조] Queue (0) | 2022.10.03 |
[자료 구조] Stack (0) | 2022.10.02 |
[자료 구조] Array(배열) & List(리스트) (0) | 2022.10.02 |