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
С уважением, Скотт.