「アルゴリズムグラフィック」研究ノート1:バイナリ検索

   假设要在电话簿中找一个名字以K打头的人,现在谁还用电话簿!)可以从头开始翻页,直到进入以K打头的部分。但你很可能不这样做,而是从中间开始,因为你知道以K打头的名字在电话簿中间。
   又假设要在字典中找一个以O打头的单词,你也将从中间附近开始。
   现在假设你登录Facebook。当你这样做时,Facebook必须核实你是否有其网站的账户,因此必须在其数据库中查找你的用户名。如果你的用户名为karlmageddon,Facebook可从以A打头的部分开始查找,但更合乎逻辑的做法是从中间开始查找。
   这是一个查找问题,在前述所有情况下,都可使用同一种算法来解决问题,这种算法就是二分查找。
   二分查找是一种算法,其输入是一个有序的元素列表(必须有序的原因稍后解释)。如果要 查找的元素包含在列表中,二分查找返回其位置;否则返回null。

バイナリサーチの違いを分析し、シンプルを見つけるだけで推測1-100番号:

シンプルな検索 バイナリ検索
方法 数、推測の数。推測が大きすぎるし、小型デジタル推測がポイントである場合は、推測が大きすぎると、その後、デジタル推測大きなポイント、ターゲットフィギュアまで推測 半推測から50 100を開始し、上記の手順を繰り返し、続いて、各中間残りの図は、番号の数字を推測している(または少数の負の半分であってもよい)、目標数推定まで
時代の最悪実行さ n回 log2n回

バイナリサーチPythonコード:
注文した配列と要素を受け入れbinary_search機能。指定された要素が配列に含まれている場合、この関数は、その位置に復帰します。全体の配列の先頭に-あなたはあなたが見つけるしたいアレイ部を追跡します。

def binary_search(list, item):
    low = 0
    high = len(list) - 1
    while low <= high:
        mid = (low + high) //2
        guess = list[mid]
        if guess == item:
            return mid
        if guess > item:
            high = mid - 1
        else:
            low = mid + 1
    return None


my_list = [1, 3, 5, 7, 9]
print(binary_search(my_list, 3))  # => 1
print(binary_search(my_list, -1))

出版元の記事 ウォンの賞賛0 ビュー18

おすすめ

転載: blog.csdn.net/Kingchuxu/article/details/104552128