mysql二分法查詢億行 二分法查詢

2021-10-17 17:08:57 字數 998 閱讀 7803

如果讓你在一堆數中,檢視某個數是否存在?你會怎麼找?

按常識是不是乙個乙個看過去?這個我們就叫順序查詢

最好的情況就是看到第乙個就是你要的,就不會往下看了,但是如果是最後乙個數是你想要的,這種情況下,檢視次數就變成了數字的個數

如果數很多時,比如億計,會不會覺得效率很低

def linear_search(li, val):

for ind, v in enumerate(li):

if v == val:

return ind

else:

return none

下面我們介紹的二分法查詢,要比順序查詢有效的多,但是前提示是這堆數字要有序

實現思路大體如下:

取最中間數,拿它和查詢值比較

如果中間數大(假設數是從小到大排),那說要找的數在左邊,排除右邊

取左邊一半裡的中間數,和查詢值比較,這樣又可以排除一半,這迴圈下去,直到找到或得到沒有這個數

編寫二分法查詢的**時,注意左右邊界的變化,以及取中間值比較,一直迴圈的條件就是左右邊界不碰頭left<=right

def binary_search(li, val):

left = 0

right = len(li) - 1

while left <= right: # 候選區有值

mid = (left + right) // 2

if li[mid] == val:

return mid

elif li[mid] > val: # 帶查詢的值在mid左側

right = mid - 1

else: # li[mid] < val 帶查詢的值在mid右側

left = mid + 1

else:

return none

總結:二分法查詢前提是有序的,當然排序也又是要多花時間的,用不用二分法查詢看場景,如果你只是查一次,那二分法查詢,反而更慢,因為排序,如果你查好多次,那就可以排好一次好,復用二分法查詢

C 二分法查詢,遞迴二分法

用二分法來求需要查詢的值.includeusing namespace std 查詢key元素是否存在 int findkey const int buf 100 const int ilen,const int key else right left mid 1 查詢失敗 return 1 查詢k...

python二分法查詢 Python 二分法查詢

二分法查詢主要的作用就是查詢元素 lst 1,3,5,7,12,36,68,79 資料集 百萬級資料 num int input 請輸入你要查詢的元素資訊 for el in lst if num el print 存在 break else print 不存在 len lst 0 1 2 3 4 ...

二分法查詢

前幾天csdn上說只有10 程式設計師能寫出正確的二分法查詢 so.我在看過二分法查詢方法後寫了乙個 一次測試成功.範圍 需要次數 10 4 100 7 1000 10 10000 14 100000 17 1000000 20 除了對特別小的陣列外,二分法查詢表現是非常優秀的.每次對範圍加倍可以建...