Какие знаешь сложности алгоритмов
Python
Senior
Без компании
Какие знаешь сложности алгоритмов
Ответы
Вот основные сложности алгоритмов в порядке возрастания:
- **O(1)** - константная (доступ по индексу в массиве)
```
value = my_list[0] # O(1)
```
- **O(log n)** - логарифмическая (бинарный поиск)
```
def binary_search(arr, x):
low, high = 0, len(arr)-1
while low <= high:
mid = (low + high) // 2
if arr[mid] < x: low = mid + 1
elif arr[mid] > x: high = mid - 1
else: return mid
return -1
```
- **O(n)** - линейная (поиск в неотсортированном массиве)
```
for item in my_list: # O(n)
print(item)
```
- **O(n log n)** - линейно-логарифмическая (быстрая сортировка)
```
sorted_list = sorted(my_list) # Timsort - O(n log n)
```
- **O(n²)** - квадратичная (пузырьковая сортировка)
```
for i in range(len(arr)): # O(n²)
for j in range(len(arr)-1):
if arr[j] > arr[j+1]:
arr[j], arr[j+1] = arr[j+1], arr[j]
```
- **O(2ⁿ)** - экспоненциальная (рекурсивный Фибоначчи)
```
def fib(n):
if n <= 1: return n
return fib(n-1) + fib(n-2) # O(2ⁿ)
```
- **O(n!)** - факториальная (перебор всех перестановок)
Также существуют:
- O(n³) - кубическая (наивное умножение матриц)
- O(nᵏ) - полиномиальная
- O(n√n) - встречается в некоторых алгоритмах