Полиномиальный алгоритм

Полиномиальный алгоритм

В теории алгоритмов классом P (от англ. polynomial) называют множество алгоритмов, время работы которых не слишком сильно зависит от размера входных данных (не превосходит многочлена от размера данных). Алгоритмы, принадлежащие классу P, считаются быстрыми. Класс P включён в более широкие классы сложности алгоритмов.

Содержание

Формальное определение

Алгоритм отождествляется с детерминированной машиной Тьюринга, которая вычисляет ответ по данному на входную ленту слову из входного алфавита Σ. Временем работы алгоритма TM(x) при фиксированном входном слове x называется количество рабочих тактов машины Тьюринга от начала до остановки машины. Сложностью функции f: \Sigma^* \to \Sigma^*, вычисляемой некоторой машиной Тьюринга, называется функция C: \mathbb N \to \mathbb N, зависящая от длины входного слова и равная максимуму времени работы машины по всем входным словам фиксированной длины:

C_M (n) = \max\limits_{x: |x| = n} T_M (x).

Если для функции f существует машина Тьюринга M такая, что CM(n) < nc для некоторого числа c и достаточно больших n, то говорят, что она принадлежит классу P, или полиномиальна по времени.

Согласно тезису Чёрча — Тьюринга, любой мыслимый алгоритм можно реализовать на машине Тьюринга. Для любого языка программирования можно определить класс P подобным образом (заменив в определении машину Тьюринга на реализацию языка программирования). Если компилятор языка, на котором реализован алгоритм, замедляет исполнение алгоритма полиномиально (то есть время выполнения алгоритма на машине Тьюринга меньше некоторого многочлена от времени выполнения его на языке программирования), то определения классов P для этого языка и для машины Тьюринга совпадают. Код на ассемблере допускает преобразование в машину Тьюринга с небольшим полиномиальным замедлением, а поскольку все существующие языки допускают компиляцию в ассемблер (опять же, с полиномиальным замедлением), то определения класса P для машин Тьюринга и для любого существующего языка программирования совпадают.

Более узкое определение

Иногда под классом P имеют в виду более узкий класс функций, а именно класс предикатов (функций f: \Sigma^* \to \{ 0,\, 1\}). В таком случае языком L, который распознаёт данный предикат, называется множество слов, на которых предикат равен 1. Языками класса P называются языки, для которых существуют распознающие их предикаты класса P. Очевидно, что если языки L1 и L2 лежат в классе P, то и их объединение, пересечение и дополнения также лежат в классе P.

Включения класса P в другие классы

Класс P является одним из самых узких классов сложности. Алгоритмы, принадлежащие ему, принадлежат также классу NP, классу BPP (как допускающие полиномиальную реализацию с нулевой ошибкой), классу PSPACE (т.к. зона работы на машине Тьюринга всегда меньше времени), классу P/Poly (для доказательства этого факта используется понятие протокола работы машины, который переделывается в булеву схему полиномиального размера).

Уже более 30 лет остаётся нерешённой задача о равенстве классов P и NP. Если они равны, то любую задачу из класса NP можно будет решить быстро (за полиномиальное время). Однако научное сообщество склоняется в сторону отрицательного ответа на этот вопрос. Кроме того, не доказана и строгость включения в более широкие классы, например, в PSPACE, но равенство P и PSPACE выглядит на данный момент очень сомнительно.

Примеры алгоритмов класса P

Примерами алгоритмов класса P являются стандартные алгоритмы целочисленного сложения, умножения, деления, взятия остатка от деления, перемножения матриц, выяснение связности графов и некоторые другие.

Задачи, для которых не найден полиномиальный алгоритм

Существует много задач, для которых не найдено полиномиального алгоритма, но не доказано, что его не существует. Соответственно, неизвестно, принадлежат ли такие задачи классу P. Вот некоторые из них:

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

Практическое значение

Поскольку часто приходится вычислять значения функций на входных данных большого объёма, нахождение полиномиальных алгоритмов для вычисления функций является очень важной задачей. Считается, что вычислять функции, не лежащие в классе P, заметно сложнее, чем лежащие. Большинство алгоритмов, лежащих в классе P, имеют сложность, не превосходящую многочлен небольшой степени от размера входных данных. Например, стандартный алгоритм перемножения матриц требует n3 умножений (хотя существуют и более быстрые алгоритмы, например, алгоритм Штрассена). Степень многочлена редко бывает большой. Один из таких случаев — найденный в 2002 г. индийскими математиками (Agrawal, Kayal и Saxena) алгоритм en:AKS primality test, выясняющий, является ли число простым, за O(log6n) операций, где n — длина записи числа в какой-нибудь системе счисления.

См. также

Ссылки


Wikimedia Foundation. 2010.

Игры ⚽ Поможем решить контрольную работу

Полезное


Смотреть что такое "Полиномиальный алгоритм" в других словарях:

  • Алгоритм Диница — полиномиальный алгоритм для нахождения максимального потока в транспортной сети, предложенный в 1970 году израильским (бывшим русским) учёным Ефимом Диницем. Временная сложность алгоритма составляет . Получить такую оценку позволяет введение… …   Википедия

  • Алгоритм Диффи — Алгоритм Диффи  Хеллмана (англ. Diffie Hellman, DH)  алгоритм, позволяющий двум сторонам получить общий секретный ключ, используя незащищенный от прослушивания, но защищённый от подмены канал связи. Этот ключ может быть использован …   Википедия

  • полиномиальный сложный (обладающий полиномиальной сложностью) алгоритм — — [[http://www.rfcmd.ru/glossword/1.8/index.php?a=index d=23]] Тематики защита информации EN polynomial timepolytime …   Справочник технического переводчика

  • Псевдополиномиальный алгоритм — полиномиальный алгоритм, проявляющий экспоненциальный характер только при очень больших значениях числовых параметров. Более строгое определение выглядит так. Пусть M(z) – некоторая функция, задающая значение числового параметра индивидуальной… …   Википедия

  • Вероятностный алгоритм — В теории алгоритмов классом сложности BPP (от англ. bounded error, probabilistic, polynomial) называется класс предикатов, быстро (за полиномиальное время) вычислимых и дающих ответ с высокой вероятностью (причём, жертвуя временем, можно добиться …   Википедия

  • Список алгоритмов — Эта страница информационный список. Основная статья: Алгоритм Ниже приводится список алгоритмов, группированный по категориям. Более детальные сведения приводятся в списке структур данных и …   Википедия

  • Программируемые алгоритмы —       Служебный список статей, созданный для координации работ по развитию темы.   Данное предупреждение не устанавл …   Википедия

  • Тест Агравала — В информатике тест Агравала  Каяла  Саксены (или тест AKS)  это полиномиальный детерминированный тест простоты чисел, предложенный индийскими учёным Маниндрой Агравалом (англ.) и его двумя студентами Нираджем Каялом (англ …   Википедия

  • Дискретное логарифмирование — (DLOG) задача обращения функции в некоторой конечной мультипликативной группе . Наиболее часто задачу дискретного логарифмирования рассматривают в мультипликативной группе кольца вычетов или конечного поля, а также в группе точек эллиптической… …   Википедия

  • Дискретный логарифм — Дискретное логарифмирование (DLOG) – задача обращения функции gx в некоторой конечной мультипликативной группе G. Наиболее часто задачу дискетного логарифмирования рассматривают в группе обратимых элементов кольца вычетов, в мультипликативной… …   Википедия


Поделиться ссылкой на выделенное

Прямая ссылка:
Нажмите правой клавишей мыши и выберите «Копировать ссылку»