2013-01-18 45 views
6

我想與Ñ頂點,其中每個頂點有ķ直接後繼者和ķ直接前任創建該組的所有有向圖的。 Ñķ不會那麼大,而圍繞Ñ = 8和ķ = 3該集包括環狀和無環圖。每個圖形將作爲抽樣大量加權圖形的模板。枚舉圖

我的興趣是在拓撲圖案的作用,所以我不想品嚐任何兩個圖是相互對稱,重量在那裏對稱意味着沒有頂點的排列在它變換一個圖形存在進入另一個。

甲幼稚的解決方案是考慮2 ^(Ñ *(Ñ - 1))鄰接矩陣和消除所有那些(大部分),用於其中直接後繼者或前導者限制被違反。對於ñ = 8,這仍然有足夠的位來表示,並簡單地枚舉每個矩陣在uint64_t內舒適。

跟蹤行數和列數將是另一個改進,但真正的瓶頸是將圖添加到結果集中,此時我們需要測試集合中已存在的每個其他圖的對稱性。對於n = 8每個插入操作已經超過40,000個排列。

任何人都可以引用我的算法,我可以閱讀,可以以更聰明的方式做到這一切?是否有C,C++,Java或Python的圖庫,已經實現了這樣一個全面的圖形生成器?是否有一個存儲庫,其中某人已經「合理」列出所有圖表nk

+0

這聽起來像是「計算機程序設計藝術」第4卷中的內容。 – templatetypedef

回答

1

在我看來,圖同構不是你應該考慮實現自己的東西。我相信目前最先進的技術是Brendan McKay的Nauty(及相關程序/庫)。這與工作有點相似,但避免做自己的天真圖同構可能是值得的。此外,它主要面向無向圖,但它也可以做有向圖。您可能想查看與Nauty一起提供的geng(其生成無向圖)和(它生成有底圖的有向圖)實用程序。

+0

感謝@mhum,至少+1。看起來像Nauty的'geng'確實允許度數的限制(對於k = 3'-d1'來說,較低而'-D3'對於較高的)。但是'directg'不會遵守這些約束條件,並且轉換規則的組合將是非平凡的:一級一級強制自我,進出和三級強制所有進入或退出,二級都會以非常美的方式依靠鄰居,不是嗎? –

+0

您可能需要做一些調整才能使其發揮作用。我可能會以帶* -d6和-D6的* geng *開頭,得到一個6-正則無向圖的列表,然後將這些圖送入* directg *並拋出那些不滿足indegree和outdegree = 3的圖所有節點。不知道這對你來說是否足夠快,但我敢打賭,它會比檢查自己的同構更快。 – mhum

+0

這很有道理。謝謝。 –

1

這是一個評論比一個答案更多,因爲它似乎我錯過了你的問題。

首先,這樣的圖可能是非循環的嗎?

我也想知道你的對稱性約束。這不會使所有這些圖形彼此對稱嗎?它是否允許排列連接矩陣的行和列?

例如,如果我們允許圖中的自連接,下面的連接矩陣是否滿足您的條件?

1  1  0  0  0  0  0  1 
1  1  1  0  0  0  0  0 
0  1  1  1  0  0  0  0 
0  0  1  1  1  0  0  0 
0  0  0  1  1  1  0  0 
0  0  0  0  1  1  1  0 
0  0  0  0  0  1  1  1 
1  0  0  0  0  0  1  1 

從這個矩陣開始,是那麼不可能置換它的行和列,以獲得所有這樣的圖,所有的行和列有三個的總和?

這樣的矩陣的一個例子可以通過以下方式(使用MATLAB)從上述矩陣A獲得。

>> A(randperm(8),randperm(8)) 

ans = 

    0  1  0  0  0  1  1  0 
    0  0  1  0  1  0  1  0 
    1  1  0  1  0  0  0  0 
    1  1  0  0  0  1  0  0 
    1  0  0  1  0  0  0  1 
    0  0  1  1  0  0  0  1 
    0  0  1  0  1  0  0  1 
    0  0  0  0  1  1  1  0 

PS。在這種情況下,爲了獲得對角線上只有零點的矩陣,我重複了幾次該命令。:)

編輯

啊,我從你的意見,我是不正確見。當然,排列索引必須與行和列相同。我至少應該注意到,當我開始與自我連接圖並獲得一個沒有他們排列後。

隨機排列同構而是將這個樣子:

idx = randperm(8); 
A(idx,idx); 

這將讓所有的自我連接。

也許這可能在矩陣生成時有些用處,但它並不像我想象的那樣有用。

+0

謝謝,@ user1884905。對於k = 3,這些圖形確實是循環的。你的想法排列矩陣是整齊的。對於系統運行,請檢查'perms'。爲了測試同構,排列索引對於行和列是相同的,因此生成器可以排除這些相同的索引。隨着一些編輯,我會upvote這一點。但是,請注意,只有必要使用不同的行和列索引進行置換,而不足以避免同構,並且由此節省的成本尚不明確。對於n = 3和k = 2,大多數結果是同構的,但對於n >> k的碰撞應該下降。 –

+0

@ s.bandara感謝您的評論,我看到我有點偏離。儘管如此,我仍然對非循環圖表感到疑惑。對於非循環圖而言,沒有必要讓節點沒有後繼,沒有前輩的節點。 – user1884905

+0

好點。我的意思是說循環或不循環不是我的標準的一部分,但我現在看到他們都會有循環。 –