Поиск похожих строк
От: sch  
Дата: 24.12.05 13:16
Оценка:
Есть множество из N > 10^6 строк текста а так же функция distance(x,y), которая может за O(length(x)*length(y)) определить степень сходства между двумя строками x и y. Необходимо найти все пары строк (x,y) из данного множества, таких, что distance(x,y) < k, где k -- заданная константа, за время, меньшее чем полиномиальное.
Re: Поиск похожих строк
От: Mystic Украина http://mystic2000.newmail.ru
Дата: 24.12.05 13:26
Оценка: 14 (1)
Здравствуйте, sch, Вы писали:

sch>Есть множество из N > 10^6 строк текста а так же функция distance(x,y), которая может за O(length(x)*length(y)) определить степень сходства между двумя строками x и y. Необходимо найти все пары строк (x,y) из данного множества, таких, что distance(x,y) < k, где k -- заданная константа, за время, меньшее чем полиномиальное.


В общем случае задача не имеет решения. Для оптимизации нужна информация о функции distance(x,y).
Re: Поиск похожих строк
От: Mab Россия http://shade.msu.ru/~mab
Дата: 24.12.05 14:35
Оценка: 14 (1) +1
Здравствуйте, sch, Вы писали:

sch>. Необходимо найти все пары строк (x,y) из данного множества, таких, что distance(x,y) < k, где k -- заданная константа, за время, меньшее чем полиномиальное.

Меньше, чем полиномиальное -- это сильно Как уже правильно отметил Mystic, чудес на свете не бывает. Скажем, если distance = 0, k > 0, то ответом будут все возможные пары, так что время выписывания ответа будет пропорционально N^2.

Обычно в таких случаях считают алгоритм (точнее, структуру данных) удачным, если он дает ответ за время O(t + polylog(n)), где t -- длина ответа. Вроде бы изучены не так много случаев, когда эта оценка достигается. Скажем, даже решения для ортогональных запросов (выдать точки из заданного гиперкуба) уже нетривиальны при размерности выше 1.
Re: Поиск похожих строк
От: GW  
Дата: 27.12.05 16:49
Оценка: 18 (1)
sch wrote:
> Есть множество из N > 10^6 строк текста а так же функция distance(x,y),
> которая может за O(length(x)*length(y)) определить степень сходства
> между двумя строками x и y. Необходимо найти все пары строк (x,y) из
> данного множества, таких, что distance(x,y) < k, где k -- заданная
> константа, за время, меньшее чем полиномиальное.
меньше чем полиномиальное отночительно чего N? или длины строк L
для пары строк есть возможность оценить расстояние редактирования за
линейное время — поищите "Using Q-grams in a DBMS for Approximate String
Processing"
по Q-граммам также можно для каждой строки найти ближайшие используя
обратный индекс за время значительно меньшее чем O(N), точнее O(pN), где
p — вероятность того, что строки похожи
Posted via RSDN NNTP Server 2.0
Re[2]: Поиск похожих строк
От: sch  
Дата: 28.12.05 09:38
Оценка:
GW>меньше чем полиномиальное отночительно чего N? или длины строк L
GW>для пары строк есть возможность оценить расстояние редактирования за
GW>линейное время — поищите "Using Q-grams in a DBMS for Approximate String
GW>Processing"
GW>по Q-граммам также можно для каждой строки найти ближайшие используя
GW>обратный индекс за время значительно меньшее чем O(N), точнее O(pN), где
GW>p — вероятность того, что строки похожи

Спасибо большое.
"Есть многое на свете, друг Горацио..."
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.