Сложностные классы. Вычисления с оракулом — различия между версиями
м (rollbackEdits.php mass rollback) |
|||
(не показано 28 промежуточных версий 6 участников) | |||
Строка 1: | Строка 1: | ||
В начале 1960-х годов, в связи с началом широкого использования вычислительной техники для решения практических задач, возник вопрос о границах практической применимости данного алгоритма решения задачи в смысле ограничений на её размерность. Какие задачи могут быть решены на ЭВМ за реальное время? | В начале 1960-х годов, в связи с началом широкого использования вычислительной техники для решения практических задач, возник вопрос о границах практической применимости данного алгоритма решения задачи в смысле ограничений на её размерность. Какие задачи могут быть решены на ЭВМ за реальное время? | ||
− | Ответ на этот вопрос был дан в работах Кобхэма (Alan Cobham, 1964) и Эдмондса (Jack Edmonds, 1965), где были введены сложностные классы задач. К ним относятся классы [[Класс P|P]], [[ | + | Ответ на этот вопрос был дан в работах Кобхэма (Alan Cobham, 1964) и Эдмондса (Jack Edmonds, 1965), где были введены сложностные классы задач. К ним относятся классы [[Класс P|P]], [[Классы NP и Σ₁|NP]] и т.д. |
+ | |||
+ | Сложность алгоритма - величина, характеризующая длину описания алгоритма или громоздкость процессов его применения к исходным данным. | ||
+ | |||
+ | В основных понятиях теории сложности используются такие величины как время работы и объем затрачиваемой памяти. | ||
+ | {{Определение | ||
+ | |definition= | ||
+ | <tex>\mathrm{T}(p,x)</tex> — время работы программы р на входе х. | ||
+ | }} | ||
{{Определение | {{Определение | ||
|definition= | |definition= | ||
− | <tex>\mathrm{ | + | <tex>\mathrm{S}(p,x)</tex> — объем памяти, требуемый программе р для выполнения на входе х. |
− | |||
− | |||
}} | }} | ||
− | Введём понятия <tex>\mathrm{DTIME}</tex> и <tex>\mathrm{DSPACE}</tex>, аналогичным образом определяются классы <tex>\mathrm{NSPACE}</tex> и <tex>\mathrm{NTIME}</tex> (префикс <tex>\mathrm{D}</tex> соответствует детерминизму, а <tex>\mathrm{N}</tex> — недетерминизму). | + | Введём понятия <tex>\mathrm{DTIME}</tex> и <tex>\mathrm{DSPACE}</tex>, аналогичным образом определяются классы <tex>\mathrm{NSPACE}</tex> и <tex>\mathrm{NTIME}</tex> (префикс <tex>\mathrm{D}</tex> соответствует детерминизму, а <tex>\mathrm{N}</tex> — недетерминизму). Через них будет дано определение многим сложностным классам. |
{{Определение | {{Определение | ||
|definition= | |definition= | ||
− | <tex>\mathrm{DTIME(f(n)) | + | <tex>\mathrm{DTIME}(f(n))</tex> — класс языков <tex>L</tex>, для которых существует детерминированная программа <tex>p</tex> такая, что <tex>L(p)=L</tex> и для любого <tex>x</tex> из <tex>L</tex> выполнено <tex>\mathrm{T}(p,x) = O(f(n))</tex> (здесь <tex>n</tex> — длина <tex>x</tex>). |
}} | }} | ||
{{Определение | {{Определение | ||
|definition= | |definition= | ||
− | <tex>\mathrm{DSPACE(f(n)) | + | <tex>\mathrm{DSPACE}(f(n))</tex> — класс языков <tex>L</tex>, для которых существует детерминированная программа <tex>p</tex> такая, что <tex>L(p)=L</tex> и для любого <tex>x</tex> из <tex>L</tex> выполнено <tex>\mathrm{S}(p,x) = O(f(n))</tex> (здесь <tex>n</tex> — длина <tex>x</tex>). |
}} | }} | ||
− | + | {{Определение | |
+ | |definition= | ||
+ | <tex>\mathrm{TS}(f,g)</tex> — класс языков <tex>L</tex>, для которых существует детерминированная программа <tex>p</tex> такая, что <tex>L(p)=L</tex> и для любого <tex>x</tex> из <tex>L</tex> выполнено <tex>\mathrm{T}(p,x) = O(f(n))</tex> и <tex>\mathrm{S}(p,x) = O(g(n))</tex>, где <tex>x</tex> — длина входа. | ||
+ | }} | ||
== Вычисление с оракулом == | == Вычисление с оракулом == | ||
+ | В теории вычислений и теории сложности Машиной с оракулом называют абстрактную машину, предназначенную для решения какой-либо проблемы разрешимости. Такая машина может быть представлена как машина Тьюринга, дополненная оракулом с неизвестным внутренним устройством. Постулируется, что оракул способен решить определенные проблемы разрешимости за один такт машины Тьюринга. Машина Тьюринга взаимодействует с оракулом путем записи на свою ленту входных данных для оракула и затем запуском оракула на исполнение. За один шаг оракул вычисляет функцию, стирает входные данные и пишет выходные данные на ленту. Иногда машина Тьюринга описывается как имеющая две ленты, одна предназначена для входных данных оракула, другая — для выходных. | ||
{{Определение | {{Определение | ||
|definition= | |definition= | ||
Оракул — программа <tex>A(x)</tex>, вычисляющая за <tex>O(1)</tex> времени, верно ли, что <tex>x \in A</tex>. | Оракул — программа <tex>A(x)</tex>, вычисляющая за <tex>O(1)</tex> времени, верно ли, что <tex>x \in A</tex>. | ||
}} | }} | ||
− | Сложностный класс задач, решаемых алгоритмом из класса <tex>C</tex> с оракулом для языка <tex>A</tex>, обозначают <tex>C^A | + | Сложностный класс задач, решаемых алгоритмом из класса <tex>\mathrm{C}</tex> с оракулом для языка <tex>\mathrm{A}</tex>, обозначают <tex>\mathrm{C^A}</tex>. |
− | Если <tex>A</tex> — множество языков, то <tex>C^A =\bigcup\limits_{D \in A}C^D | + | Если <tex>\mathrm{A}</tex> — множество языков, то <tex>\mathrm{C^A} =\bigcup\limits_{D \in A}\mathrm{C^D}</tex>. |
[[Категория: Теория сложности]] | [[Категория: Теория сложности]] |
Текущая версия на 19:10, 4 сентября 2022
В начале 1960-х годов, в связи с началом широкого использования вычислительной техники для решения практических задач, возник вопрос о границах практической применимости данного алгоритма решения задачи в смысле ограничений на её размерность. Какие задачи могут быть решены на ЭВМ за реальное время?
Ответ на этот вопрос был дан в работах Кобхэма (Alan Cobham, 1964) и Эдмондса (Jack Edmonds, 1965), где были введены сложностные классы задач. К ним относятся классы P, NP и т.д.
Сложность алгоритма - величина, характеризующая длину описания алгоритма или громоздкость процессов его применения к исходным данным.
В основных понятиях теории сложности используются такие величины как время работы и объем затрачиваемой памяти.
Определение: |
— время работы программы р на входе х. |
Определение: |
— объем памяти, требуемый программе р для выполнения на входе х. |
Введём понятия и , аналогичным образом определяются классы и (префикс соответствует детерминизму, а — недетерминизму). Через них будет дано определение многим сложностным классам.
Определение: |
— класс языков , для которых существует детерминированная программа такая, что и для любого из выполнено (здесь — длина ). |
Определение: |
— класс языков , для которых существует детерминированная программа такая, что и для любого из выполнено (здесь — длина ). |
Определение: |
— класс языков , для которых существует детерминированная программа такая, что и для любого из выполнено и , где — длина входа. |
Вычисление с оракулом
В теории вычислений и теории сложности Машиной с оракулом называют абстрактную машину, предназначенную для решения какой-либо проблемы разрешимости. Такая машина может быть представлена как машина Тьюринга, дополненная оракулом с неизвестным внутренним устройством. Постулируется, что оракул способен решить определенные проблемы разрешимости за один такт машины Тьюринга. Машина Тьюринга взаимодействует с оракулом путем записи на свою ленту входных данных для оракула и затем запуском оракула на исполнение. За один шаг оракул вычисляет функцию, стирает входные данные и пишет выходные данные на ленту. Иногда машина Тьюринга описывается как имеющая две ленты, одна предназначена для входных данных оракула, другая — для выходных.
Определение: |
Оракул — программа | , вычисляющая за времени, верно ли, что .
Сложностный класс задач, решаемых алгоритмом из класса
с оракулом для языка , обозначают . Если — множество языков, то .