Число A
является надмножеством числа B
, если все биты, установленные на B
, также установлены на A
. Или A & B == B
.
Учитывая список чисел, как я могу определить все числа, которые являются надмножеством любого другого числа в указанном списке?
Простой подход:
for a in list:
for b in list:
if a != b and a & b == b:
print(a + ' is a superset')
Но этот подход O(n²)
. Есть ли какое-нибудь более эффективное решение?
Неважно, какие подмножества, нужна только информация о надмножествах, и список может быть отсортирован.