簡體   English   中英

我在Python中的圖收縮算法表現異常

[英]My graph contraction algorithm in Python behaves strangely

我已經為這個問題寫了一些代碼。 (python27)

圖形表示為具有凍結集鍵和凍結集集的字典:

sample_graph = {frozenset([7]): set([frozenset([4]), frozenset([5]), frozenset([3])]), frozenset([5]): set([frozenset([7]), frozenset([2]), frozenset([1])]), frozenset([3]): set([frozenset([7]), frozenset([4]), frozenset([2]), frozenset([1])]), frozenset([6]): set([frozenset([4]), frozenset([2]), frozenset([1])]), frozenset([4]): set([frozenset([6]), frozenset([7]), frozenset([3]), frozenset([1])]), frozenset([1]): set([frozenset([6]), frozenset([4]), frozenset([5]), frozenset([2]), frozenset([3])]), frozenset([2]): set([frozenset([6]), frozenset([5]), frozenset([3]), frozenset([1])])}

輸出應該是只有兩個節點的圖,這是圖中所有節點的凍結集。 此時,它會遇到KeyError。

def kargerMinCut(graph):
if len(graph) == 2:
    return graph
u = random.choice(graph.keys())   # u and v are frozensets, idea is that they form
v = random.choice(list(graph[u])) # a clique in a single frozenset
for node in graph:
    if node != u and node != v:
        links = graph[node]       
        if u in links or v in links:
            links.add(frozenset(tuple(u | v))) # combine u and v to form one link
            links.discard(u)                   # delete old links to u and v
            links.discard(v)            
            graph[node] = links
graph[u | v] = graph[u] | graph[v]             # new key for u and v 
del graph[u], graph[v]                         # u and v are no longer needed
return kargerMinCut(graph)

我認為問題可能出在使用is關鍵字。 請注意,在蟒蛇, is當兩個參數指的是完全相同的對象(僅相當於返回true char* == char* C ++中,將==操作符,如果內容是相同的(相當於返回true string == string在C ++中)。

因此,而不是is not嘗試!=

在python中遍歷圖中的元素時,我曾經遇到過同樣的問題。 :)

PS--另外, if

links.add(frozenset(tuple(u | v))) if u in links or v in links else None

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM