代码之家  ›  专栏  ›  技术社区  ›  lydiaP

局部对称搜索算法

  •  1
  • lydiaP  · 技术社区  · 6 年前

    我试图用百分比来计算具体矩阵的对称性。

    计算对称性的“传统”方法是输入一个大小为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“更对称”,即使两者都是 对称的.

    2 回复  |  直到 6 年前
        1
  •  1
  •   Eryl Kenner    6 年前

    我同意@sten petrov的回答。但是,如果您正在寻找 百分比 特别是对称性:

    首先,找出在 新西兰 矩阵。

    你可以通过沿对角线分割矩阵并计算元素的数量来找到这个问题。自加入以来 n 将对的总数增加 n ,查找总数对的一般规则是将数字从1到n求和。但是,不要循环,只使用和公式:

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

    矩阵完全对称 敌我识别 所有的对都是对称的。因此,对称性的百分比可以定义为对称对与总可能对的分数。

    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 ;
    
        2
  •  3
  •   Sten Petrov    6 年前

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

    例如:

    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)
    
    推荐文章