Considering this post which says: “big O时间三值Search是Log_3ň而非二进制Search的Log_2 N”comparison
这应该是因为classical ternary搜索将需要3个比较instead两个,而是将这项实现比二元搜索更无效吗?
#!/usr/bin/python3
List = sorted([1,3,5,6,87,9,56, 0])
print("The list is: {}".format(List))
def ternary_search(L, R, search):
"""iterative ternary search"""
if L > R:
L, R = R, L
while L < R:
mid1 = L + (R-L)//3
mid2 = R - (R-L)//3
if search == List[mid1]:
L = R = mid1
elif search == List[mid2]:
L = R = mid2
elif search < List[mid1]:
R = mid1
elif search < List[mid2]:
L = mid1
R = mid2
else:
L = mid2
if List[L] == search:
print("search {} found at {}".format(List[L], L))
else:
print("search not found")
if __name__ == '__main__':
ternary_search(0, len(List)-1, 6)
该实现在每次迭代中只有两次比较有效。那么,忽略计算中点所需的时间,是不是会像二分查找那样有效?
那么为什么不把这个进一步进行一个n-ary搜索? (尽管我不知道这是否是正确答案),然而,搜索的主要关注点是中点计算的数量而不是比较的数量,尽管我不知道这是否是正确的答案。
由于** O(log_2 N)= O(log_3 N)**,您提到的帖子是没有意义的。但答案是正确的。如果你做对了,二进制搜索在最坏的情况下比较少。 –
[Binary Search vs Ternary Search]可能的重复(https://stackoverflow.com/questions/32572355/binary-search-vs-ternary-search) –
@MattTimmermans,上面我已经指出了三元搜索如上每次迭代只做两次比较,所以,在最坏的情况下,这样做会不会相同? – mathmaniage