![]() |
|
|
![]()
|
|
| dixoNICH |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 222 Регистрация: 20.3.2011 Репутация: нет Всего: нет |
Добрый день! Подскажите, пожалуйста алгоритм. Пишу небольшую утилиту типа diff.
Дано: две строки. Например 'svalebra' - строка ДО изменений 'olarlabvalekakara' - строка ПОСЛЕ изменений Находим максимальную общую подпоследовательность. Она будет такой: valera А теперь вопрос: как мне показать, какой символ в новой строке добавился, а какой символ из старой строки удалился? У меня есть индексы для каждой строки, по которым лежит подпоследовательность. для старой строки [ 1, 2, 3, 4, 6, 7 ] для новой строки [ 7, 8, 9, 10, 15, 16 ] Прошу Вашей помощи!) |
|||
|
||||
| Akina |
|
|||
|
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20581 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 20 Всего: 454 |
Выделить цветом... не? -------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
|||
|
||||
| Агрох |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 176 Регистрация: 6.4.2013 Где: Москва Репутация: нет Всего: 6 |
Akina, думаю всё сложнее. Человеку нужен алгоритм, как найти эти символы.
--------------------
Putin here, Putin there, Putin almost everywhere! |
|||
|
||||
| Akina |
|
|||
|
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20581 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 20 Всего: 454 |
Агрох, судя по тексту, нахождение проблемы не составляет (стандартный алгоритм поиска наибольшей общей подстроки, фигня...). Также, судя по всему, ему нужно чистое совпадение подстроки и показ отличий, а не редакционное предписание.
-------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
|||
|
||||
| Агрох |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 176 Регистрация: 6.4.2013 Где: Москва Репутация: нет Всего: 6 |
Просто предположил. Странно, что в ветке про алгоритмы такая тема находится. Тем более, что решение это
--------------------
Putin here, Putin there, Putin almost everywhere! |
|||
|
||||
| dixoNICH |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 222 Регистрация: 20.3.2011 Репутация: нет Всего: нет |
Я умею находить наибольшую общую последовательность, я это написал.
Суть в том, что удалилась, а что добавилось. 'svalebra' - строка ДО изменений 'olarlabvalekakara' - строка ПОСЛЕ изменений s- o+ или s изменилось на o? b- larlab+ или larla+? kaka+ в общем, вопрос в том, как теперь найти изменения, если нашли измененную часть. |
|||
|
||||
| Akina |
|
|||
|
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20581 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 20 Всего: 454 |
RTFM:
Расстояние Левенштейна Редакционное Предписание -------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
|||
|
||||
| dixoNICH |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 222 Регистрация: 20.3.2011 Репутация: нет Всего: нет |
Я правильно понимаю, что я должен посчитать макс. подпоследовательность
'svalebra' до 'olarlabvalekakara' после получить valera удалить её из строк, получить sb olarlabkaka и для этого построить редакционное предписание? или я должен построить редакционное предписание для исходных строк получить что-то вроде такого rrmrrmrmiiiiiiiiiii svalebra olarlabvalekakara убрать подпоследовательность не сдвигая элементы и получить то, что надо? Это сообщение отредактировал(а) dixoNICH - 28.2.2014, 20:18 |
|||
|
||||
| dixoNICH |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 222 Регистрация: 20.3.2011 Репутация: нет Всего: нет |
Немного не получается найти diff, всё же.
http://pastie.org/8815415 - тут код Расстояние Левенштейна находит правильно, но вот проблемы с восстановлением предписания. Для строк Работает вот так var FIRST = 'Belko' var SECOND = 'He234aapap' { e: 'REPLACE', s2: undefined, s1: undefined } { e: 'REPLACE', s2: 'p', s1: 'o' } { e: 'REPLACE', s2: 'a', s1: 'k' } { e: 'ERASE', s2: 'p', s1: 'l' } { e: 'ERASE', s2: 'a', s1: 'l' } { e: 'ERASE', s2: 'a', s1: 'l' } { e: 'ERASE', s2: '4', s1: 'l' } { e: 'ERASE', s2: '3', s1: 'l' } { e: 'EQUALS', s2: '2', s1: 'l' } { e: 'REPLACE', s2: 'e', s1: 'e' } Не могу найти ошибку. Помогите, пожалуйста. Код написан на JS, но, специфических конструкций не используется, так что думал не сложно будет |
|||
|
||||
![]()
|
| Правила форума "Алгоритмы" | |
|
|
Форум "Алгоритмы" предназначен для обсуждения вопросов, связанных только с алгоритмами и структурами данных, без привязки к конкретному языку программирования и/или программному продукту.
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, maxim1000. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Алгоритмы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |