2011-03-27 269 views
0

我製作了一個構建3個圖形(弧和節點)的程序。 這些圖是基於1和0的二維數組構建的。 第一張圖是其他兩張將要比較的理想圖。如果有兩種圖形之間比較相似性的方式,即我有兩種方法比較相似,即圖2中有多少個頂點與圖1中的頂點相似。如何比較Java中兩個多維數組之間的相似性

替代問題: 圖形是基於二維數組1和0所以如果有一種方法比較圖1的二維數組和圖2的數組,而不是這會解決我的問題。

我不指望你們都把代碼放好,但我只是想知道是否有一種方法可以做到這一點。如果是的話,它是如何做到的。 任何幫助非常感謝!

大家好,

只是爲了多一點明確: 我有兩個2維數組,像這樣:

double [][] MatrixOfOriginalGraph= {{1,1,1,1}, {0,1,0,0}, {0,0,1,0}, {0,0,0,1}}; double [][] MatrixToBeComparedWithOriginal= {{1,0,0,1}, {0,1,1,0}, {0,0,1,1}, {0,0,0,1};

的第一陣列用於繪製第一張圖和第二個用於繪製第二個圖形。第一個圖基本上是一個4節點圖,其中第一個節點連接到所有其他節點。其他節點沒有互相連接。第二張圖是混合的。我想知道圖2中頂點中有多少節點與圖1中的節點相同。

謝謝, jetnori。

+0

你能給一些樣本數據嗎?這些指數有什麼關係? – 2011-03-27 10:28:00

+0

@Mathew考克斯喜馬修。假設我有兩個1和0的二維數組。我可以從它們中繪製圖形,如果變量A和B之間的交點爲1,則想象一個帶有1和0的正方形,然後繪製一條線。我發佈了兩個數組。第一個是繪製原始圖形的矩陣。原始圖形的第一個節點連接到所有其他3個節點。第二張圖是混合的。希望我幫忙澄清一下。 double [] [] MatrixOfOriginalGraph = {{1,1,1,1},{0,1,0,0},{0,0,1,0},{0,0,0,1}}; double [] [] MatrixToBeComparedWithOriginal = {{1,0,0,1},{0,1,1,0},{0,0,1,1},{0,0,0,1}; – Jetnor 2011-03-27 18:39:58

回答

0

希望我能幫到你。你有一個圖表,你的陣列MatrixOfOriginalGraph將以下鄰接矩陣的呈現:

1111 
0100 
0010 
0001 

和相似性是通過類似的連接定義?

也許一個好的起點可能是節點對之間的每個圖從一個節點開始的Hamming distance

所以

雙[] [] = MatrixOfOriginalGraph {{1,1,1,1},{0,1,0,0},{0,0,1,0},{ 0,0,0,1}};
double [] [] MatrixToBeComparedWithOriginal = {{1,0,0,1},{0,1,1,0},{0,0,1,1},{0,0,0,1};

會導致類似

int node1 = computeDistance({0,1,0,0}, {0,1,1,0}); 
int node2 = computeDistance({1,1,1,1}, {1,0,0,1}); 

等。但要記住,使用漢明距離必須在兩個比較結構中都有相同數量的變量。我不知道這是否是對您的問題的限制。如果這是一個限制,你可以嘗試Levenshtein distance

距離相近的節點越小。然後你可以總結所有節點的漢明距離(實際上,你可以計算出整個序列的距離爲零)或者計算均值和偏差等等,這取決於你需要什麼或者你如何定義相似度。

+0

@ TheMorph是的我相信這是我想要的,但仍然有點不確定如何實現它。這兩個矩陣的大小都是19x19。他們充滿了1和0.我的問題的相似性就是這樣定義的。如果兩個矩陣的相同位置存在1,則這是一個真正的正數,如果兩個矩陣中的相同位置存在0,則這是真正的負數。如果原始矩陣上有1,同一位置上有第二個矩陣上的0,則這是一個假陰性,如果原始矩陣中有0,同一位置上有第二個矩陣,則這是假陽性。 – Jetnor 2011-03-28 20:02:02

+0

所以你只想計算兩個圖表之間有多少個節點不同?對不起,我錯過了你的問題的一部分,這讓我的回答對你來說毫無用處。你如何定義2個節點是相等的:它們是否需要具有相同的傳出邊,相同的傳入邊或兩個邊?你的意思是{true | false} {positive | negative}我真的不明白。你只是想說0101 == 0101 - > true,0111 == 0101 - > false? – TheMorph 2011-03-28 20:28:20