Скачать презентацию Оценка сложности алгоритмов Основы теории сложности P NP Скачать презентацию Оценка сложности алгоритмов Основы теории сложности P NP

Лекция 1_Оценка сложности алгоритмов.ppt

  • Количество слайдов: 28

Оценка сложности алгоритмов. Основы теории сложности (P, NP) Оценка сложности алгоритмов. Основы теории сложности (P, NP)

время выполнения программы ► ввод (порядок ввода) исходной информации в программу; ► качество скомпилированного время выполнения программы ► ввод (порядок ввода) исходной информации в программу; ► качество скомпилированного кода исполняемой программы; ► машинные инструкции (естественные и ускоряющие) ► временная сложность алгоритма. Т(n) = cn 2 Тср(n)

Теория алгоритмов — наука, изучающая общие свойства и закономерности алгоритмов и разнообразные формальные модели Теория алгоритмов — наука, изучающая общие свойства и закономерности алгоритмов и разнообразные формальные модели их представления ► Классическая теория алгоритмов ► Теория асимптотического анализа алгоритмов ► Теория практического анализа вычислительных алгоритмов

Асимптотические соотношения ► Для описания скорости роста функций используется О-нотация ► Время выполнения Т(n) Асимптотические соотношения ► Для описания скорости роста функций используется О-нотация ► Время выполнения Т(n) некоторой программы имеет порядок О(n 2) (читается «о-большое от n в квадрате» или «о от n в квадрате» ), то подразумевается, что существуют положительные константы с и n 0 такие, что для всех n, больших или равных n 0, выполняется неравенство Т(n) ≤ с n 2.

Асимптотический анализ алгоритмов ► Цель - сравнение затрат времени и других ресурсов различными алгоритмами, Асимптотический анализ алгоритмов ► Цель - сравнение затрат времени и других ресурсов различными алгоритмами, предназначенными для решения одной и той же задачи, при больших объемах входных данных. ► Оценка функции трудоёмкости - сложность алгоритма

► О - верхняя асимптотическая оценка трудоемкости алгоритма ► как быстро растет трудоемкость алгоритма ► О - верхняя асимптотическая оценка трудоемкости алгоритма ► как быстро растет трудоемкость алгоритма с увеличением объема данных

► Определение. Функция Т(n) имеет порядок О(f(n)), если существуют константы с и n 0 ► Определение. Функция Т(n) имеет порядок О(f(n)), если существуют константы с и n 0 такие, что для всех n ≥ n 0 выполняется неравенство Т(n) ≤ cf(n). Для программ, у которых время выполнения имеет порядок О(f(n)), говорят, что они имеют порядок (или степень) роста f(n).

► Т ( n) = 3 n 3 + 2 n 2 О(n 3) ► Т ( n) = 3 n 3 + 2 n 2 О(n 3) правило сумм: трудоемкость выполнения конечной последовательности программных фрагментов, без учета констант, имеет порядок фрагмента с наибольшим временем выполнения.

Пример ► О(n 2), О(n 3) и О(nlogn) ► O(max(n 2, n 3)) - Пример ► О(n 2), О(n 3) и О(nlogn) ► O(max(n 2, n 3)) - О(n 3) ► O(max(n 3, nlogn)) - О(n 3)

► правило произведений: если Т 1(n) и Т 2(n) имеют степени роста O(f(n)) и ► правило произведений: если Т 1(n) и Т 2(n) имеют степени роста O(f(n)) и O(g(n)) соответственно, то произведение Т 1(n)Т 2(n) имеет степень роста O(f(n)g(n)). Например O(cf(n)) == O(f(n)), с – положительная константа. О(n 2 / 2) == О(n 2).

Пример: Алгоритм вычисления значения многочлена степени n в заданной точке x Pn(x) = anxn Пример: Алгоритм вычисления значения многочлена степени n в заданной точке x Pn(x) = anxn + an-1 xn-1 +. . . + aixi +. . . + a 1 x 1 + a 0 Алгоритм - для i-го слагаемого(i=1. . n) требует I умножений. 1 + 2 + 3 +. . . + n = n(n+1)/2 умножений. n+1 сложений. Всего: n(n+1)/2 + n + 1= n 2/2 + 3 n/2 + 1 операций

► f(n) = n 2/2 + 3 n/2 + 1 -> n 2/2 ► ► f(n) = n 2/2 + 3 n/2 + 1 -> n 2/2 ► O(n 2) верхняя оценка (исключительно асимптотику!) количество операций (а значит, и время работы) растет не быстрее, чем квадрат количества элементов

► при малых n O(n 2) быстрее n 2 + 10 n + 6 ► при малых n O(n 2) быстрее n 2 + 10 n + 6 O(n) 1000000 n + 5

Скорость роста функций n lgn Sqrt(n) nlgn n(lgn)2 n 3/2 n 2 10 3 Скорость роста функций n lgn Sqrt(n) nlgn n(lgn)2 n 3/2 n 2 10 3 3 33 110 32 100 7 10 664 4414 10000 1000 10 32 9966 99317 31623 1000000 13 100 132877 1765633 100000000 100000 17 316 1660964 27588016 31622777 100000 1000 19931569 397267426 1000000000000 1000000 20

► Для нижней асимптотической оценки роста функции T(n) используется Ω (омега). T(n) = Ω ► Для нижней асимптотической оценки роста функции T(n) используется Ω (омега). T(n) = Ω (nlogn) обозначает класс функций, которые растут не медленнее, чем f(n) nlogn

► Для задания одновременно верхней и нижней оценки роста функции T(n) используется Θ (тэтта). ► Для задания одновременно верхней и нижней оценки роста функции T(n) используется Θ (тэтта). ► Равенство T(n) = Θ(f(n)) выполняется тогда и только тогда, когда T(n)=O(f(n)) и T(n) = Ω (f(n)).

Асимптотические оценки можно представить в порядке увеличения скорости их роста: O(1) < O(log 2 Асимптотические оценки можно представить в порядке увеличения скорости их роста: O(1) < O(log 2 n) < O(nlog 2 n) < O(n 2) < O(n 3) < O(2 n).

f(n) = Ω(n 2) даже в самом удачном случае будет произведено не менее n f(n) = Ω(n 2) даже в самом удачном случае будет произведено не менее n 2 действий f(n) = O(n 2) гарантирует, что в самом худшем случае действий будет порядка n 2, не больше. Θ(n 2) всегда будет выполняться порядка n 2 операций. Существует только тогда, когда O() и Ω() совпадают и равна им.

Итого O() асимптотическая оценка алгоритма на худших входных данных Ω() на лучших входных данных Итого O() асимптотическая оценка алгоритма на худших входных данных Ω() на лучших входных данных Θ() сокращенная запись одинаковых O() и Ω().

Классы сложности ► P-сложные, ► NP-сложные, ► экспоненциально сложные ► и др Классы сложности ► P-сложные, ► NP-сложные, ► экспоненциально сложные ► и др

Класс P ► задачи, которые могут быть решены за время, полиномиально зависящее от объёма Класс P ► задачи, которые могут быть решены за время, полиномиально зависящее от объёма исходных данных, с помощью детерминированной вычислительной машины (например, машины Тьюринга) время работы не слишком сильно зависит от размера входных данных

Примеры алгоритмов класса P ► целочисленного сложения, ► умножения, ► деления, ► взятия остатка Примеры алгоритмов класса P ► целочисленного сложения, ► умножения, ► деления, ► взятия остатка от деления, ► перемножения матриц (n 3 умножений) ► выяснение связности графов ► простое число (O(n 12) операций, n — длина записи числа ) ► и другие.

P - ? ? ? , но не доказано обратно 1. 2. 3. 4. P - ? ? ? , но не доказано обратно 1. 2. 3. 4. 5. Задача коммивояжёра. (остальные NP-полные задачи) Разложение на множители составного числа. Дискретное логарифмирование числа a по простому модулю p (a

Класс NP (non-deterministic polynomial) задачи, которые могут быть решены за полиномиально выраженное время с Класс NP (non-deterministic polynomial) задачи, которые могут быть решены за полиномиально выраженное время с помощью недетерминированной вычислительной машины (то есть машины, следующее состояние которой не всегда однозначно определяется предыдущими) время работы сильно зависит от размера входных данных свидетелей решения - ? ?

► Всякую задачу, принадлежащую NP, можно решить за экспоненциальное время (перебором всех возможных свидетелей ► Всякую задачу, принадлежащую NP, можно решить за экспоненциальное время (перебором всех возможных свидетелей длины меньше nc).

Примеры задач класса NP P-? ? ? ► Задача выполнимости булевых формул. ► Задача Примеры задач класса NP P-? ? ? ► Задача выполнимости булевых формул. ► Задача о клике. ► Проблема существования гамильтонова цикла в графе. ► Задача о коммивояжёре. ► Существование целочисленного решения системы линейных неравенств.

Отношения между классами Отношения между классами

МЕДИАНЫ и ПОРЯДКОВЫЕ СТАТИСТИКИ ► i-ая порядковая статистика ► максимум - порядковая статистика n МЕДИАНЫ и ПОРЯДКОВЫЕ СТАТИСТИКИ ► i-ая порядковая статистика ► максимум - порядковая статистика n ► минимум - порядковая статистика 1 ► медиана - i=(n+1)/2 i=n/2+1 меньшая из двух