搜索部分对称算法

时间:2018-08-07 18:15:47

标签: algorithm matrix symmetric

我正在尝试以百分比形式计算具体矩阵的对称性。

计算对称性的“传统”方式将是,我输入任意大小为N×N的方阵M作为输入,并且如果M [i,j] = M [,则算法的输出必须为真(=对称)。 j,i]对于所有j≠i,否则为false。

如何适当地计算百分比?因此,不只是说对称还是不对称?也许计数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“更对称”,即使两者都是对称。

2 个答案:

答案 0 :(得分:3)

您应该首先定义每个单元格的对称距离度量。如果对称像元相同,则应为零;否则,则为其他数字。

例如:

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)

答案 1 :(得分:1)

我总体上同意@Sten Petrov的回答。但是,如果您要寻找对称的百分比

首先,找到在 NxN 矩阵中可以对称的元素对的总数。

您可以通过沿对角线拆分矩阵并计算元素数来找到此值。由于将 1 添加到 N 会使对总数增加 N ,因此查找总对的一般规则是对1中的数字求和到N。但是,不是循环,而是使用sum公式:

Total Possible = N * (N + 1) / 2

矩阵是完全对称的 iff 所有对都是对称的。因此,对称性百分比可以定义为对称对占总可能对的比例。

Symmetry = Symmetric Pairs / Total Pairs

伪代码:

int matchingPairs= 0;
int N = matrix.Width;
int possiblePairs = N * (N + 1 ) / 2;

for(int i = 0; i < N; ++i){
    for(int j = 0; j <= i; ++j){
        matchingPairs += (matrix[i][j] == matrix[j][i]) ? 1 : 0;
    }
}

float percentSymmetric = matchingPairs / possiblePairs ;