【发布时间】:2019-03-06 18:06:44
【问题描述】:
我正在尝试使用 Python 编写子列表搜索算法。
供参考: https://www.geeksforgeeks.org/sublist-search-search-a-linked-list-in-another-list/
这是我的代码:
def sublist(arr1,arr2):
i = 0
j = 0
k = 0
if len(arr1) == 0:
print('List1 Empty')
if len(arr2) == 0:
print('List 2 Empty')
for j in range(0,len(arr2)):
for i in range(0,len(arr1)):
if arr1[i] != arr2[j]:
break
while arr1[i] == arr2 [j]:
if i == len(arr1) - 1:
return True
i = i + 1
j = j + 1
if i == len(arr1):
return False
return False
我确信这段代码可以优化并降低时间复杂度。由于while循环,复杂度是否比O(m * n)增加?初学者在这里
【问题讨论】:
-
您确定此代码有效吗?如果您只是在每次迭代之前制作
i = 0,似乎您不需要第二个 for 循环。 -
@Yonlif 你是对的。第二个 for 循环实际上不需要迭代,因为它遍历假定的子列表,因此如果第一个索引不匹配,则无需进一步遍历列表,因为第一个
if有break语句.所有其他代码路径都返回,因此循环永远不会被执行超过一次。本质上,for循环只是重置i = 0的奇特方式。
标签: python-3.x algorithm time-complexity sublist