You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

稳定婚姻算法变体的Python代码修改求助:多候选匹配优化

稳定婚姻算法(Stable Marriage Algorithm)Python实现修改求助

现有实现说明

1. 变量定义

  • wanteds:长度为N的数字列表,示例:
wanteds = [35, 76, 88, 76, 27, 98, 29, 88, 88, 71, 88, 93, 26, 26, 8]
  • preferences:包含N个唯一键的字典,每个键对应一个数字列表(元素顺序代表优先级),示例:
preferences = {'A': [34, 76, 59], 'B': [22, 27], 'C': [27, 22], 'D': [23], 'E': [24], 'F': [25], 'G': [26], 'H': [27], 'I': [28], 'J': [29], 'K': [30], 'L': [31], 'M': [32], 'N': [33], 'O': [34]}

2. 算法规则

返回一个字典,键为preferences的所有键,值为唯一数字:

  • 若数字存在于wanteds且在对应偏好列表中则分配,否则为-1
  • wanteds中数字仅可使用一次,需遵循优先级规则

3. 现有代码

def stable_matching(wanteds: list, preferences: dict):
    result = {}

    for preference_name, preference_numbers in preferences.items():
        for preference_number in preference_numbers:
            if preference_number in wanteds:
                wanteds.remove(preference_number)
                result[preference_name] = (preference_number, preference_numbers.index(preference_number))
                break
        
            current_preference_name_preference_number_index = preference_numbers.index(preference_number)
            for old_result_name, old_result_made in result.items():
                if old_result_made[0] == preference_number and old_result_made[1] > current_preference_name_preference_number_index:
                    result[preference_name] = (preference_number, preference_numbers.index(preference_number))
                    result.pop(old_result_name)
                    break

    for preference_name, preference_numbers in preferences.items():
        if preference_name not in result:
            result[preference_name] = -1
        else:
            result[preference_name] = result[preference_name][0]

    return dict(sorted(result.items()))

wanteds = [35, 76, 88, 76, 27, 98, 29, 88, 88, 71, 88, 93, 26, 26, 8]
# wanteds = [[35, 28], [76], [88], [76], [27], [98], [29], [88], [88], [71], [88], [93], [26], [26], [8]]
preferences = {'A': [34, 76, 59], 'B': [22, 27], 'C': [27, 22], 'D': [23], 'E': [24], 'F': [25], 'G': [26], 'H': [27], 'I': [28], 'J': [29], 'K': [30], 'L': [31], 'M': [32], 'N': [33], 'O': [34]}
result = stable_matching(wanteds, preferences)
print(result)

修改需求

1. 数据结构变更

将wanteds改为嵌套列表结构,示例:

[[35, 28], [76], [88], [76], [27], [98], [29], [88], [88], [71], [88], [93], [26], [26], [8]]

2. 匹配规则更新

  • 对于wanteds中的子列表,若前一个数字未被分配,则尝试分配下一个数字
  • 分配需遵循原优先级规则,且可能需要重新评估已形成的匹配对

3. 预期结果

{'A': 76, 'B': -1, 'C': 27, 'D': -1, 'E': -1, 'F': -1, 'G': 26, 'H': -1, 'I': 28, 'J': 29, 'K': -1, 'L': -1, 'M': -1, 'N': -1, 'O': -1}

请求修改上述Python代码,以支持新的wanteds结构及匹配规则。


内容的提问来源于stack exchange,提问作者RamboSushi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.01 22:50:53