動態規劃法解最長公共子序列問題

      [問題]一個給定序列的子序列是指在該序列中刪除若干元素後所得的序列,但刪除過程當中不能打亂元素的順序。例如序列{B,C,A,B}是序列X={A,B,C,B,D,A,B}與序列Y={B,D,C,A,B,A}的一個最長公共子序列。給定序列X={x1,x2,……,xm}與序列Y={y1,y2,……,yn},求其最長公共子序列的長度spa

      [解析]設序列X={x1,x2,……,xm}與序列Y={y1,y2,……,yn}的最長公共子序列爲序列Z={z1,z2,……,zk},則有以下結論(都可由反證法證實)

       (1)若xm=yn, zk=xm=yn,且序列Zk-1是序列Xm-1和序列Yn-1的最長公共子序列

       (2)若xm≠yn, zkxm則序列Z是序列Xm-1和序列Y的最長公共子序列

       (3)若xm≠yn, zk≠yn則序列Z是序列X和序列Yn-1的最長公共子序列

       由此可知,該問題具備最優子結構性質。遞推式以下:

       設序列X和序列Y的最長公共子序列的長度爲f(m)(n),則

       (1)若xm=yn,則f(m)(n) = f(m-1)(n-1) + 1

       (2)若xm≠yn,則f(m)(n) = Max{f(m-1)(n),f(m)(n-1)}

相關文章
相關標籤/搜索