Эффективный алгоритм поиска всех максимальных подмножеств

У меня есть коллекция уникальных наборов (представленных в виде битовых масок), и я хотел бы удалить все элементы, которые являются правильными подмножествами другого элемента. Например:

input = [{1, 2, 3}, {1, 2}, {2, 3}, {2, 4}, {}]
output = [{1, 2, 3}, {2, 4}]

Мне не удалось найти стандартный алгоритм для этого или даже название для этой проблемы, поэтому я называю это "максимальные подмножества из-за отсутствия чего-либо еще. Вот алгоритм O (n ^ 2) (для конкретности в Python), предполагаяis_subset_func О (1): 1

def eliminate_subsets(a, cardinality_func, is_subset_func):
    out = []
    for element in sorted(a, reverse=True, key=cardinality_func):
        for existing in out:
            if is_subset_func(element, existing):
                break
        else:
            out.append(element)
    return out

Есть ли более эффективный алгоритм, надеюсь, O (n log n) или лучше? 1

 Для битовых масок постоянного размера, как это верно в моем случае,is_subset_func простоelement & existing == element, который работает в постоянном времени.

Ответы на вопрос(4)

Ваш ответ на вопрос