找到两个数组的最佳匹配

时间:2013-02-13 18:36:54

标签: algorithm dynamic-programming

我有两个数组,如下:

a1 = [x,y] 
b1 = [a,b,c] 

我试图找到最好的匹配"他们一个数组中的每个项都可以匹配第二个数组中的项,并且项可以是不匹配的。数组已排序,项目无法按顺序匹配。那就是:

some valid orderings = [xa, yb, c], [a, x, yb, c], [a, x, b, c, y]  
some invalid orderings = [ya, xb, c], [b, x, a, c, y]

"最佳匹配"由成本函数定义,每个单独的c(a,b)或每个单独的c(a)。

我该怎么做呢?

1 个答案:

答案 0 :(得分:2)

假设数组的大小为n和m。存储2D数组dp [n] [m],其中dp [i] [j]是第一个数组的前i个元素和第二个数组的j个元素的相同问题的解。使用以下等式使动态编程工作:

  1. dp [0] [0] = 0
  2. dp [i] [j] = max(dp [i - 1] [j - 1] + c(a [i],b [j]),//生成一对[i]和b [ j]
    dp [i - 1] [j] + c(a [i]),//将[i]作为单线人 dp [i] [j - 1] + c(b [j]),//将b [j]作为单数 dp [i - 1] [j - 1] + c(a [i])+ c(b [j])//同时将[i]和b [j]作为单例
  3. dp [n-1] [m-1]就是答案
  4. 在步骤2,如果i = 0,则仅使用dp [i] [j - 1] + c(b [j]),如果j = 0,则使用dp [i - 1] [j] + c(a [我])。