【问题标题】:how to compare similarity between two Multi Dimensional Arrays in Java如何比较Java中两个多维数组之间的相似性
【发布时间】:2011-03-27 10:23:37
【问题描述】:

我制作了一个构建 3 个图形(弧和节点)的程序。 这些图是基于 1 和 0 的二维数组构建的。 第一个图是理想图,其他两个将与之进行比较。如果有一种方法可以比较两个图之间的相似性,即图 2 中有多少顶点与图 1 中的顶点相似,我一直在徘徊。

替代问题: 这些图是基于 1 和 0 的二维数组构建的,所以如果有办法将图 1 的二维数组与图 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 中的节点相同。

谢谢, 杰诺里。

【问题讨论】:

  • 你能提供一些示例数据吗?指数之间有什么关系?
  • @Mathew Cox 嗨,Mathew。假设我有两个 1 和 0 的二维数组。我可以从中绘制图形,如果变量 A 和 B 之间的交点为 1,则想象一个具有 1 和 0 的正方形,然后画一条线。我已经发布了两个数组。第一个是绘制原始图形的矩阵。原始图的第一个节点连接到所有其他 3 个节点。第二张图是混合的。希望我能帮助澄清一下。双 [][] 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};跨度>

标签: graph compare similarity multidimensional-array


【解决方案1】:

希望我没听错。你有一个图,你的数组 MatrixOfOriginalGraph 将是以下邻接矩阵的表示:

1111
0100
0010
0001

相似性是由相似的连接定义的?

也许一个好的起点可能是节点对之间的Hamming distance,每个节点都来自一个图表?

所以

double [][] MatrixOfOriginalGraph= {{1,1,1,1}, {0,1,0,0}, {0,0,1,0}, {0,0,0,1} };
双 [][] 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

距离越小,节点越相似。然后,您可以总结所有节点的汉明距离(实际上您可以计算整个 1 和 0 序列的距离)或计算均值和偏差等,具体取决于您需要什么或如何定义相似性。

【讨论】:

  • @TheMorph 是的,我相信这就是我想要的,但仍然有点不确定如何实现它。矩阵的大小相同,均为 19x19。它们用 1 和 0 填充。我的问题的相似性是这样定义的。如果两个矩阵的同一位置为 1,则为真阳性,如果两个矩阵的同一位置为 0,则为真阴性。如果相同位置的原始矩阵有 1,第二个矩阵有 0,则为假阴性;如果相同位置的原始矩阵中有 0,第二个矩阵中有 1,则为假阳性。跨度>
  • 所以你只想计算两个图之间有多少节点不同?抱歉,我错过了您问题的那一部分,我认为这使我的回答对您毫无用处。您如何定义 2 个节点相等:它们是否需要具有相同的传出边、相同的传入边或两者? {true|false}{positive|negative} 是什么意思,我不太明白。你只想说 0101 == 0101 -> true, 0111 == 0101 -> false?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-12
相关资源
最近更新 更多