首页 > 解决方案 > 搜索部分对称的算法

问题描述

我试图以百分比计算具体矩阵的对称程度。

计算对称性的“传统”方法是我有一个大小为 N×N 的任意方阵 M 作为输入,并且如果 M[i,j] = M[j,i ] 对于所有 j≠i,否则为假。

如何适当处理计算百分比?所以不只是说对称或不对称?也许计算时间 j≠i 并将其除以 (i,j) 的总量?

所以如果我有以下矩阵:

    1 1 1        1 1 1 
A = 2 2 2    B = 2 2 2
    1 1 2        3 4 5

那么我需要知道A比B“更对称”,即使两者都不是对称的。

标签: algorithmmatrixsymmetric

解决方案


您应该首先定义每个单元的对称距离度量。如果对称单元相同,则该值应为零,否则应为零。

例如:

s(i,j):= (m(i,j)==m(j,i) ? 0:1) // returns 0/1 if the symmetric cell is/isn't the same

或者

s(i,j):= |m(i,j)-m(j,i)| // returns the absolute difference between the two cells

然后将所有单元格的距离相加:

int SymmetricDistance(matrix){
  for (int i=0; i<matrix.Width; i++)
    for (int j=i; j<matrix.Width; j++) // check if th matrix is square first
      dist = dist + s(i,j);
  return dist;
}

现在你可以说矩阵 A 比矩阵 B “更对称”

SymmetricDistance(A) < SymmetricDistance(B)

推荐阅读