У меня есть поисковая система.Поисковая система генерирует результаты при поиске по ключевому слову.Мне нужно найти все другие ключевые слова, которые дают похожие результаты.
Например, ключевое слово k1 дает набор результатов R1 = {1,2,3,4,5, ... 40}, который содержит до 40 идентификаторов документов.И мне нужно получить список всех других ключевых слов K1 , которые генерируют результаты, аналогичные тем, которые генерирует k1 .
Сходство S ( R1 , R2 ) между двумя наборами результатов R1 и R2 вычисляется следующим образом:
2 * (number of same elements both in _R1_ and _R2_) / ( (total number of elements in _R1_) + (total number of elements in _R2_) )
.Пример: R1 = {1,2,3} и R2 = {2,3,4,5} дает S ( R1 , R2) = (2 * | {2,3} |) / | {1,2,3} |+ | {2,3,4,5} |= (2 * 2) / (3 + 4) = 4/7 = 0,57.
Существует более 100 000 ключевых слов, следовательно, более 100 000 наборов результатов.До сих пор мне удалось решить эту проблему только трудным путем O (N ^ 2), где каждый набор результатов сравнивается с любым другим набором.Это занимает много времени.
Есть кто-то с лучшей идеей?
Некоторые подобные сообщения, которые не решают проблему полностью: