У меня есть ориентированный ациклический график, как показано на рисунке ниже. Как идентифицировать несвязанных братьев и сестер в графе?
Я хочу, чтобы идентифицировать все такие группы узлов в этом графике, которые удовлетворяют следующим условиям:
Ни один из узлов в группе не будут соединены друг с другом
узлов в группа имеет точно такой же набор родительских и детских узлов
Например, следующая группа узлов будут получены из приведенного выше графика:
Группа 1: {3, 4, 5, 6, 7, 8}
Группа 2: {16, 17}
Группа 3: {19, 20}
Группа 4: {21, 22}
у меня тысячи таких графиков (некоторые с такого размера, как 10k узлов). Я ищу эффективный алгоритм для этого в Python с помощью networkx.
Благодаря
спасибо ante. исправили неверный результат. проверит, насколько хорошо этот код масштабируется. – Parashar
@Parashar Если вы используете networkx, я думаю, что методы для родителей и детей являются предшественниками() и преемниками(). Вы можете попробовать с помощью frozenset вместо кортежа, возможно, он быстрее индексируется. Для этой замены кортеж (отсортированный (узлы)) -> frozenset (узлы). – Ante
Работает очень хорошо. Принял ваш ответ как решение. – Parashar