Число 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²)
. Есть ли решение более эффективное?
Неважно, какие это подмножества, нужна только информация о надмножествах, и список можно отсортировать.
a > b
, но он все равно O(n^2) - person Damien   schedule 28.04.2020O(n^2)
. Но сортировка по количеству установленных битов, скорее всего, обеспечит ускорение. - person btilly   schedule 28.04.2020