0
接続コンポーネントのすべての要素にラベルを付ける必要があります。グラフのリンクは、辞書の辞書でフォーマットされています。再帰を伴うアルゴリズムは高速であり、大規模なグラフでは不幸にも最大再帰深度が問題になり、毎回最大再帰の長さを増やしたくありません。このコードを書き直して、深さがもはや問題にならないようにする方法を知っていますか?接続コンポーネント分析で最大再帰深度を回避するには?
import numpy as np
def find_components(dists):
N = len(dists.keys())
labels = np.zeros(N, dtype = np.int) - 1
n = 0
steps = 0
def walk(j):
for k in dists[j].keys():
if (labels[k] == -1):
labels[k] = labels[j]
walk(k)
remains = (labels == -1)
while n < N:
i = np.arange(0,N,1)[remains][np.random.randint(0,N - n)]
labels[i] = i
walk(i)
remains = (labels == -1)
n = N - len(np.nonzero(remains)[0])
unique = np.unique(labels)
labels_ = np.zeros(N, dtype = np.int) - 1
for i, label in enumerate(unique):
labels_[labels == label] = i
return labels_
を使用すると、特定の入力データに非常に深い行くかもしれない、ここではDFS(深さ優先探索)を使用しているようです。私はあなたがBFS(幅優先検索)の方法でそれを書き直すかもしれないと思います。 – starrify