Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Прочее";
Текущий архив: 2010.03.07;
Скачать: [xml.tar.bz2];

Вниз

Помогите с алгоритмом   Найти похожие ветки 

 
ford ©   (2009-12-23 22:08) [0]

Всем доброго времени суток!
Подскажите, как сделать такую задачу, не могу точно сформулировать, но
например дано две строки
1. "наша мама мыла раму"
2. "любая мама иногда моет раму весной"
надо сделать из этих строк такие
1. "наша 1 мыла 2"
2. "любая 1 иногда моет 2 весной"
причем естественно за ранее неизвестно какие из слов в этих строках будут повторяться

т.е. что то похожее на алгоритм сжатия
но вот не знаю с какой стороны подступиться ....


 
TUser ©   (2009-12-23 22:21) [1]

поиск общих подстрок называется


 
KilkennyCat ©   (2009-12-23 22:24) [2]

replace


 
TUser ©   (2009-12-23 22:26) [3]

Вообщем, примерно так

var CommonSubStrLength: array[1..len(Str1),len(Str2)] of integer;
begin
 for all matrix element  do it := 0;
 for every i do CommonSubStrLength[1,i] := 1 if Str1[i] = Str2[1] or 0 overwise;
 similar for CommonSubStrLength[i,1];
 for every other
   if Str1[i] = Str2[j] then
     CommonSubStrLength[i,j] := CommonSubStrLength[i-1,j-1]
     else CommonSubStrLength[i,j] := 0;
 get values larger than a thresold - it is your words
 replace them in Str1 and Str2;
end


 
KilkennyCat ©   (2009-12-23 22:28) [4]

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


 
ford ©   (2009-12-23 22:53) [5]

>>KilkennyCat ©   (23.12.09 22:28) [4]

о, спасиба :)
что то вырисовывается


 
KilkennyCat ©   (2009-12-23 22:58) [6]

я так кладр оптимизировал. а потом еще по корням оптимизировал. до 1,5 мегабайт из 70 первоначальных дооптимизировал и запарился разбирать потом :)


 
ford ©   (2009-12-23 22:58) [7]

млин..... а вот какже
если
"мама мыла красную раму"
"мама мыла зеленую раму"
если идти по словам то получиться
"1 2 красную 3"
"1 2 зеленую 3"

а хотелось бы
"1 красную 2"
и "1 зеленую 2"
соответсвенно где 1="мама мыла" и 2="раму"

надо тогда делать все возможные комбинации сочетаний из первой строки .... получается так?


 
Petr V. Abramov ©   (2009-12-23 23:03) [8]


> причем естественно за ранее неизвестно какие из слов в этих
> строках будут повторяться

вот тут и  ступор.
а "такую фигню" ближе к концу семестра читают, когда все просто кажется.
почему? не знаю?
правильно? не знаю.


 
ford ©   (2009-12-23 23:05) [9]

торможу :)
получается примерно такой алгоритм
1. берем слово и строки 1
2. проверяем есть ли оно в строке 2
3 если есть то добавляем к выбраному слову второе по порядку из строки 1 и вертаемся в п.2
4. если нет, то. сохраняем его в и присваиваем ему код, заменяем в строке 1 и строке 2 все что нашли на код.
5. если не конец строк 1 то переход к п.1

как думаете нормально будет?


 
KilkennyCat ©   (2009-12-23 23:22) [10]

для двух строк что угодно нормально. для более чем двух не что угодно...

а с комбинациями, в общем случае, сжатие будет хуже.
словарь рискует вырасти, либо придется делать словарь словаря.


 
Ega23 ©   (2009-12-23 23:44) [11]

мама мыла красную раму
мама мыла зелёную раму
мама помыла сферическую раму в вакууме


из всех строк создаём словарь с индексацией.
Получается
1 - мама
2 - мыла
3 - красную
4 - раму
5 - зелёную
6 - помыла
7 - сферическую
8 - в
9 - вакууме


таким образом имеем следующие наборы индексов:
1234
1254
167489


ну а дальше тупым перебором ищи общие комбинации.
Я бы как-то так делал.


 
ford ©   (2009-12-24 00:43) [12]

Ega23 ©   (23.12.09 23:44) [11]

да, наверное так будет лучше всего
:)



Страницы: 1 вся ветка

Форум: "Прочее";
Текущий архив: 2010.03.07;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.47 MB
Время: 0.006 c
6-1213405371
antoxa2005
2008-06-14 05:02
2010.03.07
Подскажите, а как добавить вложение к письму стандарного mail аге


1-1220526665
evgenij
2008-09-04 15:11
2010.03.07
узнать запущена моя программа или нет


2-1262601063
dragon3232
2010-01-04 13:31
2010.03.07
помогите с заданием


2-1262284745
Zimmin
2009-12-31 21:39
2010.03.07
Как упростить ввод повторяющихся записей? ADO+Access


3-1235022074
Программер
2009-02-19 08:41
2010.03.07
5 миллионов записей





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский