Недетермінована машина Тюрінга: відмінності між версіями

[перевірена версія][перевірена версія]
Вилучено вміст Додано вміст
Немає опису редагування
Рядок 37:
== Приклад ==
 
Розглянемо задачу перевірки того що дане ''b''-розрядне [[ціле число]] ''N'' (''2<sup>b-1</sup>≤N<2<sup>b</sup>'') є складовим. Тоді ''b'' -&nbsp;— довжина вхідних даних, стосовно якого розглядається час обчислення. Відповідь "«ТАК" -»&nbsp;— число складене і "«НІ" -»&nbsp;— просте.
 
Недетермінований алгоритм для цього завдання може бути наступнимтаким:
 
* Вибрати недетермінованої ціле число ''m'' таке що ''{{mvar|1< &lt; m< &lt; N''}}.
* Розділити націло ''N'' на ''m'', залишок позначимо через ''a''.
* Якщо {{mvar|a}} = 0 видати відповідь "«ТАК"» ({{mvar|m}} тоді -&nbsp;— дільник {{mvar|N}}), інакше видати відповідь "«НІ"».
(Алгоритм написаний не безпосередньо у вигляді визначення машини Тьюринга.)
 
Під час обчислення цього алгоритму визначальною частиною є час виконання ділення, яке може бути виконано за ''[[O большое|O]](b<sup>2</sup>)'' кроків, що являє собою поліноміальний час. Таким чином завдання знаходиться в [[Клас складності NP|класі NP]].
 
Для реалізації такого часу обчислення, потрібно вдало вибирати число ''{{mvar|m''}}, або виконувати обчислення по всіх можливих шляхах (для всіх можливих ''{{mvar|m''}}) одночасно на безлічі копій машини.
 
Якщо моделювати цей алгоритм на детермінованій [[Машина Тюрінга|машині Тюрінга]], пробуючи по черзі всі можливі варіанти, потрібно перевірити ''N-2=O(2<sup>b</sup>)'' гілок. Таким чином загальний час обчислень буде ''O(b<sup>2</sup>2<sup>b</sup>)'' кроків, що є вже експоненціальне час, яке істотно більше ніж поліноміальний час. Таким чином цей алгоритм не потрапляє в [[Клас складності P|клас P]]. (Проте, можуть бути застосовані інші, більш швидкі алгоритми для цього завдання, які працюють за поліноміальний час, і таким чином завдання потрапляє в [[Клас складності P|клас P]].)