Algorithm 部分对称搜索算法
我试图用百分比来计算一个具体矩阵的对称性 计算对称性的“传统”方法是,我有一个大小为N×N的任意方阵M作为输入,如果M[I,j]=M[j,I]对于所有j,算法的输出必须为真(=对称)≠i、 否则就错了 如何充分处理百分比的计算?所以不仅仅是说对称还是不对称?也许数数时间j≠然后除以(i,j)的总量 那么f.e.如果我有以下矩阵: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“更对
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)如果您只是为了比较矩阵,那么只要每个矩阵都被视为相同的矩阵,您的方法是否重要?如果它们的大小相同,您可以简单地计算对称值。对于可变大小,计算对称值与总值。(对称/总百分比)如果您只是为了比较矩阵,那么只要每个矩阵都被视为相同的矩阵,您的方法是否重要?如果它们的大小相同,您可以简单地计算对称值。对于可变大小,计算对称值与总值(对称/总百分比)