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