Не уверен, что этот пример (или фактический вариант использования) квалифицируется как 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..
Есть ли хороший питонический способ сделать это? Я думал о понимании списков (и изменении объекта, чтобы вы могли вызвать его и получить два объекта, истинный и ложный), но форматы понимания, которые я видел, потребовали, чтобы я знал количество лиц заранее. Я бы хотел сделать это независимо от количества человек.
РЕДАКТИРОВАТЬ: Предположим, что любая операция, которую я собирался запустить, является частью более крупного набора проблем - нам нужно проверить все значения Person для данного набора, чтобы решить нашу проблему. (т.е. я знаю, что сейчас это не выглядит NP-полным =)) какие-нибудь идеи?
Спасибо!