要实现一个匹配系统,核心是根据特定规则将两组或多组对象进行配对。下面是一个基于评分算法的简单匹配系统示例,常用于约会应用或团队分组场景。
import itertools
from dataclasses import dataclass
from typing import List, Tuple
@dataclass
class User:
id: int
name: str
interests: List[str] # 用户兴趣标签
class MatchingSystem:
def __init__(self):
self.users = []
def add_user(self, user: User):
self.users.append(user)
def calculate_compatibility(self, user1: User, user2: User) -> float:
"""计算两个用户的匹配度"""
common = set(user1.interests) & set(user2.interests)
total = set(user1.interests) | set(user2.interests)
return len(common) / len(total) if total else 0
def find_best_matches(self) -> List[Tuple[User, User, float]]:
"""为每个用户找到最佳匹配"""
if len(self.users) < 2:
return []
# 生成所有可能的配对组合
pairs = list(itertools.combinations(self.users, 2))
# 计算每对匹配度并排序
scored_pairs = []
for user1, user2 in pairs:
score = self.calculate_compatibility(user1, user2)
scored_pairs.append((user1, user2, score))
# 按匹配度降序排序
scored_pairs.sort(key=lambda x: x[2], reverse=True)
# 贪心算法选择最佳匹配(避免重复匹配)
matched = set()
best_matches = []
for user1, user2, score in scored_pairs:
if user1.id not in matched and user2.id not in matched:
best_matches.append((user1, user2, score))
matched.update([user1.id, user2.id])
return best_matches
# 使用示例
if __name__ == "__main__":
system = MatchingSystem()
# 添加用户
system.add_user(User(1, "Alice", ["编程", "电影", "音乐"]))
system.add_user(User(2, "Bob", ["编程", "运动", "游戏"]))
system.add_user(User(3, "Charlie", ["音乐", "艺术", "读书"]))
system.add_user(User(4, "Diana", ["电影", "旅行", "美食"]))
# 获取匹配结果
matches = system.find_best_matches()
for user1, user2, score in matches:
print(f"{user1.name} ←→ {user2.name}: 匹配度 {score:.2%}")
这个系统的工作原理:
- 定义用户类,包含ID、姓名和兴趣标签
- 通过计算共同兴趣的比例来确定匹配度
- 使用组合生成所有可能的配对
- 采用贪心算法确保每个用户只被匹配一次
匹配系统的核心是根据业务需求设计评分算法,实际应用中可能需要考虑更多因素如地理位置、年龄、历史行为等。
简单总结:匹配系统的关键是设计合适的评分算法和匹配策略。