отредактировать решение расстояния с O (n) пробелом

Нашел несколько разных решений и отладок, и особенно заинтересовал нижеприведенное решение, которое требует только O (n) пространства, кроме хранения матрицы (M * N). Но запутался в том, что является логическим значением cur [i]. Если у кого-то есть какие-либо комментарии, это будет высоко оценено.

Я разместил решение и код.

Given two words word1 and word2, find the minimum number of steps required to convert word1 to word2. (each operation is counted as 1 step.)

You have the following 3 operations permitted on a word:

a) Insert a character
b) Delete a character
c) Replace a character

class Solution {
public:
int minDistance(string word1, string word2) {
int m = word1.length(), n = word2.length();
vector<int> cur(m + 1, 0);
for (int i = 1; i <= m; i++)
cur[i] = i;
for (int j = 1; j <= n; j++) {
int pre = cur[0];
cur[0] = j;
for (int i = 1; i <= m; i++) {
int temp = cur[i];
if (word1[i - 1] == word2[j - 1])
cur[i] = pre;
else cur[i] = min(pre + 1, min(cur[i] + 1, cur[i - 1] + 1));
pre = temp;
}
}
return cur[m];
}
};

0

Решение

Вы можете думать о cur как сочетание предыдущей строки и текущей строки в матрице редактирования расстояния. Например, представьте матрицу 3х3 в исходном алгоритме. Я обозначу каждую позицию, как показано ниже:

1 2 3
4 5 6
7 8 9

В цикле, если вы вычисляете позицию 6вам нужны только значения из 2, 3 а также 5, В таком случае, cur будут точно значения из:

4 5 3

Увидеть 3 в конце? Это потому, что мы еще не обновили его, поэтому он по-прежнему имеет значение из первой строки. Из предыдущей итерации мы имеем pre = 2потому что он был сохранен до того, как мы вычислили значение в 5.

Тогда новое значение для последней ячейки является минимумом pre = 2, cur[i-1] = 5 а также cur[i] = 3Точно значения, упомянутые ранее.

РЕДАКТИРОВАТЬ: завершение аналогии, если в версии O (n ^ 2) вы вычисляете min(M[i-1][j-1], M[i][j-1], M[i-1][j])в этой версии O (n) вы будете вычислять min(pre, cur[i-1], cur[i])соответственно.

1

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector