longest common subsequence matrix difference python
我正在研究一个动态编程问题(最长的公共子序列)
我的问题是:构建矩阵。
我最初用dp1构建矩阵。但它不断地给出错误的答案。然后我引用了其他答案并使用了dp2,它产生了正确的答案。
例如:
s1=elggyjwktdhlxjrbjlryjwvsufzkyhoikbgtvuttocgmlexwdsxebkrztquvcjngkkrmuubacvoeqkbffybuqemynkyyguzsp
s2=frvifovjyqlvzmfbmrutiyfbmfffrzvbyinxlddsvmpwsqgjzytkmzipgmvouqbkyeweyvolshcmhpazytenrntjwdanamfrx
正确答案应该是27。
- DP1给出30
- DP2给出27
我很困惑。有什么区别?"for_uu in range(m+1)"不是本质上迭代m+1次之前的内容吗?请帮帮我。
1 2 3 4 5 6 7 8 9 10 11 12 13 | def commonChild(s1, s2): n, m = len(s1), len(s2) dp1 = [[0] * (n+1)] * (m+1) dp2 = [[0] * (n+1) for _ in range(m+1)] for i in range(m): for j in range(n): if s2[i] == s1[j]: dp[i+1][j+1] = dp[i][j] +1 else: dp[i+1][j+1] = max(dp[i][j+1], dp[i+1][j]) return dp[-1][-1] |
1 2 3 4 5 6 7 8 9 10 | >>> a=[[0] * (5) for i in range(4)] >>> a [[0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0]] >>> a[0][0]=1 >>> a [[1, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0]] >>> a=[[0] * (5) ]*4 >>> a[0][0]=1 >>> a [[1, 0, 0, 0, 0], [1, 0, 0, 0, 0], [1, 0, 0, 0, 0], [1, 0, 0, 0, 0]] |
你可以自己看到不同,
在