python + igraphを使用して、有向グラフで密なサブグラフを見つけるアルゴリズムを実装しています。メイン ループは、最初は同一である 2 つのサブグラフ 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)
これは、頂点 ID に対する頂点の削除の影響により機能しません。この問題の標準的な回避策はありますか?