반응형
1. 시간 복잡도란?
시간 복잡도란 알고리즘이 실행하는 데, 걸리는 시간을 입력크기에 대한 함수로 나타내는 것이다.
즉, 입력 크기가 증가할때 알고리즘의 실행 시간은 어떻게 변하는 지 분석하는 것이다.
빅오 표기법을 사용하여 최악의 경우를 기준으로 나타내는 것이 일반적이다.
1-1. 상수 시간 - O(1)
입력 크기와 상관없이 항상 일정한 시간이 걸리는 경우
예시) 배열의 첫 번째 요소를 출력하는 경우
def get_first_element(arr):
return arr[0] # 항상 한 번만 실행됨 → O(1)
1-2. 선형 시간 - O(N)
입력 크기가 n이면 실행 횟수도 n번 증가하는 경우
예시) 리스트의 모든 요소를 출력하는 경우
def print_all_elements(arr):
for elem in arr:
print(elem) # n개의 요소에 대해 반복 실행 → O(n)
1-3. 로그 시간 - O(log n)
입력 크기가 커질수록 실행 시간이 느리게 증가하는 경우
예시) 이진 탐색
def binary_search(arr, target):
left, right = 0, len(arr) - 1
while left <= right:
mid = (left + right) // 2
if arr[mid] == target:
return mid
elif arr[mid] < target:
left = mid + 1
else:
right = mid - 1
return -1 # O(log n)
1-4. 제곱 시간 - O(n**2)
입력 크기가 커질수록 실행 시간이 제곱으로 증가하는 경우
예시) 버블 정렬
def bubble_sort(arr):
n = len(arr)
for i in range(n):
for j in range(n - i - 1):
if arr[j] > arr[j + 1]:
arr[j], arr[j + 1] = arr[j + 1], arr[j] # O(n^2)
반응형
'Python > 알고리즘 - 이론' 카테고리의 다른 글
[자료구조 멘토링] 트리 (feat.Python) (0) | 2025.02.04 |
---|---|
[자료구조 멘토링] 스택, 큐, 덱 (feat.Python) (0) | 2025.02.02 |
[자료구조 멘토링] 함수의 재귀 (feat. Python) (0) | 2025.01.20 |
BFS 너비 우선 탐색 (2) | 2024.10.28 |
[알고리즘 발표] PPT 자료 (0) | 2024.04.15 |
반응형
1. 시간 복잡도란?
시간 복잡도란 알고리즘이 실행하는 데, 걸리는 시간을 입력크기에 대한 함수로 나타내는 것이다.
즉, 입력 크기가 증가할때 알고리즘의 실행 시간은 어떻게 변하는 지 분석하는 것이다.
빅오 표기법을 사용하여 최악의 경우를 기준으로 나타내는 것이 일반적이다.
1-1. 상수 시간 - O(1)
입력 크기와 상관없이 항상 일정한 시간이 걸리는 경우
예시) 배열의 첫 번째 요소를 출력하는 경우
def get_first_element(arr):
return arr[0] # 항상 한 번만 실행됨 → O(1)
1-2. 선형 시간 - O(N)
입력 크기가 n이면 실행 횟수도 n번 증가하는 경우
예시) 리스트의 모든 요소를 출력하는 경우
def print_all_elements(arr):
for elem in arr:
print(elem) # n개의 요소에 대해 반복 실행 → O(n)
1-3. 로그 시간 - O(log n)
입력 크기가 커질수록 실행 시간이 느리게 증가하는 경우
예시) 이진 탐색
def binary_search(arr, target):
left, right = 0, len(arr) - 1
while left <= right:
mid = (left + right) // 2
if arr[mid] == target:
return mid
elif arr[mid] < target:
left = mid + 1
else:
right = mid - 1
return -1 # O(log n)
1-4. 제곱 시간 - O(n**2)
입력 크기가 커질수록 실행 시간이 제곱으로 증가하는 경우
예시) 버블 정렬
def bubble_sort(arr):
n = len(arr)
for i in range(n):
for j in range(n - i - 1):
if arr[j] > arr[j + 1]:
arr[j], arr[j + 1] = arr[j + 1], arr[j] # O(n^2)
반응형
'Python > 알고리즘 - 이론' 카테고리의 다른 글
[자료구조 멘토링] 트리 (feat.Python) (0) | 2025.02.04 |
---|---|
[자료구조 멘토링] 스택, 큐, 덱 (feat.Python) (0) | 2025.02.02 |
[자료구조 멘토링] 함수의 재귀 (feat. Python) (0) | 2025.01.20 |
BFS 너비 우선 탐색 (2) | 2024.10.28 |
[알고리즘 발표] PPT 자료 (0) | 2024.04.15 |