Работаем над сервисом, который позволяет обмениваться товарами и услугами. Уже несколько десятков тысяч зарегистрированных пользователей. которые создали профили( Город, Специализация, Информация о себе), указали свои возможности( Я могу ... , Описание, Категория( из списка выбирали), создали сделки( Мне нужно ... , Описание, Категория, Меня на ...(указали возможности)).
Как на базе этого можно построить бартерные цепочки? К примеру для того, чтобы в бартере участвовали 3-5 пользователей. Есть ли мысли по алгоритмам?
Ваша структура данных называется ориентированный граф. Вершины графа - контрагенты. Направленные ребра - ситуации, когда контрагент А предлагает товар, который контрагент Б желает приобрести (запрос на выборку таких ситуаций пишется на SQL элементарно и отрабатывает почти мгновенно при наличие правильных индексов).
У вас есть две задачи:
Нахождение циклов в ориентированном графе (идеальный вариант). Готовые решения существуют.
Нахождение самого длинного пути в ориентированном графе. Некоторые подходящие алгоритмы также можно найти.
в этой задаче у ТС на входе есть " указали свои возможности( Я могу ... , Описание, Категория( из списка выбирали), создали сделки( Мне нужно ... , Описание, Категория, Меня на ...(указали возможности))."
то есть все в виде простого текста, самое сложное в задаче это соотнести что надо одному с тем что может другой, описанное простыми словами работников. а уж на графах посчитать сложные бартеры - это дело десятое. хотя могу конечно ошибаться и одиночные бартеры он уже вычисляет.
Юрий: Текстовое описание в свободной форме вообще нельзя назвать ценной информацией (и в техническом смысле и в плане ценности для бизнеса). Если кто-то считает, что процесс сбора информации уже пройден, то это не верно. Пройдена только начальная, сама легкая (и дешевая) фаза, впереди основная работа именно по сбору, а не по обработке информации. Нужно посадить человека (и, вероятно, оплатить его труд), который, читая все эти тексты, будет заполнять структурированную базу данных. И только когда структурированная база будет собрана, тогда с ней можно начинать уже по-настоящему работать. А работы там много (ничего сверх тяжелого для компетентного дата-аналитика, но студент-сайтошлепатель не справится).
"Я могу..." - это результат
"Мне нужно..." - это требование.
Сделайте выборку "результат" - "требование", где описывается конкретным словом.
Пример:
масло - молоко
молоко - сено
сено - диз.топливо
Пробежитесь по выборке пару раз, вот вам и цепочки.