Algorithm 部分对称搜索算法

Algorithm 部分对称搜索算法,algorithm,matrix,symmetric,Algorithm,Matrix,Symmetric,我试图用百分比来计算一个具体矩阵的对称性 计算对称性的“传统”方法是,我有一个大小为N×N的任意方阵M作为输入,如果M[I,j]=M[j,I]对于所有j,算法的输出必须为真(=对称)≠i、 否则就错了 如何充分处理百分比的计算?所以不仅仅是说对称还是不对称?也许数数时间j≠然后除以(i,j)的总量 那么f.e.如果我有以下矩阵: 1 1 1 1 1 1 A = 2 2 2 B = 2 2 2 1 1 2 3 4 5 然后我需要知道A比B“更对

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

计算对称性的“传统”方法是,我有一个大小为N×N的任意方阵M作为输入,如果M[I,j]=M[j,I]对于所有j,算法的输出必须为真(=对称)≠i、 否则就错了

如何充分处理百分比的计算?所以不仅仅是说对称还是不对称?也许数数时间j≠然后除以(i,j)的总量

那么f.e.如果我有以下矩阵:

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

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

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

例如:

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

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

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;
}
int对称距离(矩阵){

对于(int i=0;i您应该首先定义每个单元格的对称距离度量。如果对称单元格相同,则为零;如果对称单元格不相同,则为其他数字

例如:

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

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

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;
}
int对称距离(矩阵){
对于(int i=0;i我大体上同意@Sten Petrov的答案。但是,如果你特别寻找对称性的百分比

首先,找出NxN矩阵中可能对称的元素对总数。

您可以通过沿对角线拆分矩阵并计算元素的数量来找到这一点。由于将1添加到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 ;
int matchingPairs=0;
int N=矩阵宽度;
int-possiblePairs=N*(N+1)/2;
对于(int i=0;i百分比,具体来说:

首先,找出NxN矩阵中可能对称的元素对总数。

您可以通过沿对角线拆分矩阵并计算元素的数量来找到这一点。由于将1添加到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 ;
int matchingPairs=0;
int N=矩阵宽度;
int-possiblePairs=N*(N+1)/2;
对于(int i=0;i对于(int j=0;j)如果您只是为了比较矩阵,那么只要每个矩阵都被视为相同的矩阵,您的方法是否重要?如果它们的大小相同,您可以简单地计算对称值。对于可变大小,计算对称值与总值。(对称/总百分比)如果您只是为了比较矩阵,那么只要每个矩阵都被视为相同的矩阵,您的方法是否重要?如果它们的大小相同,您可以简单地计算对称值。对于可变大小,计算对称值与总值(对称/总百分比)