В моем приложении люди могут ставить оценку другим людям из десяти баллов.В полночь каждый день я хотел бы реализовать алгоритм, который вычисляет наилучшее «соответствие» для каждого человека.В конце дня у меня будет, например,
(ID_person_who_gave_mark, ID_person_who_received_mark, mark)
(1, 2, 7.5) // 1 gave to 2 a 7.5/10
(1, 3, 9) // etc..
(1, 4, 6)
(2, 1, 5.5)
(2, 3, 4)
(2, 4, 8)
(3, 1, 3)
(3, 2, 10)
(3, 4, 9)
(4, 1, 2)
// no (4, 2, xx) because 4 didn't gave any mark to 2
(4, 3, 6.5)
В конце алгоритма я хотел бы, чтобы у каждого человека был лучший матч, это лучший компромисс, чтобы «сделать всех счастливыми».».
В моем примере я бы сказал, что человек 1 дал 9/10 к 3, но 3 дал 3/10 к 1, поэтому они точно не могут сравниться, 1 дал 7,5 / 10 к 2 и 2дал 5,5 / 10 к 1, так почему бы и нет, и, наконец, 1 дал 6/10 к 4, но 4 дал 2/10 к 1, чтобы они не могли соответствовать (меньше 5/10 = они не могут соответствовать),Таким образом, для человека 1 единственное совпадение будет с 2, но я должен проверить, хорошо ли для 2 иметь 1 в качестве совпадения.
2 дает 4/10 к 3, поэтому (2,3) больше (меньше 5/10), но 2 дает 8/10 к 4, поэтому (2,4) будет гораздо более крутодля 2 чем (2,1).Давайте посмотрим, что 4: 4 не дал никакой оценки 2, поэтому они не могут совпадать: одна возможность оставлена для 2: мы делаем совпадение (2-1)
давайте посмотрим на 3: с 1все кончено (3/10), с 2 было бы очень круто для 3 (10/10), но 2 дали 3 4/10, так что все кончено.3 дал крутые 9/10 к 4, так что это тоже было бы неплохо.Давайте проверим, что 4: 4 дали 2/10 к 1, так что все закончилось с 1 (меньше 5/10), и дали довольно хорошие 6,5 к 3. Таким образом, лучший матч наконец-то между 4 и 3.
наши последние совпадения в этом примере: (1-2) и (3-4)
Даже когда я делаю это интуитивно, как я только что сделал, сложно найти подходящее поведение для вычисления всей этой информации.
Можете ли вы помочь мне «математизировать» такую цель, чтобы иметь алгоритм, который мог бы сделать такой расчет, скажем, для 50000 человек?Или, по крайней мере, в какой области я могу получить больше информации для эффективного решения этой проблемы?