Я реализую алгоритм поиска плотного подграфа в ориентированном графе с использованием python + igraph. Основной цикл поддерживает два подграфа S и T, которые изначально идентичны, и удаляет узлы (и инцидентные ребра) в соответствии с подсчетом степени (или степени выхода) этих узлов по отношению к другому графу. У меня проблема в том, что igraph перенумеровывает вершины, поэтому, когда я удаляю некоторые из T, оставшиеся узлы больше не соответствуют тем же самым узлам в S.
Вот основная часть цикла, которая является ключевой.
def directed(S):
T = S.copy()
c = 2
while(S.vcount() > 0 and T.vcount() > 0):
if (S.vcount()/T.vcount() > c):
AS = S.vs.select(lambda vertex: T.outdegree(vertex) < 1.01*E(S,T)/S.vcount())
S.delete_vertices(AS)
else:
BT = T.vs.select(lambda vertex: S.indegree(vertex) < 1.01*E(S,T)/T.vcount())
T.delete_vertices(BT)
Это не работает из-за эффекта удаления вершин на идентификаторы вершин. Есть ли стандартный способ решения этой проблемы?