Это проблема «правильного математического выражения» P или NP? - PullRequest
7 голосов
/ 10 июня 2009

Этот вопрос чисто из любопытства. Я ухожу из школы на лето, и собирался реализовать алгоритм, чтобы решить это просто для удовольствия. Это привело к вышеупомянутому вопросу, насколько сложна эта проблема?

Проблема: вам дан список целых положительных чисел, набор математических операторов и знак равенства (=). Вы можете создать правильное математическое выражение, используя целые числа (в том же порядке) и операторы (любое количество раз)?

Пример должен прояснить любые вопросы:

дано: {2, 3, 5, 25}, {+, -, *, /}, {=}
выход: ДА

выражение (я думаю, только одно): (2 + 3) * 5 = 25. Вам нужно только вывести ДА / НЕТ.

Я считаю, что проблема в NP. Я говорю это, потому что это проблема решения (ответ ДА ​​/ НЕТ), и я могу найти недетерминированный алгоритм поли времени, который решает это.

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

В этом случае главный вопрос заключается в следующем: проблема в P? (т.е. есть ли детерминистический многочленный алгоритм, который его решает?) ИЛИ Задача NP завершена? (То есть можно ли свести к этому известную проблему NP Complete? или, эквивалентно, каждый ли язык NP poly сводится к этой проблеме по времени?) ИЛИ ни как? (т.е. проблема в NP, но не в NP Complete)

Примечание: это постановка задачи предполагает, что P не равно NP. Кроме того, хотя я новичок в Stack Overflow, я знаком с тегом домашней работы. Это действительно просто любопытство, а не домашнее задание :)

Ответы [ 7 ]

6 голосов
/ 10 июня 2009

Непосредственное сокращение от проблемы Разделение (которая является NP-Complete) - при заданном наборе из N целых чисел S входные данные для задачи "Valid Math" будут - элементы S, N -2 оператора «+» и знак «=».

2 голосов
/ 10 июня 2009

Похоже, существует некоторая путаница в том, как проверить NP-полноту. NP-полная проблема является, по крайней мере, такой же сложной, в определенном смысле, как и любая другая проблема в NP. Предположим, мы сравнивали с 3SAT, как пытаются сделать некоторые авторы.

Теперь сведение данной проблемы к 3SAT ничего не доказывает. Тогда верно, что если 3SAT может быть эффективно решен (имеется в виду P = NP), данная проблема может быть решена эффективно. Однако, если данная проблема может быть эффективно решена, то, возможно, она соответствует только легким частным случаям 3SAT.

Нам бы пришлось сократить 3SAT до данной проблемы. Это означает, что мы должны составить правило для преобразования произвольных задач 3SAT в примеры данной проблемы, чтобы решение данной проблемы указывало нам, как решить проблему 3SAT. Это означает, что 3SAT не может быть сложнее, чем данная проблема. Поскольку 3SAT является самым сложным из возможных, данная проблема также должна быть самой сложной из возможных.

Снижение от проблемы с разделами работает. Эта проблема работает так: учитывая мультимножество S целых чисел, можем ли мы разделить это на два непересекающихся подмножества, которые между ними включают каждый член S, так что суммы непересекающихся подмножеств равны?

Для этого мы строим последовательность, начинающуюся с 0, содержащую каждый элемент S, а затем 0. Мы используем {+, -} в качестве набора операций. Это означает, что каждый элемент S будет либо добавлен, либо вычтен до общего значения 0, что означает, что сумма добавленных элементов равна сумме вычтенных элементов.

Следовательно, эта проблема, по крайней мере, так же сложна, как и проблема Разделения, поскольку мы можем решить пример программы Разделения, если мы можем решить данную, и, следовательно, она NP-полная.

2 голосов
/ 10 июня 2009

ОК, сначала вы указываете «набор» целых чисел, но набор по определению неупорядочен, так что вы имеете в виду «список» целых чисел.

Кроме того, здесь я сделаю предположение, которое может быть неверным, а именно то, что знак = всегда появляется ровно один раз, между вторым и последним и последним целым числом в вашем списке. Если вы разрешите знак равенства в середине, он станет более сложным.

Вот фактическое доказательство того, что «Действительное математическое выражение» (VME) является NP-полным. Мы можем сделать сокращение от Подмножество . Обратите внимание, что определение суммы подмножества в Википедии требует, чтобы подмножество не было пустым. Фактически, верно, что более общая проблема суммы подмножеств, допускающая пустые подмножества, является NP-полной, если желаемая сумма также является частью ввода. Я не дам это доказательство, если не будет запрошено. Учитывая экземпляр подмножества суммы {i_1, i_2, ..., i_n} вместе с желаемой суммой s, создайте следующий экземпляр VME:

{0, i_1, 0, i_2, 0, ..., i_n, s}, {+, *}, {=}

Если экземпляр суммы подмножества разрешим, то есть некоторое подмножество целых чисел, которое добавляет к 0. Если целое число i1 является частью суммы, добавьте его с соответствующим ему нулем (непосредственно слева) и если i1 не является частью суммы, умножьте ее. Между каждым нулем и термином справа вставьте дополнительный знак.

Взяв пример из Википедии

{−7, −3, −2, 5, 8}

где { −3, −2, 5} сумма равна 0, мы бы закодировали его как

{0, -7, 0, -3, 0, -2, 0, 5, 0, 8, 0}

и полученное выражение будет

{0*7 + 0 + -3 + 0 + -2 + 0 + 5 + 0*8 = 0}

Теперь нам также нужно показать, что любое решение этого экземпляра VME приводит к решению экземпляра суммы подмножеств. Это проще, чем вы думаете. Когда мы смотрим на результирующее выражение, мы можем сгруппировать числа в числа, которые умножаются на 0 (включая как часть умножения цепочки), и те, которые не умножаются. Любое число, умноженное на ноль, не включается в итоговую сумму. Любое число, которое не умножается на ноль, должно быть добавлено к окончательной сумме.

Итак, мы показали, что этот экземпляр VME разрешим, ЕСЛИ И ТОЛЬКО ЕСЛИ соответствующий экземпляр суммы поднабора является разрешимым, поэтому сокращение завершено.

РЕДАКТИРОВАТЬ: Сокращение разделов (с комментарием) работает также, и лучше, потому что это позволяет вам ставить знак равенства в любом месте. Ухоженная!

1 голос
/ 10 июня 2009

Есть два свойства, которые должны быть выполнены, чтобы быть NP Complete.

Решение задачи C является NP-полным, если:

  1. C находится в NP, а
  2. Каждая задача в NP сводится к C за полиномиальное время.

Мы установили 1. 2 в результате того, что каждая проблема в NP сводится к 3SAT, а 3SAT сводится к текущей проблеме.

Следовательно, он NP-завершен.

(редактировать) Ответ на комментарий ниже:

Я докажу, что SAT сводится к текущей задаче, и, поскольку 3SAT сводится к SAT, результат будет следующим.

Формула ввода представляет собой соединение следующих выражений:

(x 1 V x 2 V x 3 V ... x n V y 1 )

(x 1 V x 2 V x 3 V ... x n V y 2 )

(x 1 V x 2 V x 3 V ... x n V y 3 )

.

.

.

(x 1 V x 2 V x 3 V ... x n V y 64 )

, где каждый y i является логическим значением, основанным на том, каков порядок операторов, примененных между всеми x i . т. е. y i может принимать в общей сложности 4x4x4x4x1 значения (при условии, что только +, -, x, / являются операторами, а = всегда последний оператор; это можно изменить, если набор операторов изменен на включить других операторов)

Если ни одно из выражений не является истинным, тогда полное выражение будет иметь значение FALSE, и нет способа проверить, пока мы не подставим все возможные значения, то есть от x 1 до x n в качестве n чисел и от y 1 до y 64 как различные способы применения операторов (Это заботится о порядке)

Это преобразование выполняется во время POLY, и данная булева формула выполнима, если математическое выражение верно и т. Д.

Кто-нибудь заметил недостаток?

1 голос
/ 10 июня 2009

Сейчас у вас нет времени на полный ответ, но вы можете описать сокращение этой проблемы до Рюкзакной задачи .

Используя динамическое программирование, вы можете получить псевдополином временное решение. Обратите внимание, что это не противоречит с тем фактом, что проблема действительно является NP Complete.

0 голосов
/ 10 июня 2009

У меня нет времени, чтобы выработать доказательство в данный момент, но догадка говорит мне, что это может быть не в P. Вы можете определить грамматику для арифметики, и тогда этот вопрос сводится к поиску допустимое дерево разбора, которое использует все эти терминалы. я считаю , что эта проблема в NP, но за пределами P.

0 голосов
/ 10 июня 2009

Это не совсем ответ на ваш вопрос о сложности, но ваша проблема звучит немного похоже на проблему Обратный отсчет . Быстрый поиск обнаружил эту статью: http://www.cs.nott.ac.uk/~gmh/countdown.pdf

...