2011-03-27 274 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