Учтите, что есть 10 миллиардов слов, которые люди искали в Google. Каждому слову соответствует отсортированный список всех идентификаторов документов. Список выглядит так:
[Word 1]->[doc_i1,doc_j1,.....]
[Word 2]->[doc_i2,doc_j2,.....]
...
...
...
[Word N]->[doc_in,doc_jn,.....]
Я ищу алгоритм для поиска 100 редких пар слов. Редкая пара слов — это пара слов, которые встречаются вместе (не обязательно рядом) ровно в 1 документе.
Я ищу что-то лучше, чем O (n ^ 2), если это возможно.
O(d * w^2 * m)
, гдеw
— максимальное количество слов в документе, аd
— количество документов. Это лучше? - person Niklas B.   schedule 05.02.2014O(m)
с высокой вероятностью, используя хеширование. И сортировка всех списков занимаетO(n log m)
или даже линейное время с использованием целочисленных сортировок, поэтому при необходимости это легко сделать в качестве шага предварительной обработки. - person Niklas B.   schedule 05.02.2014O(m)
whp. Мы не говорили о решении вашей проблемы. - person Niklas B.   schedule 05.02.2014O(d)
итерациях. В каждом документе у вас естьO(w)
слова, поэтому вы перечисляете все пары вO(w^2)
. Теперь для каждой пары вы вычисляете пересечение их списков документов вO(m)
, чтобы проверить, встречаются ли они ровно один раз. Весь алгоритмO(d * w^2 * m)
, но на практике вы можете найти много пар слов несколько раз. Вы можете пропустить часть пересечения, если это произойдет, и сохранить коэффициентm
во многих случаях. Будет ли это лучше исходного алгоритма или не очень, зависит от ваших данных. Я не понимаю, откуда вы взялиO(d^2)
. - person Niklas B.   schedule 05.02.2014sum_{i=1}^d w_i^2
и сравните его сn^2
. Я не думаю, что существует детерминированный алгоритм, который не будет иметь в качестве фактора ниn^2
, ниw^2
. Не уверен насчет случайного выбора, но это маловероятно (хррр) - person Niklas B.   schedule 05.02.201410000
слов или около того, поэтому вы можете разработать свой алгоритм так, чтобы он сортировал слова по возрастанию количества вхождений и пробовал пары с уменьшением редкости. - person Niklas B.   schedule 05.02.2014