Хорошо среди алгоритмов, которые я изучал в курсе в Uni, был один, имеющий дело с такими вещами.Их рекомендуемый подход состоял в том, чтобы вычислить индекс «сходства» для каждой пары пользователей (который, я полагаю, упомянутый вами метод N * N), а затем на основе этого определения, к каким пользователям конкретный пользователь ближе всего.
Конечно, от вас не требуется немедленно пересчитывать индексы подобия для каждого изменения, просто время от времени, как работает поисковый движок.Фактически, после того как вы вычислили начальный индекс, вы можете использовать различные эвристические методы для более частого пересчета для пользователей, которые быстро меняют свои предпочтения, и гораздо медленнее для тех, кто редко их меняет.