【问题标题】:Why data = copy.deepcopy(G) matters in Karger min cut algorithm?为什么 data = copy.deepcopy(G) 在 Karger min cut 算法中很重要?
【发布时间】:2016-11-07 03:31:44
【问题描述】:

这里是计算最小切割的代码karger min cut algorithm in python 2.7。没有data = copy.deepcopy(G),找min cut的效率不好。谁能解释为什么?谢谢。

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))

【问题讨论】:

    标签: python min


    【解决方案1】:

    data = Gkarger(data) 不会复制字典,karger(data) 将使用原始的 G 字典。但是karger 更改了data 中的值,因此它会自动更改原始字典中的值。因此,karger(data) 的下一次执行将使用具有不同值的字典。

    删除deepcopy 并在karger(data) 之前添加print(data),您会在data 中看到不同的值。

    【讨论】:

    • 谢谢,弗拉斯。只有深拷贝在这里工作以保持数据不变。 Copy.copy 在这里也不起作用。
    猜你喜欢
    • 1970-01-01
    • 2014-07-12
    • 2019-12-23
    • 1970-01-01
    • 2010-12-03
    • 1970-01-01
    • 2022-01-06
    • 1970-01-01
    相关资源
    最近更新 更多