我的作业不能正确执行,也不知道代码有什么问题。
练习是: 通过简单的搜索或蛮力发现我们进行了多少比较:
我们有2个包含字母(字符串)的列表,我们将它们进行比较。打印出进行了多少次比较。
示例:
pattern = ABABC
text = ABBABACABCBAC
我如何尝试:
def search(text,pattern):
text=list(text)
pattern=list(pattern)
n=len(text)
m=len(pattern)
co=1
l=0
k=0
while k<=m:
if text[l] == pattern[k]:
co+=1
l+=1
k+=1
else:
co+=1
l+=1
k=0
c=co
return "Simple matching made " + str(c) +"
comparisons"
应该为16,因为我们按字母进行比较,例如3 + 1 + 1 + 4 + 1 + 2 + 1 + 3
我们通过3得到:A = A表示+ 1,B = B表示1,
B不是A,因此我们在文本中加+1,但移位1。
答案 0 :(得分:1)
我编写的脚本可以满足您的需求,但除非您没有弄错,否则我认为您最后会缺少一个术语。 模式='ABABC' 文字='ABBABACABCBAC'
def search(text, pattern):
slices = len(text) - len(pattern)
for i in range(0, slices + 1):
count = 0
text_to_compare = text[i:i + len(pattern)]
for j in range(len(pattern)):
count += 1
if pattern[j] == text_to_compare[j]:
continue
else:
break
print("{} -> {}".format(text_to_compare, count))
search(text, pattern)
此输出
ABBAB-> 3
BBABA-> 1
BABAC-> 1
ABACA-> 4
BACAB-> 1
ACABC-> 2
CABCB-> 1
ABCBA-> 3
BCBAC-> 1
它可以调整为总数,例如:
def search(text, pattern):
total_count = 0
slices = len(text) - len(pattern)
for i in range(0, slices + 1):
count = 0
text_to_compare = text[i:i + len(pattern)]
for j in range(len(pattern)):
count += 1
total_count += 1
if pattern[j] == text_to_compare[j]:
continue
else:
break
print("{} -> {}".format(text_to_compare, count))
print("Total count: {}".format(total_count))
输出与以前相同的内容,但也带有:
总数:17
这是您要找的东西吗?我可以解释一下您不了解的部分:)