2012-06-21 46 views
0

好,我不是在尋找如何繪製二維圖形的項目,它只是預期輸出所需要的示意圖,其是如何在2D圖形聚集在一起類似的項目

我有一個像

列表
a=[] 
b=['c','d','e'] 
c=['a','b','d'] 
d=['a'] 
e=['b','a'] 
l=['g','r','p'] 
g=['r'] 
r=['g'] 
p=['l'] 
從它上面現在

清楚的是b爲指向到c,d,E
A,b,C,d是緊密聯繫的,而L,G,R,p被鏈接
可以任何一個人告訴我一個算法(記住2D圖片)如何將這些相似的物品重新組合在一起。

上面只是一個例子。 這個名單將被動態創建

+0

你能詳細說一下嗎?你是什​​麼意思,由密切聯繫和鏈接? – Yavar

+0

您可能想要使用鄰接矩陣來表示圖(如果圖非常小)。 – southerton

+0

實際上,我沒有使用鄰接矩陣來表示我的圖表,我正在使用鏈接列表進行處理。我的意思是指向一個包含元素的列表,如上所示 – duck

回答

2

你有沒有遇到過Graphviz?它有各種不同形式的圖形佈局的算法,我想在上面佈局你的小例子會做得很好。它還包括一些簡單的圖形用戶界面,讓您可以嘗試它所支持的不同佈局。

編輯:在迴應一些澄清:

如果您需要在圖中找到密集的子圖,即使是完全連接,那麼你正在尋找找到社區在網絡算法。在this paper中可以找到最近開發的算法在大型圖表(200萬+節點,代表社交網絡)上的一個示例。

+0

感謝您的回覆。但我不需要任何工具來獲得輸出,我對它使用的算法感興趣。 – duck

1

只是爲了延長亞歷克斯的答案,這裏是你的圖graphviz的使用示例:

graph.dot:

digraph G 
{ 
    b -> c; 
    b -> d; 
    b -> e; 
    c -> a; 
    c -> b; 
    c -> d; 
    d -> a; 
    e -> b; 
    e -> a; 
    l -> g; 
    l -> r; 
    l -> p; 
    g -> r; 
    r -> g; 
    p -> l; 
} 

的Graphviz的輸出:

Example graph

如果你只是想知道你的圖中沒有繪製它的簇是什麼,只需使用this algorithm即可。

+0

上面的輸出是好的,我也想畫,以及如果還有一個鏈接B/W D和G。我的意思是說圖表完全連接。但是一些節點如b,c,d,a,e與l,g,r,p相連或高度耦合,而兩個組之間的連接數量有限。如何確定上述兩個羣集,當一個連接是他/她兩個羣集時(但鬆散連接意味着一個或兩個鏈接) – duck

相關問題