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

求解双有序列表保序加权最大得分配对的算法需求

固定顺序列表最大得分配对的适配算法

适配的核心算法

你提出的配对约束完全对应「带可选空位的两序列最大权全局对齐」场景,最适合的实现方案是调整空位规则后的Needleman-Wunsch动态规划算法。

核心实现逻辑

原始Needleman-Wunsch算法是生物序列比对的经典动态规划方法,针对当前需求修改简单规则即可完全适配:

  1. 定义DP状态:dp[i][j]表示仅考虑列表A的前i个元素、列表B的前j个元素时,可获得的最大配对总得分
  2. 状态边界初始化:
    • 当i=0或j=0时,也就是仅考虑其中一个列表的元素、另一个列表为空时,最大得分恒为0——不存在可参与配对的有效元素
  3. 状态转移规则(计算dp[i][j]时取三个分支的最大值):
    • 分支1:A的第i个元素不参与配对,对应得分等于仅考虑A的前i-1个元素、B的前j个元素的最大得分,即dp[i-1][j]
    • 分支2:B的第j个元素不参与配对,对应得分等于仅考虑A的前i个元素、B的前j-1个元素的最大得分,即dp[i][j-1]
    • 分支3:A的第i个元素和B的第j个元素配对,对应得分等于仅考虑A的前i-1个、B的前j-1个元素的最大得分,加上两个元素的匹配得分,即dp[i-1][j-1] + score(A[i], B[j])
  4. 结果回溯:计算完所有DP状态后,从dp[len(A)][len(B)]的位置反向追溯每个状态的转移来源,即可得到所有满足顺序约束的配对集合

示例校验

针对题目给出的测试用例:

  • A = {a, b, c, d},B = {e, f, g},搭配给定的两两匹配得分表
  • 按上述规则计算得到的最大总得分为30,回溯得到的配对集合为[{a,e}, {d,f}],和题目给出的最优结果完全匹配

复杂度说明

  • 时间复杂度:与两个列表的长度乘积正相关,即O(len(A) * len(B)),对绝大多数常规业务规模的列表计算效率足够
  • 空间复杂度:可通过滚动数组优化,将空间占用降低到O(min(len(A), len(B))),不需要保存全量DP矩阵

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.25 06:24:03