下面有一个名为“test”的函数。我的程序无法通过测试功能。
这是我的三元搜索代码。三元搜索就像二元搜索,但不是将所有元素除以2,而是将它们除以3。
要使用三元搜索,我使用了index2作为1/3项的分隔符。 index1是2/3项的分隔符。
您只需将“高”和“低”分配给index1或index2。这使您可以将列表分为三个部分。高和低用于查找应搜索的分割列表的哪个部分。然后,该过程不断重复,直到高和低的值彼此接近。
seq是列表中的项目,即。 [1,2,3,4,5 ...] 列表中的项目是有序的。
键是我正在寻找的值
并且ternary_search返回键的索引或键的索引关闭键
玩得开心! 干杯!
def ternary_search(seq,key):
length = len(seq)
left = 0
right = length
index = 0
x = True
while x and left <= right:
#focal = (high + low) //3
if left == right:
#check similarity between values and key
return index
else:
if right - left > 0:
index1 = ((right+2*(left))//3)
index2 = ((2*(right)+left)//3)
if left == right:
x = False
return (index1+index2)
if seq[index1] == key:
x = False
return index1
if seq[index2]== key:
x = False
return index2
if key<seq[index1]:
right = index1 - 1
else:
if key > seq[index1] and key <seq[index2]:
right = index2 - 1
left = index1 - 1
if key > seq[index2]:
left = index2+1
return index
def test():
seq = []
for i in range(1,1001):
seq.append(i)
for j in range(1,1001):
is_pass = (ternary_search(seq,j)==j-1)
assert is_pass == True, "fail the test when key is %d"%j
if is_pass == True:
print("=========== Congratulations! Your have finished exercise 2! ============")
if __name__ == '__main__':
test()
答案 0 :(得分:0)
您的错误就在行中:
if left == right:
#check similarity between values and key
return index
基本上现在当你的上下值(右和左)相遇时,它们将返回存储在变量索引中的值,但是在函数体中你永远不会改变索引的值,所以它总是会返回0。让你的代码工作的方法就是一旦你知道左==右检查并查看值是否= = =如果是,那么返回左或右,因为两者必须是该值的索引。我用你的代码做了这个,它通过了测试功能。顺便说一下,实验室8好运。
答案 1 :(得分:0)
def ternary_search(seq,key):
length = len(seq)
left = 0
right = length
index = 0
x = True
while x and left <= right:
#focal = (high + low) //3
if left == right:
#check similarity between values and key
return left
elif right - left > 0:
index1 = ((right+2*(left))//3)
index2 = ((2*(right)+left)//3)
if seq[index1] == key:
return index1
elif seq[index2] == key:
return index2
else:
if key<seq[index1]:
right = index1 - 1
elif key > seq[index1] and key <seq[index2]:
right = index2 - 1
left = index1 - 1
elif key > seq[index2]:
left = index2+1
return index
顺便说一下实验室8的好运。