Мне нужно итеративно генерировать powerset большого набора в определенном порядке.Итеративно я имею в виду, что при каждом вызове getNext () (или аналогичного) я получаю следующий элемент powerset в определенном порядке.Предварительный расчет и хранение всего блока питания не вариант, так как он будет слишком большим;Я говорю о powerset набора из 200 предметов.Вместо этого конкретный порядок позволит мне оптимизировать и пропустить вперед, когда появятся «неинтересные» элементы powerset.
Указанный порядок выглядит следующим образом, для упорядоченного набора из пяти элементов с 1, представляющего включение элемента в блок питанияэлемент (слева направо, сверху вниз):
00000 10000 11000 11100 11110 11111
01000 10100 11010 11101
00100 10010 11001 11011
00010 10001 10110 10111
00001 01100 10101 01111
01010 10011
01001 01110
00110 01101
00101 01011
00011 00111
С «пропуском вперед» я имею в виду, что если я, например, определю, что 10010 не удовлетворяет некоторому критерию, я не знаю, что ни один изследующие элементы powerset с двумя единицами будут соответствовать этому критерию, поэтому я могу перейти к рассмотрению элементов powerset с тремя единицами.
Я реализовал частично работающее решение, используя смещение частей элементов powerset, ноДалеко не удалось разобраться в логике правильной обработки всего этого.Очевидно, что множества с нулями 1 и пятью 1, а также одним 1 и четырьмя 1 являются соответствующими зеркальными изображениями друг друга, интересными случаями являются средние выше, с двумя 1 и тремя 1.Любая помощь будет оценена.