mirror of
https://github.com/galaxyproject/galaxy.git
synced 2026-09-24 16:30:27 +08:00
61 lines
2.4 KiB
JavaScript
61 lines
2.4 KiB
JavaScript
define([
|
|
], function(){
|
|
//=============================================================================
|
|
/**
|
|
(Imported for edit distance algorith. From: https://gist.github.com/andrei-m/982927)
|
|
Copyright (c) 2011 Andrei Mackenzie
|
|
|
|
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated
|
|
documentation files (the "Software"), to deal in the Software without restriction, including without limitation the
|
|
rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit
|
|
persons to whom the Software is furnished to do so, subject to the following conditions:
|
|
|
|
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the
|
|
Software.
|
|
|
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
|
|
WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
|
|
COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
|
|
OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
*/
|
|
// Compute the edit distance between the two given strings
|
|
//exports.getEditDistance = function(a, b){
|
|
function levenshteinDistance(a, b){
|
|
if(a.length === 0){ return b.length; }
|
|
if(b.length === 0){ return a.length; }
|
|
|
|
var matrix = [];
|
|
|
|
// increment along the first column of each row
|
|
var i;
|
|
for(i = 0; i <= b.length; i++){
|
|
matrix[i] = [i];
|
|
}
|
|
|
|
// increment each column in the first row
|
|
var j;
|
|
for(j = 0; j <= a.length; j++){
|
|
matrix[0][j] = j;
|
|
}
|
|
|
|
// Fill in the rest of the matrix
|
|
for(i = 1; i <= b.length; i++){
|
|
for(j = 1; j <= a.length; j++){
|
|
if(b.charAt(i-1) === a.charAt(j-1)){
|
|
matrix[i][j] = matrix[i-1][j-1];
|
|
} else {
|
|
matrix[i][j] = Math.min(matrix[i-1][j-1] + 1, // substitution
|
|
Math.min(matrix[i][j-1] + 1, // insertion
|
|
matrix[i-1][j] + 1)); // deletion
|
|
}
|
|
}
|
|
}
|
|
|
|
//console.debug( '\t\t levenshteinDistance', a, b, matrix[b.length][a.length] );
|
|
return matrix[b.length][a.length];
|
|
}
|
|
|
|
//=============================================================================
|
|
return levenshteinDistance;
|
|
});
|