Не уверен, что пример (или фактический usecase) квалифицируется как NP-Complete, но мне интересно, какой способ Pythonic ниже, предполагая, что это был доступный алгоритм.Получение всех возможных состояний объекта для задачи NP-Complete (?) В Python
Скажем, у вас есть:
class Person:
def __init__(self):
self.status='unknown'
def set(self,value):
if value:
self.status='happy'
else :
self.status='sad'
... blah . Maybe it's got their names or where they live or whatev.
и некоторые операции, которая требует группу лиц. (Ключевое значение здесь, является ли Лицо счастливым или грустным.)
Следовательно, данный PersonA, PersonB, PersonC, PersonD - Я хотел бы привести список возможных 2 ** 4 комбинаций грустных и счастливые люди. то есть
[
[ PersonA.set(true), PersonB.set(true), PersonC.set(true), PersonD.set(true)],
[ PersonA.set(true), PersonB.set(true), PersonC.set(true), PersonD.set(false)],
[ PersonA.set(true), PersonB.set(true), PersonC.set(false), PersonD.set(true)],
[ PersonA.set(true), PersonB.set(true), PersonC.set(false), PersonD.set(false)],
etc..
Есть ли хороший питонический способ сделать это? Я думал о понимании списков (и модификации объекта, чтобы вы могли его вызвать и получить два объекта, true и false), но форматы понимания, которые я видел, потребуют от меня знать количество Первых заранее. Я бы хотел сделать это независимо от количества людей.
EDIT: Предположим, что любая операция, которую я собираюсь запустить на этом, является частью более сложного набора проблем - нам нужно проверить все значения Person для данного набора, чтобы решить нашу проблему. (т. е. я знаю, что это не выглядит NP-полным прямо сейчас =)) любые идеи?
Спасибо!
Это не имеет ничего общего с NP-полнотой ... –
Да, NPc, вероятно, был неправильным способом описать это. –