Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 最长公共子序列测试用例失败_Python_Algorithm - Fatal编程技术网

Python 最长公共子序列测试用例失败

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

我已经为最长的公共子序列实现了这个算法,我已经对每个可能的测试用例进行了测试,它是有效的,但是当我把它提交给课程的在线评分员时,它说它在用例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:
           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)不同