algorithm - 基于好恶匹配人的算法
问题描述
我有一个大约 75 人的团队。每个用户都喜欢或不喜欢其他 74 个用户。这些人需要分成大约 15 个不同大小的组(4 到 8 人)。需要将它们分组在一起,以便这些组仅由彼此喜欢的人组成,或者至少由彼此喜欢的人组成。
我不确定解决这个问题的最佳算法是什么。非常感谢任何指针或伪代码!
解决方案
这还不够好,不足以建议特定的算法。我建议使用聚类和“集团”算法,但您仍然需要定义“最佳分组”指标。面对取舍和未定义的欲望,“尽可能地”是没有意义的。您的聚类算法将需要此指标来形成您的组。
数据表示很简单:你需要一个有向图。从 A 到 B 的边表示 A 喜欢 B;缺少优势意味着 A 不喜欢 B。这会将“喜欢”信息编码为适合您的算法的形式。您有 75 个节点和每个“喜欢”的一条边。
从研究派系算法开始;“集团”是一个集合,其中每个成员都喜欢其他每个成员。这些可能会构成您的聚类的基础。
但是请注意,您必须定义权衡取舍。例如,考虑 13 个节点的情况,其中包括 4 人和 8 人的两个不同的小团体,加上一个喜欢 8 小团体中的一名成员的人。图中没有其他“喜欢”。
你如何安置第 13 个人?您是否拆分 8 派系并将他们与他们喜欢的人一起添加到组中?如果是这样,您是否将 3 或 4 人从 8 人中拆分出来?打破 15 或 16 个“喜欢”,让那个人和他们喜欢的人在一起——谁不喜欢他们?公平吗?将第 13 个人添加到相互对立的 4 集团中会更好吗?
您的 eval 函数必须为所有这些情况返回一个有序的度量。它将需要支持添加到一个组,拆分一个大组等。
推荐阅读
- c++ - 没有匹配的函数调用'bind(
, 常量 std::_Placeholder<1>&, int*) - python - 尝试将多行字符串大写,但不起作用。有什么想法吗?
- c - 如果用户和内核中的数据结构大小相同,缓存未命中是否也相同?
- swift - 为什么 Int as Double 的类型注释有效但 Double as Int 无效?
- c - 如何从几个线程中异步读取相同的文件字节?
- excel - 关于excel宏的两个问题
- r - 如何从 R 中的嵌套列表构建数据框
- javascript - 使用按钮和 .active css 类显示显示/隐藏内容
- php - 优化获取 HTTP 状态码的执行时间
- android - 如何在 Android 布局 xml 文件中获取小部件的完整类名?