現時点では、私のアルゴリズムが完了するまでに 10 時間以上 (推定) かかります。それは今でも実行されているので、それがどれほどひどいものであるかをより正確に見積もることができます.
さまざまな長さのソートされた出現リストを持つ一連の人々Pがあるとします。ここで、 iはインデックス変数です。G P i ,P j = nとなるようなグラフGを作成したいと思います。ここで、nはP iとP jの間のエッジの重みであり、特定の静的範囲r内でそれらが同時に発生する回数を表します。
私の現在のアルゴリズムは無知で、次のように Python で実装されています(読みやすく、明確にするため) 。
print '>Generating combinations...',
pairs = combinations(people, 2)
print 'Done'
print 'Finding co-occurences'
radius = 5
for A, B in pairs:
for oA in A.occurances:
for oB in B.occurances:
if oB in range(oA - radius, oA + radius):
try:
network.edge[A.common_name][B.common_name]['weight'] += 1
except:
network.add_edge(A.common_name, B.common_name, weight=1)
oB
が現在の範囲を超えるoA
と、ループが単純に次の に続くように、このアルゴリズムを変更することを検討しましたoA
。
リストがソートされていることを考えると、これを達成するためのより良い方法はありますか?