1.2. Справочный материал. Сравнение скорости роста основных функций
Формула Стирлинга:
.
Пример. Сравним скорости роста функций и
Решение. 1) Прологарифмируем обе функции по основанию 2, получим:
n! и .
2) Используя формулу Стирлинга: , получим:
и
Сократим на :
и
3) Так как значение некоторых частей выражений много меньше значения других, то их можно не рассматривать:
и log n.
т.к. nloge << nlogn.
Получаем: nlogn >> logn
n >> 1
Следовательно, 2n! >>
Функция 2n! растет быстрее, чем
Определение. Будем говорить, что задача решаема за полиномиальное время, если для неё существует некоторый алгоритм с трудоёмкостью T(n) ≤ p(n), где p – некоторый многочлен.
Примерами задач, решаемых за полиномиальное время, являются:
сортировки;
решение СЛАУ (метод Гаусса).
Чем же хороши задачи, решаемые за полиномиальное время?
Для ответа на этот вопрос рассмотрим две таблицы:
Таблица 1.1. – Время, необходимое для вычисления на машине
с быстродействием 106 опер/сек
n T(n) | 10 | 20 | 30 | 50 | 100 |
n | 10-5 сек | 2·10-5 сек | 3·10-5 сек | 5·10-5 сек | 10-4 сек |
n logn | 3·10-5 сек | 8·10-5 сек | 15·10-5 сек | 3·10-4 сек | 7·10-4 сек |
n2 | 10-4 сек | 4·10-5 сек | 9·10-5 сек | 2·5·10-3 сек | 10-2 сек |
n5 | 10-1 сек | 3·2 сек | 10-5 сек | 5.2 мин | ≈ 3 часа |
2n | 10-3 сек | 1 сек | 18 мин | 36 лет | 3·1016 лет |
Таблица 1.2. – Объем доступной решаемой задачи за одно
и то же время (таблица прогресса)
машины T(n) | Современные | В 10 раз быстрее современных | 30 |
n | k | 10k | 100k |
n logn | k | ||
n2 | k | 10k | |
n3 | k | ||
n5 | k | ||
Неполиномиальные алгоритмы | |||
2n | k | 3.3 + k | 6.6 + k |
n! | k |
Комментарии к таблице прогресса. При повышении производительности машины в несколько раз для алгоритма с полиномиальной производительностью объем доступной решаемой задачи повышается в разы, а у неполиномиальных алгоритмов увеличивается «на сколько-то», то есть НЕ в разы.
Домашнее задание №1
Отсортировать по скорости роста, начиная с наименьшей:
- Основные понятия. Справочный материал
- Основные понятия
- 1.2. Справочный материал. Сравнение скорости роста основных функций
- 2 Новые быстрые версии старых алгоритмов
- 2.1. Сортировки массивов
- 2.1.1 Метод прямого выбора (SelectSort)
- 2.1.2 Быстрая сортировка методом двоичных вставок (MergeSort)
- 2.2. Преобразование Фурье (бпф)
- 2.2.1. Дискретное преобразование Фурье
- 2.2.2. Полубыстрое преобразование Фурье (ппф)
- 2.2.3. Быстрое преобразование Фурье (бпф)
- 2.3. Быстрая свертка
- 2.3.1. Понятие свертки
- 2.3.2. Обычный и быстрый алгоритм свертки
- 2.4. Быстрое умножение
- 2.4.1. Быстрое умножение чисел
- 1 Суммирование
- 4 Произведения чисел вдвое меньшей
- 2.4.2. Быстрое умножение матриц
- 2.4.3. Очень быстрое умножение числе (алгоритм Шенхаге – Штрассена)
- 3. Задачи на графах
- 3.1. Справочный материал
- 3.2. Поиск минимального остова в связном неориентированном взвешенном графе
- 3.3. Нахождение кратчайшего расстояния
- 3.3.1. Алгоритм Форда – Беллмана
- 3.3.2. Алгоритм Дейкстры
- 3.4. Нахождение диаметра, радиуса и центра графа
- 3.5. Задача об изоморфизме графов
- 3.6. Задача коммивояжера. Её решение методом ветвей и границ.
- Задачи динамического программирования
- Задачи динамического программирования. Её решение методом динамического программирования.
- 4.2. Задача об оптимальном наборе самолетом скорости и высоты
- 4.3. Задача грабителя (задача о рюкзаке)
- 4.4. Задача о перемножении матриц
- 5 Классы p и np
- 5.1 Машина Тьюринга
- 5.2 Недетерменированные машины Тьюринга(ндмт)
- 5.3 Сводимость. Np-полнота.
- 5.4 Иерархия по сложности. Труднорешаемые задачи.
- Классы сложности.
- 6 Неразрешимые задачи
- 6.1 Новая модель алгоритма вычислений.
- 6.2 Нумерация программ
- 6.3 Неразрешимые проблемы
- 6.4 Теорема об ускорении
- Лабораторные работы
- Расчетно-графическое задание
- Ответы к домашним заданиям