我有一个算法确定列表L1是否是列表L2的子集(即L1中的所有元素是否都在L2中):
def isSubset(L1, L2):
for e1 in L1:
matched = False
for e2 in L2:
if e1 == e2:
matched = True
break
if not matched:
return False
return True
在我的课程笔记中,它说“最坏的情况发生在len(L1)= len(L2)”,但为什么会这样呢?
我的理由是:对于给定的L1和L2,最坏的情况发生在L1确实是L2的子集时(在这种情况下,对于每个L1,我们必须遍历L2中的每个元素来验证这一点。) / p>
如果是这种情况(即L1是L2的子集),则需要更长的时间来验证L1是否是[1,7,2,3,5,8,9, 20],而不是确认它是[2,5,3]的成员。
我的推理有什么问题?
答案 0 :(得分:0)
基本上,当L1
等于L2
时,必须针对L1
检查L2
的所有元素。
另一方面,如果L1
不等于L2
,则它是它的一个子集,或者它不是。{/ p>
如果是,则需要更少的检查,因为L1
中的元素数量会少于L1
L2
的数量。
否则,只要在L2
中发现了不属于L1
的元素,就可以确定L1
不能是L2
的子集。
另一方面,如果len(L1) == len(L2)
但L1
的第一个元素不在L2
中,则执行只需要L2
上的一个循环。
因此,最坏的情况=> len(L1) == len(L2)
,但反过来却不正确。