19
правок
Изменения
м
→Рекурсивный алгоритм: Псевдокод - формат
<code>
'''String ''' '''levensteinInstruction'''('''String ''' s1, '''String ''' s2){ '''if ''' ( s1.length() <= 1 || s2.length() <= 1 ) { Решаем тривиально, возвращаем редакционное предписание}
//Иначе:
'''String ''' s1l,s1r,s2l,s2r; '''if ''' ( s2.length() < s1.length() ){ s1l = s1.substring(0, s1.length() / 2); //<math>S_1^-</math> s1r = s1.substring(s1.length() / 2, s1.length()); //<math>S_1^+</math> '''int ''' [] d = '''calcD'''(s1l, s2); //Вычисляем последнюю строку матрицы D для <math>S_1^-</math> и <math>S_2</math> '''int ''' [] e = '''calcE'''(s1r, s2); //Вычисляем последнюю строку матрицы E для <math>S_1^+</math> и <math>S_2</math> '''int ''' k = 0; '''for ''' ('''int ''' i = 1; i <= s2.length(); i++) { '''if ''' (d[i] + e[s2.length() - i] < d[k] + e[s2.length() - k]) { k = i; } } s2l = s2.substring(0, k); s2r = s2.substring(k, s2.length()); } '''else {'''
//s1 - меньшая строка
s2l = s2.substring(0, s2.length() / 2); //<math>S_2^-</math> s2r = s2.substring(s2.length() / 2, s2.length()); //<math>S_2^+</math> '''int ''' [] d = '''calcD'''(s2l, s1); //Вычисляем последнюю строку матрицы D для <math>S_2^-</math> и <math>S_1</math> '''int ''' [] e = '''calcE'''(s2r, s1); //Вычисляем последнюю строку матрицы E для <math>S_2^+</math> и <math>S_1</math> '''int ''' k = 0; '''for ''' ('''int ''' i = 1; i <= s1.length(); i++) { '''if ''' (d[i] + e[s1.length() - i] < d[k] + e[s1.length() - k]) { k = i; } } s1l = s1.substring(0, k); s1r = s1.substring(k, s1.length()); } '''return ''' '''levensteinInstruction'''(s1l, s2l) + '''levensteinInstruction'''(s1r, s2r);
}