Python 最长公共子序列测试用例失败
我已经为最长的公共子序列实现了这个算法,我已经对每个可能的测试用例进行了测试,它是有效的,但是当我把它提交给课程的在线评分员时,它说它在用例11上失败了,我想不出任何可能的测试用例会破坏它。你能帮忙吗?它返回idx最长子序列Python 最长公共子序列测试用例失败,python,algorithm,Python,Algorithm,我已经为最长的公共子序列实现了这个算法,我已经对每个可能的测试用例进行了测试,它是有效的,但是当我把它提交给课程的在线评分员时,它说它在用例11上失败了,我想不出任何可能的测试用例会破坏它。你能帮忙吗?它返回idx最长子序列 def lcs2(a, b): idx = 0 for i in a: if i not in b: a.remove(i) if len(a) <= len(b): for i in a
def lcs2(a, b):
idx = 0
for i in a:
if i not in b:
a.remove(i)
if len(a) <= len(b):
for i in a:
if i in b:
idx += 1; b = b[b.index(i)+1:]
else:
for i in b:
if i in a:
idx += 1; a = a[a.index(i)+1:]
return idx
def lcs2(a、b):
idx=0
对于我来说,在一个:
如果我不在b:
a、 删除(i)
如果len(a)我可以给你一个样本:
a=[1,2,3,4,5]
b=[2,3,4,1,5]
一个正确的解决方案是动态编程我可以用一个示例来帮助您:
a=[1,2,3,4,5]
b=[2,3,4,1,5]
一个正确的解决方案是动态规划您似乎要搜索的不是最长的公共子序列,而是这个最长的公共子序列的长度。但是,错误的假设是,两个列表中的第一个列表包含此子序列的起始索引,其索引早于第二个列表
提供的答案已经给出了发生这种情况的示例:
a = [1,2,3,4,5]
b = [2,3,4,1,5]
我将展开以下内容:
c = [3,4,2,1,5]
你会看到:
import itertools as it
rets = [lcs2(x,y) for x,y in it.permutations([a,b,c],2)]
combis = [(x,y) for x,y in it.permutations(['a','b','c'],2)]
print(*zip(rets, combis), sep='\n')
#(2, ('a', 'b'))
#(2, ('a', 'c'))
#(4, ('b', 'a'))
#(3, ('b', 'c'))
#(3, ('c', 'a'))
#(4, ('c', 'b'))
换句话说,您定义的lcs2
函数是a对称的,因此不正确。您似乎要搜索的不是最长的公共子序列,而是该最长公共子序列的长度。但是,错误的假设是,两个列表中的第一个列表包含此子序列的起始索引,其索引早于第二个列表
提供的答案已经给出了发生这种情况的示例:
a = [1,2,3,4,5]
b = [2,3,4,1,5]
我将展开以下内容:
c = [3,4,2,1,5]
你会看到:
import itertools as it
rets = [lcs2(x,y) for x,y in it.permutations([a,b,c],2)]
combis = [(x,y) for x,y in it.permutations(['a','b','c'],2)]
print(*zip(rets, combis), sep='\n')
#(2, ('a', 'b'))
#(2, ('a', 'c'))
#(4, ('b', 'a'))
#(3, ('b', 'c'))
#(3, ('c', 'a'))
#(4, ('c', 'b'))
换句话说,您定义的lcs2
函数是a对称的,因此不正确。两个互斥序列的idx要求是什么?0还是某个负值?案例a中的同一个问题是空序列。我们如何知道“案例11”是什么?因此,请检查问题描述,哪些值对参数有效,并确保您的实现满足所有这些约束。如果您的实现仍然失败,说明是错误的,您应该联系“在线评分员”进行澄清。似乎Index Ama理解我。@J.Moh:是的,他找到了一个例子。这就是你的问题中缺少的。这会为(“ab”,“ba”)返回错误的答案(2而不是1),并且几乎每隔一种情况,序列以不同的顺序具有相同的元素。你说你测试了“每个可能的测试用例”,所以我猜你无意中限制了你用来列举可能的测试用例的系统。两个互斥序列的idx要求是什么?0还是某个负值?案例a中的同一个问题是空序列。我们如何知道“案例11”是什么?因此,请检查问题描述,哪些值对参数有效,并确保您的实现满足所有这些约束。如果您的实现仍然失败,说明是错误的,您应该联系“在线评分员”进行澄清。似乎Index Ama理解我。@J.Moh:是的,他找到了一个例子。这就是你的问题中缺少的。这会为(“ab”,“ba”)返回错误的答案(2而不是1),并且几乎每隔一种情况,序列以不同的顺序具有相同的元素。你说你测试了“每一个可能的测试用例”,所以我猜你无意中限制了你用来列举可能的测试用例的系统。没有“正确的解决方案”。即使动态规划被认为是最好的选择,我也能想到其他的尝试也能产生正确的结果。很抱歉,这对我的英语不好。也许我应该使用“一个正确的解决方案(')БП┱)请看这个:IndexAma@Please如果你能为上面的链接再黑一次,没有“正确的解决方案”。即使动态编程是最好的选择,我也能想到其他尝试也能产生正确的结果。很抱歉,这对我的英语不好。也许我应该使用“一个正确的解决方案”(´・Д・)“请看这个:IndexAma@Please如果你能为上面的链接再黑一次我看到了,请你对我编辑的内容发表评论,我知道DP是最佳的,我只想看看我能在这里得到什么。请你看看我做了什么;并且在你问题的模糊结构中迷失了方向。不清楚你是怎么看的。”为了得到正确的答案,你的Coursera东西认为什么是正确的答案,以及你是否意识到LLC和最长子串之间的区别。链接问题中的链接问题由Martijn Pieters正确地实现了这两者。你只需复制粘贴正确的一个。此外,你自己提出的算法在许多情况下,lf似乎也能起到同样的作用;但请注意,您正在更改传递给lcs2函数的列表之一。因此,lcs2(a,b);lcs2(a,b)我明白了,如果你能对我编辑的内容发表评论,我知道DP是最佳的,我只想看看我能在这里得到什么。如果你能看看我做的这件事,你就会迷失在你问题的模糊结构中。不清楚你认为什么是正确答案,你的课程内容认为什么是正确答案,以及r您知道LLC和最长子字符串之间的区别。Martijn Pieters正确地实现了链接问题中的链接问题。您只需复制粘贴正确的子字符串。此外,您自己提出的算法在许多情况下似乎也能实现这一点;但请注意,您正在更改其中一个子字符串列出传递给lcs2函数的列表。因此lcs2(a,b);lcs2(a,b)不同