IT/Programming

[알고리즘] 시간 복잡도 (Time Complexity) 개념 소개

Uncle D. 2023. 5. 7. 22:41
반응형

시간 복잡도

Time Complexity (시간 복잡도) 는  알고리즘의 시간적인 성능을 비교하기 위한 표현 방법입니다.

 

Time complexity - Wikipedia

From Wikipedia, the free encyclopedia Estimate of time taken for running an algorithm Graphs of functions commonly used in the analysis of algorithms, showing the number of operations N as the result of input size n for each function In computer science, t

en.wikipedia.org

 

시간 복잡도를 표현하기 위한 방법은 다양하지만 대표적인 수학적 표현 방법으로 Big O 표기법 이 있습니다.

컴퓨터의 성능이나 입력 데이터의 크기에 따라 달라질 수 있기 때문에, O(n) 과 같은 표현으로 데이터 크기를 n 으로 표현하고 이 때 발생하는 시간 복잡도를 표현합니다.

 

Big O 의 복잡도 순서

아래는 Big O 의 주요 시간 복잡도의 순서와 그래프로 표현한 내용입니다.

그래프 그리는 사이트에서 대표적인 시간 복잡도 그래프를 그려봤습니다.

 

X축의 의미 : X값이 증가할 수록 데이터(N)가 증가한다.

Y축의 의미 : Y값이 증가할 수록 시간복잡도 이 증가한다.

성능 : X가 증가할 때, Y가 증가하는 비율이 낮을 수록 효율적이다.

시간 복잡도 비교

 

시간복잡도 알고리즘 예제

Time Complexity
시간 복잡도 표기
Name
이름
Example algorithms
알고리즘 예제
성능 평가
𝑂(1) Contant Time
상수 시간
정렬된 배열의 중간값 찾기
(항상 일정한 시간이 걸림)
Excellent
𝑂(log n) Logarithmic Time
로그 시간
Binary Search
(데이터 양이 많아져도 큰 변화없음 )
Good
𝑂(n) Linear Time
선형 시간
Sequential Search
(데이터 양에 비례)
Fair
𝑂(nlog n) Linearithmic Time
선형 로그 시간
Quick Sort, Merge Sort
(데이터 양 * 로그 ↑)
Bad
𝑂(n^2) Quadratic Time
2차 시간
Bubble Sort, Insert Sort Horrible
𝑂(n^3) Cubic Time
3차 시간
N*N 행렬 2개의 곱셈
반복문 3개의 중첩계산
Horrible
𝑂(2^n) Exponential Time
지수시간
피보나치 수열 Horrible
𝑂(n!) Factirial Time Brute Force 방식의 외판원 문제 
(모든 경우의 수를 대입, 시간 ↑)
Horrible

※ 시간복잡도에 대해서 살펴보다 보면 Binary Search 가 효율적인 방법임을 깨닫게 되는 것 같습니다. 

Brute Force 무차별적인 공격이란 의미로 가능한 모든 경우의 수를 모두 시도하는 접근 방식입니다. 비밀번호가 걸린 잠금 장치를 풀때 모든 숫자를 대입해보는 방식으로 암호학에서는 확실한 방법이라고 알려져있지만 시간이 많이 걸릴 수 있는 방법입니다.

 

See Also

시간 복잡도와 관련하여 검색을 통해 나오는 내용들은 Eric Rowell's Big-O Complexity Chart 의 내용을 많이 참고하고 있는 것 같아 링크를 추가로 공유합니다. (↓더보기 링크)

※ Sort 나 자료 구조에 대한 Time Complexity 가 함께 정리되어 있으니 참고하시면 좋을 것 같습니다.

Eric Rowell's Big-O Complexity Chart

 

위키피디아 내용이 조금 방대하여 찾아보면서 관련 도서와 해외 자료들을 찾아보면서 정리하고 있습니다.

※ 여기에 있지 않은 내용은 추가로 확인되면 업데이트 하도록 하겠습니다.

 

감사합니다.

반응형