Pythonアルゴリズム-バイナリ検索アルゴリズム

アルゴリズム(アルゴリズム)

アルゴリズムとは、問題解決スキームの正確で完全な説明を指します。これは、問題を解決するための一連の明確な指示です。アルゴリズムの指示は、初期状態から入力でき、実行時に(場合によっては空の)計算を記述します。最初は、一連の限定された明確に定義された状態の後、最終的に出力を生成し、最終状態で停止します。この
アルゴリズムは、Pythonの不可欠な部分でもあります。今日は pythonのバイナリ検索アルゴリズムについて学習します。

バイナリ検索

私たちの日常生活では、リストから要素を見つけたい場合、どのような方法がありますか?検索を1つずつ比較できます。要素が100個ある場合、100単位の時間を費やす必要があり、無駄が多くなります。時間は、電話帳で誰かの電話番号を検索するときと同じように、ページごとに検索する必要があり、時間と手間がかかります。もっと労力を節約する方法はありますか?バイナリ検索は良い選択です。
バイナリ検索はアルゴリズムです。 、その入力は要素の順序付きリストです(順序付けする必要があります)。検索する要素がリストに含まれている場合、バイナリ検索はその位置を返します。それ以外の場合はnullを返します。binary_searchは順序付き配列と要素を受け入れます。指定した場合要素がこの配列にある場合、その位置が返されます。
通常プレイするゲームと同じように、
1から100までの数値推測するには、2つの方法があります
。1。1から始めて、2、3、4、5 ...知っている推測したい数字は、1なら1回成功したと言ってもいい
のですが、100なら100回2を推測しなければなりません。真ん中の数字(50)を推測して来てください。この数値が50より大きいか小さいかを判断します。50より大きい場合、次回は51から100以内で推測されます。50より小さい場合、次回は1から49以内で推測されるため、推測の範囲は次のようになります。推測が正しくなるまでどんどん小さくしていきます。こうすることで、正解を得るために最大7回推測するだけで済みます。これはバイナリ検索です。

def binary_search(list, item):  # 其输入的是一个列表和查找的元素
    a = 0   # 数字在0~列表的长度之间
    b = len(list) - 1
    while a <= b:   # 判断列表之中是否存在数字
        find_num = (a + b)      # 找到列表中间的那个数字
        num = list[find_num]
        if num == item:     # 判断查找的元素是否就是列表中间的数字
            return find_num     # 若是则返回中间的那个数字
        elif num > item:        # 若中间的那个数字大于查找的数字
            b = find_num - 1        # 则将查找范围的尾减半
        else:                   # 若中间的那个数字小于查找的数字
            a = find_num + 1        # 则将查找范围的首减半
    return None


my_list = [1, 3, 5, 7, 9]
print(binary_search(my_list, 5))        # 结果为2
print(binary_search(my_list, -5))       # 结果为None

おすすめ

転載: blog.csdn.net/Layfolk_XK/article/details/108198743