猜數字遊戲 二分查詢顯威力

2021-09-14 01:58:03 字數 1417 閱讀 3389

規則就像剛才說的一樣,現在開始猜數字,假設待猜數字為57,讓我們先用之前的猜法試一下,乙個乙個猜,從1開始,這樣猜的話,最少得猜57次,6要是99的話,得猜99次,現在讓我們試一下從中間開始的猜法。從50開始,則猜數過程如下:

50---->小了、75---->大了、63---->大了、57---->猜對了

從以上過程可以看出,從中間查詢,要比乙個乙個按順序查詢快很多,隨著資料規模的增大,這種差異會越來越明顯。(感興趣的話可以自己試一下吧!)下面讓我們熱烈歡迎今天的主角,二分查詢演算法。

猜數字的時候,有個隱含的前提,它給出了乙個猜的範圍,我們也發現這些序列是連續的,其實從中間開始猜數字就蘊含了二分查詢的思想,或者說它就是通過二分查詢來實現的,每次排除一半錯誤的答案,來逼近正確答案,跟學過的對數函式一樣

分析之前得了解時間複雜度、空間複雜度及大o表示法,這幾個概念,在此假設大家都熟悉這幾個知識點(我差不多都忘完了),在此先給出一些常見的大o執行時間(由快到慢排布):

# -*- coding: utf-8 -*-

defbinary_search

(list

, item)

: low =

0# 查詢範圍下限

high =

len(

list)-

1# 查詢範圍上限

# print(high)

while

(low <= high)

: mid =

(low + high)//2

# 下標需為整數

guess =

list

[mid]

# 從中間得到所猜的數

# print(guess)

if(guess == item)

:# 剛好猜準

return

(mid)

# 跳出並返回下標

elif

(guess < item)

:# 猜的數字小了,則小於中間數的那一半均小於所猜數

low = mid+

1else

:# # 猜的數字大了,則大於中間數的那一半均大於所猜數

high = mid -

1return

(none

)# 測試用例

sea_num =

int(

input

("請輸入乙個0-10的測試數字,查詢不到則返回none:"))

list1 =[2

,4,5

,6,9

,10]print

(binary_search(list1, sea_num))

執行結果如下:

猜數字遊戲,二分查詢 ,輸密碼遊戲

1.完成猜數字遊戲 首先這個 要先理解他如何猜數字。不可能是在 中寫乙個數,你來猜它吧。所以你得有乙個可以產生隨機數的函式。也就是rand 所以接下來就好寫了。只要通過迴圈比較來告訴它值低了 還是 高了 我是通過函式來實現的,乙個輸出函式,乙個遊戲函式。結合起來。define crt secure ...

二分查詢 折半查詢 和猜數字小遊戲

一 二分查詢 1 二分查詢的思想 前提 二分查詢的序列一定是按照公升序或降序排列,不然無法使用。定義left指向第乙個元素,right指向最後乙個元素,mid指向中間元素 mid left right left 1 定義size sizeof arr sizeof arr 0 可以求得陣列的整個長度...

二分查詢演算法(折半查詢)猜數字

二分查詢演算法是建立在有序陣列基礎上的 在未接觸到二分查詢演算法時,我們對陣列進行遍歷,每個元素進行比較,即順序查詢。二分查詢較順序查詢更優,因為這種演算法每一次比較都使查詢範圍縮小一半。演算法思想為 查詢過程從陣列的中間元素開始,如果中間元素正好是要查詢的元素,則查詢過程結束 如果某一待查詢元素大...