二分查找算法+Python代碼

1二分查找算法

二分查找是一種算法,其輸入是一個有序的元素列表。如果要查找的元素包含在列表中,二分查找返回其位置;否則返回null。

下面的實例說明了二分查找的工作原理。我隨便想一個1~100的數字,目標是你以最小的次數猜到這個數字。你每次猜測後,我會說小了、大了或對了。

1 2 3 ... 100

假設你從你開始一次往上猜測,過程會是這樣的。

 

這是簡單查找,更準確的說法是傻找。每次猜測都只能排除一個數字。如果我的數字是99,你得猜99次才能猜到。

最佳的查找方式,從50開始。

小了,但排除了一半的數字!你知道1~50都小了。接下來,你猜75.

大了,,那餘下的數字又排除了一半!使用二分法查找時,你猜測的是中間的數字,從而每次都將餘下的數字排除一半。接下來,你猜63(50-75中間的數字)。

這就是二分法查找。每次猜測排除的數字個數如下。不管我心裏想的那個數字,你在7次之內都能猜到,因爲每次猜測都將排除很多數字!

假設你要在字典中查找一個單詞,而該字典包含240000和單詞,你認爲每種查找最多需求多少步?

如果要查找的單詞位於字典末尾,使用簡單查找將需要240000步。使用二分查找時,每次排除一半單詞,直到最後剩下一個單詞。一般而言,對於包含n個元素的列表,用二分法查找最多需步,而簡單查找最多需要n步。僅當列表有序的時候二分法才管用。

2 Python代碼

def binary_search(orderly_list, number):
    print(orderly_list)
    if len(orderly_list) == 0:
        print('not exist')  # 每次查找後的剩餘部分
        return
    mid_index = len(orderly_list) // 2  # 向下取整
    if number > orderly_list[mid_index]:  # 要查找的數字小於列表中間值
        binary_search(orderly_list[mid_index + 1:], number)  # 列表折半繼續往右找
    elif number < orderly_list[mid_index]:  # 要查找的數字大於列表中間
        binary_search(orderly_list[0:mid_index], number)  # 列表折半繼續往左找
    else:
        print('find exist')
        # print(orderly_list.index(number))


number_list = [1, 3, 5, 7, 9, 11, 12, 15, 16]  # 定義一個列表
binary_search(number_list, N)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章