На самом деле это настоящая проблема, над которой я работаю, но для простоты давайте представим, что я Google.
Скажем, пользователь ищет "наноразмерный контейнер". Там не очень много страниц с обоими словами ... только около 3к. Но есть ~ 2 миллиона страниц с «наноразмером» и ~ 4 миллиона с «tupperware». Тем не менее, Google находит 3k для меня за 0,3 секунды.
Как это сделать?
Единственный известный мне алгоритм - это получить документы для «наноразмера», получить документы для «tupperware», а затем выполнить слияние списка. Но это O (N + M) или O (5 000 000), что кажется немного медленным. Особенно, если я запускаю его на настольном компьютере вместо сверхбыстрого кластера.
Так это на самом деле то, что делает Google, и их скорость объясняется главным образом тем, что они выполняют эти дорогостоящие вычисления в своем массивном распределенном кластере?
Или есть лучший алгоритм, о котором я не знаю? Википедия и Google ничего мне не показывают.
Edit:
Поскольку люди, кажется, сосредоточены на аспекте Google моего вопроса, я думаю, что я перефразирую его в реальных терминах.
У меня есть несколько очень больших (миллионы элементов) индексов, реализованных в виде пар ключ / значение. Ключи - простые слова, значения - наборы документов. Распространенным вариантом использования является пересечение результатов нескольких поисков по разным индексам: основной проблемой является пересечение наборов документов.
Я могу заново реализовать свои индексы, как захочу - на данный момент это в основном академический проект.