Karger Min Cut для Coursera Алгоритмы курса python 3.6

Я реализовал код ниже. Это работает в небольших случаях, когда число вершин меньше 10. Однако мне не удалось воспроизвести результаты для размера ввода для вопроса. Это также занимает очень много времени, чтобы бежать. Может ли кто-нибудь помочь мне проверить время работы такого алгоритма и проверить, в порядке ли код?

from random import choice
from collections import Counter
from copy import deepcopy

g = {}

def kargerMinCut(g):
    while len(g) >2:
        chosenpoint = choice(list(g.keys()))
        edges_of_point = set(g[chosenpoint])



#        print("point is ",chosenpoint, "edges are" , edges_of_point)
        for i in g.keys():           
            if chosenpoint in g[i]:
                g[i].extend(edges_of_point)
                g[i]=Remover(i,g[i]) ##removes self loop##
                g[i]=Remover(chosenpoint,g[i]) ##removes chosenpoint from the rest of the dict values##
 #               print("key is", i, "values are",g[i])        

        del g[chosenpoint]

    return(len(min(g.values())))


def Remover(key, values):
    new_values =[]
    for i in values:
        if i != key:
            new_values.append(i)

    return new_values



with open('kargerMinCut.txt', 'r') as graphInput:

    for line in graphInput:
        ints = [int(x) for x in line.split()]
        g[ints[0]] = (ints[1:])

cuts=[]
runtests=(10,100,200,300)
for j in runtests:
    for i in range(j):
        cuts.append(kargerMinCut(deepcopy(g)))
        print("Ran iteration...",i+1)
    print("Minimum Cut is: ", min(cuts), "for=", j, "Tests.")

Входной текст можно найти здесь ( https://gist.githubusercontent.com/aymanfarhat/6098683/raw/3dd12f4023ad142f8f7cd5bb73dc413f4a6631e4/kargerMinCut.txt")

Я считаю, что ответ должен быть 17

С уважением, Скотт.

0 ответов

Другие вопросы по тегам