1
我試圖實現Karger算法來通過python計算圖的最小切割,並用小輸入圖測試我的代碼。基本上,我爲每次迭代製作原始輸入圖的副本,但是在運行一次迭代的代碼之後,原始輸入圖會以某種方式修改。我的代碼在哪裏出錯?python原始字典在每次迭代後被修改
import random
def random_contraction(graph):
u = random.choice(graph.keys())
v = random.choice(graph[u])
for node in graph[v]:
for vertex in graph[node]:
if vertex == v:
graph[node].remove(vertex)
graph[node].append(u)
graph[u] = graph[u] + graph[v]
graph[u] = [node for node in graph[u] if (node != u and node != v)]
graph.pop(v, None)
def min_cut(graph):
while len(graph) > 2:
random_contraction(graph)
node = random.choice(graph.keys())
return len(graph[node])
graph_input = {0:[1,3,4,5], 1:[0,2,4],2:[1,3,5],3:[0,2],4:[0,1],5:[0,2]}
list_min_cut = []
for dummy_idx in range(100):
print "original", graph_input
#check the original input graph at the beginning of iteration
graph = dict(graph_input)
#make a copy of original input graph
list_min_cut.append(min_cut(graph))
print min(list_min_cut)
感謝您的評論,deepcopy的完美的作品! – riorita