Учитывая набор семейство подмножеств универсума . Пусть и мы хотим ответить на это .
Я ищу структуру данных, которая позволит мне быстро ответить на это. Мое приложение из теории графов, где я хочу посмотреть, оставляет ли вершина и ее окрестности какие-либо изолированные вершины, и для каждого списка вершин все изолированные вершины, которые он оставляет.
Я хочу создать полный набор или в конечном итоге таблица, хранящая истинные ложные сведения о том, какие множества являются подмножеством друг друга.
Пусть , и , предположим, что
Мы можем сгенерировать матрицу содержания (двудольный граф) за время а затем можем создать таблицу всех сравнений за за каждый набор , пройдя все элементы всех других наборов и пометить его , как не является подмножеством , если они элемент не находится в . Всего за раз.
Можем ли мы сделать что-нибудь быстрее? В частности, возможно ли время или нет?
Я нашел несколько статей по теме:
Простой субквадратичный алгоритм для вычисления частичного порядка подмножеств (1995), который дает алгоритм .
Частичный порядок подмножеств: вычисления и комбинаторика немного улучшают вышеприведенное, но также утверждают, что вышеупомянутая статья решает проблему за время где - максимальное количество множеств, совместно использующих общий элемент, но я не мог понять этот результат.
В статье Между и O ( n α ) авторы показывают, как в графе найти связанные компоненты после удаления замкнутой окрестности вершины с использованием умножения матриц. Это может быть использовано для вычисления множества включений множеств путем нахождения всех компонентов, являющихся синглетонами, со временем выполнения .
Также это обсуждение на форуме связано с тем, что является самым быстрым способом проверки наличия набора? что подразумевает нижнюю оценку .
источник
Ответы:
Если случайность находится в границах, одной грубой идеей было бы сгенерировать набор функций «случайной монотонной сигнатуры» и использовать их для аппроксимации отношения подмножеств (а-ля фильтры Блума). К сожалению, я не знаю, как превратить это в практический алгоритм, но вот некоторые оценки, которые не сразу доказывают невозможность идеи. Это очень далеко от полезного решения, но я напишу его, если оно поможет.
Для простоты предположим, что все наборы имеют почти одинаковый размер, скажем , и что s = o ( u ) . Мы можем предположить 1|S|=s±O(1) s=o(u) ,противном случае мы сделали. Определить
д1≪s
Вот эта дико непрактичная часть. Произвольно выберите подмножеств A 1 , … , A p ⊂ U с заменой каждого размера q и определите функцию f : 2 U → { 0 , 1 } на f ( S ) = 1, если A i ⊂ S для некоторого i , С фиксированным S и A i ( f ( Sp A1,…,Ap⊂U q f:2U→{0,1} f(S)=1 Ai⊂S i S изменяющимся случайным образом, мы имеем
PrAi,f
Посколькуf(S)монотонна, изS⊂Tследуетf(S)≤f(T). ЕслиT⊄S, фиксируем некотороет∈T-S. Вероятность того, чтоfобнаружитT⊄S,равна
Pr ( f ( S ) = 0 < 1 = f
Even if the above calculations are correct, I have no idea how to generate monotonic signature functions with the desired features quickly. It's also likely that this technique doesn't extend to significantly different set sizes.
источник