以下是计算此处karger min cut algorithm in python 2.7发布的最小切割的代码。没有data = copy.deepcopy(G),找到最小切割的效率并不好。谁能解释为什么?感谢。
import random, copy
data = open("***.txt","r")
G = {}
for line in data:
lst = [int(s) for s in line.split()]
G[lst[0]] = lst[1:]
def choose_random_key(G):
v1 = random.choice(list(G.keys()))
v2 = random.choice(list(G[v1]))
return v1, v2
def karger(G):
length = []
while len(G) > 2:
v1, v2 = choose_random_key(G)
G[v1].extend(G[v2])
for x in G[v2]:
G[x].remove(v2)
G[x].append(v1)
while v1 in G[v1]:
G[v1].remove(v1)
del G[v2]
for key in G.keys():
length.append(len(G[key]))
return length[0]
def operation(n):
i = 0
count = 10000
while i < n:
data = copy.deepcopy(G)
min_cut = karger(data)
if min_cut < count:
count = min_cut
i = i + 1
return count
print(operation(100))
答案 0 :(得分:0)
data = G
和karger(data)
不会复制字典,而karger(data)
会使用原始G
字典。但karger
会更改data
中的值,因此会自动更改原始字典中的值。因此,karger(data)
的下一次执行将使用具有不同值的字典。
删除deepcopy
并在print(data)
之前添加karger(data)
,您会在data
中看到不同的值。