Разбиение строк на классы по одинаковым словам
От: free.rFczZZ  
Дата: 13.05.13 05:00
Оценка:
Задача в следующем: есть множество строк s∈S, для каждой из них получаем терм t = φ(s) — множество "индесов" (внутри терма все уникальны, изначально не отсортированы). Нужно выделить группы термов у которых совпадают минимум n индексов. Полученные группы не должны пересекаться (порядок нахождения не важен). Пример:
t1: ABCD
t2: +BA+
t3: EDB+
t4: ++AB

+ — какието уникальные индексы.
для n=2 получим {AB: t1,t2,t4}.

Собственно, нужен алгоритм отличный от попарного сравнения. Может как-то хэшировать? Не могу сформурлировать задачу "для гугла". Термов будет порядка 100,000 насчет индексов не уверен, но тоже довольно много. Можно убрать ограничение на пересечение.

Примечение разработка на vba =( после поиска для одного n, нужно будет делать поиск для другого, исключая термы в уже сформированных группах + поиск термов по заданному набору индексов.
Re: Разбиение строк на классы по одинаковым словам
От: watch-maker  
Дата: 13.05.13 17:06
Оценка:
Здравствуйте, free.rFczZZ, Вы писали:

FR>Задача в следующем: есть множество строк s∈S, для каждой из них получаем терм t = φ(s) — множество "индесов" (внутри терма все уникальны, изначально не отсортированы). Нужно выделить группы термов у которых совпадают минимум n индексов. Полученные группы не должны пересекаться (порядок нахождения не важен). Пример:

FR>
FR>t1: ABCD
FR>t2: +BA+
FR>t3: EDB+
FR>t4: ++AB
FR>

FR>+ — какието уникальные индексы.
FR>для n=2 получим {AB: t1,t2,t4}.

FR>Собственно, нужен алгоритм отличный от попарного сравнения. Может как-то хэшировать? Не могу сформурлировать задачу "для гугла".

Тут для людей сначала нужно задачу сформулировать.
Сейчас можно просто помещать каждый терм в свою группу. Очевидно, в силу этого группы между собой не пересекаются, а число совпадающих индексов внутри каждой группы равно длине терма-члена (то есть либо не меньше n, либо решения не существует ни при каких других разбиениях) — идеальное решение.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.