[問題]一個給定序列的子序列是指在該序列中刪除若干元素後所得的序列,但刪除過程當中不能打亂元素的順序。例如序列{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,且 zk≠xm,則序列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)}