Я начинаю планировать, как это сделать.
Прежде всего, возможно, нужно избавиться от вашей технологии баз данных или дополнить ее технологиями тройного хранилища или графов. Это должно обеспечить лучшую производительность для анализа похожих лайков или тем.
Далее да получить подмножество. Возьмите несколько интересов, которые есть у пользователя, и получите небольшой пул пользователей, которые имеют схожие интересы.
Затем создайте индексы лайков в каком-то значимом порядке и посчитайте инверсии (разделяй и властвуй - это очень похоже на сортировку слиянием, и вы все равно захотите отсортировать на своем пути, чтобы посчитать расщепленные инверсии).
Надеюсь, это поможет - вы не хотите сравнивать все со всем, или это определенно n2. Вы должны быть в состоянии заменить это чем-то между константой и линейностью, если вы берете группы людей, которые имеют подобные лайки, и используете это.
Например, с точки зрения графика, возьмите что-то, что им недавно понравилось, и посмотрите на ребра, а затем проследите их и просто проанализируйте этих пользователей. Возможно, сделайте это на нескольких недавно понравившихся статьях, а затем найдите общий набор пользователей из этого и используйте его для совместной фильтрации, чтобы найти статьи, которые пользователю, вероятно, понравятся. тогда у вас будет выполнимый размер проблемы - особенно в графике, где нет роста индекса (хотя, возможно, больше по краям, по которому следует переходить к статье - это просто дает вам больше возможностей для поиска полезных данных)
Еще лучше было бы указать сами статьи, чтобы, если кто-то понравился статье, вы могли видеть статьи, которые им могут понравиться, основанные на других пользователях (то есть «пользователи Amazon, которые купили это, также купили»).
Надеюсь, это даст несколько идей. Для анализа графиков есть некоторые структуры, которые могут помочь, например, фауна для статистики и производных.