问题来源:腾讯SNG雏鹰计划要求做的mini项目,绪聊app中需要根据用户的性别、年龄、喜欢的tag等综合因素对其他用户打分,需要寻找一个最佳的方法使得用户整体满意度最大。
解决方案:
(1)根据需求:对一个用户寻找候选用户时,如果性别不符合用户喜好直接淘汰。先进行第一级划分,根据用户对性别的偏好划分为两个集合:喜欢男生的集合X,喜欢女生的集合Y。
(2)贪心策略,即:对元素少的集合X中的每一个元素x对元素多的集合Y中的每一个尚未匹配的元素进行打分,排序,选出分数最高的,这两个用户即匹配成功。该算法能够保证集合少的每个元素都能得到匹配。
算法如下(C++描述):
void greedy(const vector<vector<int>>& tagCheck, vector<Person>& x, vector<Person>& y,
vector<pair<int, int>>& resultMatch) {
for (int i = 0;i < x.size();++i) {
pair<int, int> m;
vector<pair<int, double>> points;
score(x, y, i, points);
if (!points.empty()) {
m.first = x[i].id;