我尝试了许多不同的算法,但是找不到合适的算法。

所以基本上我会有一个矩阵

1 0 1 | 4
7 0 1 | 9
1 1 3 | 3


我想对它进行排序,使其最类似于单位矩阵

1 0 0
0 1 0
0 0 1


因此,对于先前的矩阵,它将返回

1 0 1 | 4
1 1 3 | 3
7 0 1 | 9


谁能告诉我排序功能,最好是用javascript做到这一点?

这就是我到目前为止

matrix.sort(function(a,b) {
      if (b.indexOf(1)!=-1) {
          var index =  a.indexOf(1)-b.indexOf(1)
          if (index!==0) return index
              else {
                  return b.indexOf(0) - a.indexOf(0)
              }
      }
      else {
          return 0
      }
})


其他一些例子

3  1 -2 | 2
1 -2  1 | 3
2 -1 -3 | 3


会变成

1 -2  1 | 3
3  1 -2 | 2
2 -1 -3 | 3




 3  1 -2 | -7
 2  2  1 |  9
-1 -1  3 |  6


会变成

-1 -1  3 |  6
 3  1 -2 | -7
 2  2  1 |  9

最佳答案

这与String Metrics非常相似。换句话说,您的算法应以字符串度量/距离算法(例如Levenshtein Distance)为模型。

基本上,您的算法需要定义如何对相似度进行排名。
通常使用“位移”和“匹配”点来完成。

接近100-010还是000?

您应该决定如何对相似度进行排名,然后找到排名最高的集合。

10-07 21:13