Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Сравнение структурированных данных 
V
    Опции темы
aggressorus
  Дата 10.12.2008, 16:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Привет,

Нужны советы по решению одной извращенной задачи.

Есть два CSV файла например:

a,d
b,e
c,f

и

a b c,d e f

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

a,d b,e c,f
a b c,d e f

LCS:

a,b,e f

Хотя если расматривать как таблички:

a,d
b,e
c,f

и

a d
b e
c, f

то строки получаются равные, 3 строки объеденные в одну. Но не понятно как преобразовать строки, в каждом документе кол. колонок разное. Бьюсь 3 неделю, помогите с алгоритмом.






PM MAIL   Вверх
Earnest
Дата 10.12.2008, 19:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5962
Регистрация: 17.6.2005
Где: Рязань

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



Не пойму задачу. Проблема запятые убрать, что ли?
И что такое "стандартный алгоритм LCS"? 


--------------------
...
PM   Вверх
aggressorus
Дата 10.12.2008, 19:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Earnest,

Сорри, буду писать немного подробней. LCS (Наибольшая общая подпоследовательность), использовал стандартный метод динамического программирования. Проблема состоит в следующем: нужен правильный алгоритм "устранения запятых", для получения правильной последовательности данных, или поиска общей подпоследовательности в данных, которые имеют структуру.

Например данные

a,с
b,d

и

a b, c d 

Если представить как две строки получаем:
a,с b,d
a b, c d 

Буквы с b меняются местами. Другой пример:

a,с b
b,d

и

a b, c d 

a,с b b,d
a b, c d 

Общая подпоследовательность
a,b d

Хотя она должна включать все символы кроме второй b.

Просто данные имеют структуру таблицы, более нормальное представление:

a | с 
   | b
------
b | d

и

a  | c
b  | d 

Таким образом символы читаются в последовательности: колонка, следующая колонка, следующая строка и т. д 
Получается а, с b, b, d
и a b, c d

И тут сама задача или модифицировать матрицу ДП, с учётом разбиения колонок на строки, или как то читать данные.



Это сообщение отредактировал(а) aggressorus - 10.12.2008, 19:24
PM MAIL   Вверх
SoWa
Дата 10.12.2008, 19:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Харекришна
****


Профиль
Группа: Комодератор
Сообщений: 2422
Регистрация: 18.10.2004

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



Сломал мозг.
Дай пожалуйста четкий критерий "правильности" устранения запятых. Потом будем решать задачу.


--------------------
Всем добра smile
PM MAIL ICQ   Вверх
aggressorus
Дата 10.12.2008, 19:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



SoWa, 

разбить/объединить колонки/строки, для получения максимально общей подстроки.

Тот же пример:

a | с 
   | b
------
b | d

и

a  | c
b  | d 

Если разбить колонки на строки:
a  | c
-------
b  | d

Получим общую последовательность a, c, b, d.  

Я сам сломал мозг пока думал критерии. Сказали вот данные покажи нам разницу!

Добавлено через 5 минут и 49 секунд
Просто проблема в том что визуально разницы между данными нету, а вот при чтении получается есть.
PM MAIL   Вверх
SoWa
Дата 10.12.2008, 21:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Харекришна
****


Профиль
Группа: Комодератор
Сообщений: 2422
Регистрация: 18.10.2004

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



Так. Худо бедно стало понятнее, но все-же, возможно предложу нужное, а мб не то
Смотри. Любая таблица состоит из строк(даж единичной длинны), поставленых в колонки.
Самое простое- выставлять в одну строку все строчки таблицы.

Кстати, если можешь- нарисуй таблицы на бумажке, отскань и выложи smile Так будет проще понять тебя


--------------------
Всем добра smile
PM MAIL ICQ   Вверх
ksnk
Дата 10.12.2008, 21:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6855
Регистрация: 13.4.2007
Где: СПб

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



Цитата

 использовал стандартный метод динамического программирования
, Мы тут все тупые  и ленивые  тормоза.... Пожалуйста! Нужны полные определения, кто, какие...  Определения, блин!!!. Желательно со ссылками... Правильные запятые, правильные подпоследовательности, ... зона, блин... без правильного правила залетишь неподеццки...


--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
aggressorus
Дата 10.12.2008, 21:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



SoWa, 
Спасибо, завтра выложу всё что имею по теме smile

Добавлено через 51 секунду
ksnk, 
Уже понял, исправлюсь. 
PM MAIL   Вверх
SoWa
Дата 10.12.2008, 22:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Харекришна
****


Профиль
Группа: Комодератор
Сообщений: 2422
Регистрация: 18.10.2004

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



Цитата(ksnk @  10.12.2008,  21:27 Найти цитируемый пост)
, Мы тут все тупые  и ленивые  тормоза.... Пожалуйста! Нужны полные определения, кто, какие...


Цитата(aggressorus @  10.12.2008,  19:20 Найти цитируемый пост)
LCS (Наибольшая общая подпоследовательность), использовал стандартный метод динамического программирования. 



ksnk, ты суров smile какая, собственно, разница, каким он будет методом сравнивать? Поставлена задача преобразовать таблицы до такого вида, чтобы к ним можно было применить данный алгоритм. Очевидно, что он используется для строк. Ищем метод приведения таблиц к строкам ^_^


--------------------
Всем добра smile
PM MAIL ICQ   Вверх
aggressorus
Дата 11.12.2008, 14:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Привет,

Вот накидал тестовые данные, в приложении pdf файл.

Сcылки:

LCS ( Longest Common Subsequence)

LCS 1
LCS 2

Edit Script 
 An O(ND) Difference Algorithm and Its Variations 



Присоединённый файл ( Кол-во скачиваний: 8 )
Присоединённый файл  task.pdf 46,92 Kb
PM MAIL   Вверх
ksnk
Дата 11.12.2008, 15:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6855
Регистрация: 13.4.2007
Где: СПб

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



Цитата

Мы тут все тупые  и ленивые  тормоза....
...
ksnk, ты суров 

Хм... Извиняюсь! Ну, за всех, конечно, не скажу, однако за себя - так и есть!  smile 



--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
SoWa
Дата 11.12.2008, 16:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Харекришна
****


Профиль
Группа: Комодератор
Сообщений: 2422
Регистрация: 18.10.2004

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



Ладно, проехали smile Вон нам выложили данные.

Смотри, что мне думается.
Пустые зоны все в пределах одного столбца убиваем обьединением в одну ячейку.
Допустим было
Код

пусто
пусто
текст
пусто

станет
Код

текст

Далее, все ячейки в обоих таблицах сдвигаем вверх, но при этом где-то запоминаем их настоящие координаты. Далее простым сравнением попарно определяем общие данные.
По рисункам вроде должно работать


--------------------
Всем добра smile
PM MAIL ICQ   Вверх
aggressorus
Дата 11.12.2008, 16:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата(SoWa @  11.12.2008,  16:25 Найти цитируемый пост)
Смотри, что мне думается.
Пустые зоны все в пределах одного столбца убиваем обьединением в одну ячейку.

С этим понятно. 


Цитата(SoWa @  11.12.2008,  16:25 Найти цитируемый пост)
Далее, все ячейки в обоих таблицах сдвигаем вверх, но при этом где-то запоминаем их настоящие координаты. Далее простым сравнением попарно определяем общие данные.
По рисункам вроде должно работать 

Тут немного не понял, не могли бы вы уточнить. С первыми 2мя столбцами должно сработать. А вот со столбцами Склад и Магазин, не сработает. Они должны быть объедены слева направо. Тогда всё получиться. Вот как определить, что с чем объединять? Были у меня две идеи как сравнить без преобразования таблиц.
1) Можно применить "жадные алгоритм". 

Код


1) Ищем наибольшую подстроку в таблицах.

2) Определяем колонку, строку.
  2.1) Разбиваем таблицы на под таблички, которые содержат строки и колонки до найденной последовательности и после.
3) Выполняем пункт 2, для каждой под таблички.



Так вроде будет работать стабильно, но оптимальность решения всегда будет под сомнением. 

Пробовал использовать алгоритм LIS (Longest Increasing Subsecuence)

Для каждого слова делаем список позиций, на которых это слово встречается в другой таблице. Применяем алгоритм LIS получаем наибольшую возрастающую последовательность, которая идентична наибольшей общей последовательности. Но я застрял с определением критериев больше, меньше для каждой позиции.

 

PM MAIL   Вверх
SoWa
Дата 11.12.2008, 17:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Харекришна
****


Профиль
Группа: Комодератор
Сообщений: 2422
Регистрация: 18.10.2004

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



Уф, уже сплю и плохо соображаю о твоих постах )
Что касается столбиков, где надо обьединять по горизонтали.
Ерунда. Просто включи в вышенаписаный мной метод такое уточнение- длинну ячейки.
Т.е. таблица 1 была
Код

|слово | слово|

А вторая:
Код

|слово            |

Итак получим, что обе ячейки будут "отображаться" в одну длинную.
черт, мб непонятно, да и сам слов подобрать не могу, но попробуй осилить: обе ячейки при поиске будут сравниваться с этой длинной ячейкой.


--------------------
Всем добра smile
PM MAIL ICQ   Вверх
aggressorus
Дата 11.12.2008, 17:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата(SoWa @  11.12.2008,  17:06 Найти цитируемый пост)
черт, мб непонятно, да и сам слов подобрать не могу, но попробуй осилить: обе ячейки при поиске будут сравниваться с этой длинной ячейкой. 

Осилил smile Просто размера колонки нету, это просто "," в данных. Буду думать как это закодить.
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Алгоритмы"

maxim1000

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


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

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


 




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


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

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