개요
코딩테스트 스터디원의 풀이를 보는데 어느 것이 더 프로그래밍 쪽으로 나은 풀이인지 파악이 어려워 기준을 파악해 보고자, 효율적인 알고리즘을 선택하고자 찾아본 개념
📍정의
시간 복잡도 : 알고리즘의 입력 크기에 따라 프로세스가 실행되는 데 걸리는 시간을 수치화 한 것
- 컴퓨터의 성능에 따라 실행시간은 달라질 수 있기에, 명령문의 실행 빈도수를 계산하여 실행 시간을 구한다.
📍시간복잡도 분석법
- 빅오 표기법 (최악의 경우): 최악의 입력이 주어졌을 경우의 알고리즘이 수행하는 연산의 수 측정
- 세타 표기법 (평균의 경우) : 모든 입력이 주어졌을 떄의 평균으로 걸리는 시간 측정
- 오메가 표기법 (최선의 경우) : 가장 유리한 입력이 주어졌을 때의 알고리즘이 수행하는 연산의 수 측정
📍빅오 표기법(Big-O)
빅오 표기법 : 알고리즘의 실행 시간이 입력 데이터의 크기 n에 대해서 어떻게 변하는지 나타내는 방법
📍종류 & 예시
- 상수 시간 복잡도 O(1) : 입력 크기와 상관없이 일정한 시간 소요
- 배열에서의 특정 인덱스 접근
- 해시 테이블
- 로그 시간 복잡도 O(log n) : 입력 크기가 증가할수록 실행 시간이 느리게 증가
- 이진탐색
- 선형 시간 복잡도 O(n) : 입력 크기에 비례하여 시간 증가
- 배열의 모든 요소 순회
- 선형 로그 시간 복잡도 O(n log n)
- 병합 정렬, 퀵 정렬
- 이차 시간 복잡도 O(n^2) : 입력 크기가 증가함에 따라 실행시간이 제곱에 비례하여 증가
- 반복문이 두 번 있는 구조
- 버블 정렬, 선택 정렬
📍시간 복잡도의 중요성
- 효율적인 알고리즘 선택
- 실행 시간 예측 가능
'Coding Test > Data Structure & algorithm' 카테고리의 다른 글
[알고리즘] 정렬 (Sorting) (0) | 2024.09.22 |
---|---|
[알고리즘] 그리디(Greedy) (2) | 2024.09.14 |
[자료구조] 큐(Queue) (1) | 2024.09.06 |
[자료구조] 스택(Stack) (0) | 2024.09.06 |
[자료구조] 자료구조란? (0) | 2024.09.06 |