Реализации алгоритмов/Расстояние Левенштейна: различия между версиями

Содержимое удалено Содержимое добавлено
Строка 99:
* @param {string} s1 Исходная строка
* @param {string} s2 Сравниваемая строка
* @param {object} [costs] Веса операций { [replace], [case], [insert], [delete] }
* @param {number} [cr] Вес замены
* @param {number} [ci] Вес вставки
* @param {number} [cd] Вес удаления
* @return {number} Расстояние Левенштейна
*/
function levenshtein(s1, s2, cr, ci, cdcosts) {
var i, j, l1, l2, flip, ch, chl, ii, ii2, cost, cutHalf;
l1 = s1.length;
l2 = s2.length;
 
crcosts = crcosts || 1{};
civar cr = cicosts.replace || 1;
cdvar cri = cdcosts.case || costs.replace || 1;
var ci = costs.insert || 1;
var cd = costs.delete || 1;
 
cutHalf = flip = Math.max(l1, l2);
 
Строка 126:
for (i = 0; i < l1; ++i, flip = cutHalf - flip) {
ch = s1[i];
chl = ch.toLocaleString();
 
buf[flip] = (i + 1) * minI;
Строка 133 ⟶ 134 :
 
for (j = 0; j < l2; ++j, ++ii, ++ii2) {
buf[ii + 1]cost = Math.min(buf[ii2ch +=== 1] + cd, bufs2[iij] +? ci,0 buf[ii2] + cr *: (chchl !=== s2[j].toLowerCase()) ? cri : cr);
buf[ii + 1] = Math.min(buf[ii2 + 1] + cd, buf[ii] + ci, buf[ii2] + cost);
}
}