目前,我的算法需要(估計)超過十個小時才能完成。它現在仍在運行,這樣我就可以更好地估計它是多麼簡單的很糟糕它。查找兩個排序列表之間共現的算法優化
說我有一組人P每一個排序的不同長度的存在列表,其中我是一個索引變量。我想創建圖形ģ使得ģ P 我,P Ĵ = N,其中Ñ是P 我之間的邊緣重 and P j其中r表示它們在特定靜態範圍內共同出現的次數r。
我現在的算法是盲目和在Python實現(是可讀可不含糊)如下:(修改爲簡潔起見從its repository on GitHub)
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
。
有沒有更好的實現這個的方法,考慮到列表是排序?