Это проблема НП?

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

Во всяком случае, есть игра, в которую я недавно играл под названием «Алхимия», которая натолкнула меня на эту мысль. В основном вы начинаете с 4 основных элементов и комбинируете их, чтобы сделать другие элементы.

Так, например, это краткий "рецепт" если хотите для изготовления элементов

fire=basic element
water=basic element
air=basic element
earth=basic element
sand=earth+earth
glass=sand+fire
energy=fire+air
lightbulb=energy+glass

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

Очевидно, что огонь+воздух=энергия, земля+земля=песок, песок+огонь=стекло, энергия+стекло=лампочка.

Но я не могу придумать никакого способа написать программу для обработки списка и выяснить это, не выполняя метод грубой силы и не просматривая каждый элемент и не проверяя его рецепт.

Это проблема НП? Или я просто не могу в этом разобраться?


person Earlz    schedule 29.11.2010    source источник
comment
Может быть бесполезно, но это похоже на работу для Пролога.   -  person Chris Lutz    schedule 29.11.2010
comment
это в P, а значит, и в NP. Однако оно не является NP-полным.   -  person lijie    schedule 29.11.2010
comment
Вы можете написать проверку для него довольно просто, так что это, по крайней мере, в NP.   -  person Ólafur Waage    schedule 29.11.2010
comment
lijie - если P = NP, то все проблемы в P являются NP-полными, поэтому, если вы говорите, что проблема в P не является NP-полной, вы говорите, что P != NP   -  person user486972    schedule 29.11.2010


Ответы (2)


Как эта программа обработает список, чтобы создать лампочку?

Наверняка вы просто запускаете определения в обратном порядке; например

  1. Для создания лампочки требуется 1 энергия + 1 стакан.
  2. Для создания энергии требуется 1 огонь + 1 воздух

и так далее. По сути, это простая прогулка по дереву.

OTOH, если вы хотите, чтобы компьютер понял, что энергия + стекло означает лампочку (а не «каплю расплавленного стекла»), у вас нет шансов решить проблему. Вы, наверное, не смогли бы заставить двух игроков согласиться, что энергия + стекло = лампочка!

person Stephen C    schedule 29.11.2010
comment
да, это действительно имеет смысл. Что касается вашего последнего комментария, в игре на самом деле это было электричество + стекло, но у электричества было длинное определение, поэтому я сократил его. Я думаю, что я видел проблему по-другому, которая не была обратимой, но неправильно сформулировала ее. В любом случае, это правильный ответ, как я это сформулировал, хотя - person Earlz; 29.11.2010

Вы можете легко смоделировать свою проблему в виде графа и искать решение с помощью любого полного алгоритма поиска. Если у вас нет опыта, вам также может помочь автоматическое планирование. Я ссылаюсь на этот текст, потому что он также содержит введение в сложность и алгоритмы поиска.

person Jim Brissom    schedule 29.11.2010