有没有办法定量计算两个排列之间的距离?
假设我们有以下两个元素序列:
$('#msg').html(html);
我可以说排列A = {0, 1, 2, 3}
B = {0, 3, 2, 1}
与B
不同,因为:
A
转换为B
A
中有 2 个元素,其B
还有其他方法来比较和描述这两者之间的差异吗?
主要目标是定义一种能够接近第二个排列A
到第一个B
的算法,这样如果应用此过程的所有步骤,结果将是排列A
本身。
但为了达到这个目的,我认为最好先定义一个明智的程序来描述A
与B
的差异。
是否有任何已知的算法允许对另一个进行置换?
答案 0 :(得分:3)
有几种不同的方法可以定义两个序列之间的差异。仅举几例:
Hamming distance :元素不同的位置数。
levenshtein(A, B)
replace B[1] with A[1] and replace B[3] with A[3]
=> 2
Levenshtein distance :从一个序列到另一个序列所需的最小修改次数。
damerau_levenshtein(A, B)
transpose B[3] with B[1]
=> 1
Damerau–Levenshtein distance :前者的扩展,考虑了换位。
//---routing.js----------------------------------
(function () {
'use strict';
angular
.module('appModule')
.config(['$routeProvider', routing]);
function routing ($routeProvider) {
$routeProvider
.when('/page1', {
url: "/page1",
templateUrl: 'views/page1.html',
controller: 'Page1Ctrl'
})
.when('/page2', {
url: "/page2",
templateUrl: 'views/page2.html',
controller: 'Page2Ctrl'
})
}
})();
//---menuToggle.js----------------------------------
(function () {
'use strict';
angular.module('appModule')
.factory('TogglerFactory', function($rootScope) {
var TogglerFactory = {};
TogglerFactory.menuToggle = function(){
$rootScope.clicked = !$rootScope.clicked;
}
return TogglerFactory;
});
}());
//---page1Ctrl.js----------------------------------
(function () {
'use strict';
angular
.module('appModule')
.controller('Page1Ctrl', ['TogglerFactory', page1Ctrl]);
function page1Ctrl(Toggler) {
Toggler.menuToggle();
}
})();
根据您给出的示例,您有兴趣跟踪换位,因此Damerau-Levenshtein距离是您最好的选择。
答案 1 :(得分:1)