Как распечатать набор мощности, чтобы каждая пара подмножеств отличалась только одним элементом?

1

Я хочу напечатать набор мощности в таком порядке, чтобы смежные подмножества отличались только одним элементом.

Например:

Input: S= {1,2,3,4}

Выходные данные будут напечатаны следующим образом:

{"",{1},{2}, {3}, {4} ,{4,1}, {4,2} ,{4,3},{3,1}...}

или же

{"", {1}, {1,2}, {2}, {2,3}, ...}
  • 0
    Я не думаю, что порядок ввода набора имеет значение.
Теги:
powerset

1 ответ

2
Лучший ответ

Сгенерируйте первые 2 ^ N серые коды, где N = len (S). Используйте биты кода для выбора элементов для этого набора.

S = [1, 2, 3, 4]

for i in range(2**len(S)):
    gray_code = i ^ (i >> 1)
    subset = [S[j] for j in range(len(S)) if gray_code & (1 << j) ]
    print(subset)

Выход:

[]
[1]
[1, 2]
[2]
[2, 3]
[1, 2, 3]
[1, 3]
[3]
[3, 4]
[1, 3, 4]
[1, 2, 3, 4]
[2, 3, 4]
[2, 4]
[1, 2, 4]
[1, 4]
[4]
  • 0
    Спасибо, я понятия не имел о сером коде раньше.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню