Алгоритм сопоставления списка желаний / наличия
Я внедряю систему торговли товарами на сайте с большим трафиком.У меня есть большое количество пользователей, каждый из которых поддерживает список HAVE и список WANT для ряда конкретных элементов.Я ищу алгоритм, который позволил бы мне эффективно предлагать торговых партнеров на основе ваших HAVE и WANTS, соответствующих их.В идеале я хочу найти партнеров с самым высоким потенциалом взаимной торговли (т.е. у меня есть куча вещей, которые вы хотите, у вас есть куча вещей, которые я хочу).Мне не нужно находить глобальную пару с самым высоким потенциалом (что звучит сложно), просто найти пары с самым высоким потенциалом для данного пользователя (или даже просто некоторые пары с высоким потенциалом, а не глобальный максимум).
Пример:
User 1 HAS A,C WANTS B,D
User 2 HAS D WANTS A
User 3 HAS A,B,D WANTS C
User 1 goes to the site and clicks a button that says
"Find Trading Partners" and the top-ranked result is
User 3, followed by User 2.
Дополнительным источником сложности является то, что предметы имеют разные значения, и я хочу совпасть по максимально возможной сделке, а не по наибольшему числуматчей между двумя трейдерами.Таким образом, в приведенном выше примере, если все элементы стоят 1, а A и D - 10, пользователь 1 теперь сопоставляется с пользователем 2 выше пользователя 3.
Наивный способ сделать это - вычислитьмаксимальная торговая ценность между пользователем, ищущим партнеров, и всеми другими пользователями в базе данных.Я думаю с некоторыми таблицами поиска на правильных вещах, которые я мог бы сделать лучше.Я пробовал поискать в гугле, поскольку это кажется классической проблемой, но я не знаю, как ее назвать.
Кто-нибудь может порекомендовать хороший подход к решению этой проблемы?Я видел такие сайты, как Magic Online Trading League, которые, кажется, решают эту проблему в режиме реального времени.