Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Diff. Помощь с алгоритмом. 
:(
    Опции темы
dixoNICH
Дата 27.2.2014, 22:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 222
Регистрация: 20.3.2011

Репутация: нет
Всего: нет



Добрый день! Подскажите, пожалуйста алгоритм. Пишу небольшую утилиту типа diff.

Дано: две строки.
Например
'svalebra' - строка ДО изменений
'olarlabvalekakara' - строка ПОСЛЕ изменений

Находим максимальную общую подпоследовательность. Она будет такой:
valera

А теперь вопрос: как мне показать, какой символ в новой строке добавился, а какой символ из старой строки удалился?

У меня есть индексы для каждой строки, по которым лежит подпоследовательность.

для старой строки
[ 1, 2, 3, 4, 6, 7 ]
для новой строки
[ 7, 8, 9, 10, 15, 16 ]

Прошу Вашей помощи!)
PM MAIL   Вверх
Akina
Дата 28.2.2014, 09:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 20
Всего: 454



Цитата(dixoNICH @  27.2.2014,  23:05 Найти цитируемый пост)
как мне показать, какой символ в новой строке добавился, а какой символ из старой строки удалился?

Выделить цветом... не?


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
Агрох
Дата 28.2.2014, 10:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 176
Регистрация: 6.4.2013
Где: Москва

Репутация: нет
Всего: 6



Akina, думаю всё сложнее. Человеку нужен алгоритм, как найти эти символы.
--------------------
Putin here, Putin there, Putin almost everywhere!
PM MAIL   Вверх
Akina
Дата 28.2.2014, 10:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 20
Всего: 454



Агрох, судя по тексту, нахождение проблемы не составляет (стандартный алгоритм поиска наибольшей общей подстроки, фигня...). Также, судя по всему, ему нужно чистое совпадение подстроки и показ отличий, а не редакционное предписание.


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
Агрох
Дата 28.2.2014, 12:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 176
Регистрация: 6.4.2013
Где: Москва

Репутация: нет
Всего: 6



Просто предположил. Странно, что в ветке про алгоритмы такая тема находится. Тем более, что решение это 
Цитата(Akina @  28.2.2014,  10:22 Найти цитируемый пост)
Выделить цветом... не? 


--------------------
Putin here, Putin there, Putin almost everywhere!
PM MAIL   Вверх
dixoNICH
Дата 28.2.2014, 12:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 222
Регистрация: 20.3.2011

Репутация: нет
Всего: нет



Я умею находить наибольшую общую последовательность, я это написал.

Суть в том, что удалилась, а что добавилось.
'svalebra' - строка ДО изменений
'olarlabvalekakara' - строка ПОСЛЕ изменений
s-
o+
или s изменилось на o?
b-
larlab+
или larla+?

kaka+

в общем, вопрос в том, как теперь найти изменения, если нашли измененную часть.
PM MAIL   Вверх
Akina
Дата 28.2.2014, 12:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 20
Всего: 454



RTFM:

Расстояние Левенштейна
Редакционное Предписание


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
dixoNICH
Дата 28.2.2014, 20:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 222
Регистрация: 20.3.2011

Репутация: нет
Всего: нет



Я правильно понимаю, что я должен посчитать макс. подпоследовательность

'svalebra' до
'olarlabvalekakara' после
получить valera

удалить её из строк, получить
sb
olarlabkaka
и для этого построить редакционное предписание?

или я должен построить редакционное предписание для исходных строк

получить что-то вроде такого
rrmrrmrmiiiiiiiiiii
svalebra
olarlabvalekakara

убрать подпоследовательность не сдвигая элементы и получить то, что надо?

Это сообщение отредактировал(а) dixoNICH - 28.2.2014, 20:18
PM MAIL   Вверх
dixoNICH
Дата 1.3.2014, 22:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 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, но, специфических конструкций не используется, так что думал не сложно будет
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Алгоритмы"

maxim1000

Форум "Алгоритмы" предназначен для обсуждения вопросов, связанных только с алгоритмами и структурами данных, без привязки к конкретному языку программирования и/или программному продукту.


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, maxim1000.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Алгоритмы | Следующая тема »


 




[ Время генерации скрипта: 0.0479 ]   [ Использовано запросов: 20 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.