Knoledge_v0
This commit is contained in:
32
Языки программирования/Оценка сложности алгоритма.md
Normal file
32
Языки программирования/Оценка сложности алгоритма.md
Normal file
@@ -0,0 +1,32 @@
|
||||
Это определение асимптотической сложности — того, как растут время или объём памяти при увеличении размера входных данных. Эта оценка используется для подсчета сложности выполнения функций в [языках программирования](Язык%20программирования).
|
||||
Функция временной сложности в некоторых случаях может быть определена точно, но в большинстве своем это бессмысленно. Поэтому входные данные всегда $n\ ->\infty$.
|
||||
|
||||
## Время выполнение задачи
|
||||
|
||||
#### Полиномиальное время
|
||||
Алгоритм типа: $O(n^k)$
|
||||
Алгоритмы которые решаются за полиномиальное время. Практически решаемые задачи с реальными данным, сложность.
|
||||
###### Характеристики:
|
||||
- Рост времени - умеренный
|
||||
- Предсказуемое и стабильное время работы
|
||||
- Большинство классических алгоритмов работают за это время
|
||||
- Не требуют перебора всех вариантов
|
||||
- Можно применять оптимизации, динамическое программирование, жадные стратегии.
|
||||
###### Примеры задач:
|
||||
- Сортировка массива - $O(nlog(n))$
|
||||
- Поиск кратчайшего пути - $O(n+m)$
|
||||
- Умножение матриц - $O(n^3)$
|
||||
- Проверка простаты - полиномиальный тест
|
||||
|
||||
#### Экспоненциальное время
|
||||
Алгоритм типа $O(k^n),O(n!)$
|
||||
Алгоритмы которые решаются за экспоненциальное время. Такие алгоритмы практически не решаемые с реальными данными.
|
||||
|
||||
###### Характеристики:
|
||||
- Рост времени - взрывной
|
||||
- Алгоритм часто основан на полном переборе вариантов
|
||||
###### Примеры задач
|
||||
- Перебор всех подмножеств $O(2^n)$
|
||||
- Задача коммивояжера перебором - $O(n!)$
|
||||
- Раскрытие графа brut force
|
||||
- SAT полный перебор
|
||||
Reference in New Issue
Block a user