二分搜尋的基本相關問題

2022-03-20 03:38:28 字數 1191 閱讀 9100

二分查詢是基於分治思想的一種演算法,所謂分治思想就是將一些規模很大難於直接解決的問題,縮小為乙個較小的問題就很容易解決的思想,(當然它的子問題仍可以繼續分解為相同的子問題)。歸結為一句話就是:「以大化小,各個擊破,分而治之,組合取果」。

二分查詢作為一種高效的查詢演算法,是解決一些有序序列查詢的不二之選。但他的缺點也就是使用於有序的陣列,有一定的侷限性。但二分在一些高效的程式設計中往往被用作優化的利器。因此,熟練應用二分查詢是必須的。

二分查詢的實現:比如有一列數從1

到100

,已經排好序,我們要查詢

25,按照傳統的逐個遍歷,需要查詢

25次,而採用二分查詢的方法,首先那

25和這組數列的中間的數做比較

50,結果查詢數小於中間數,所以區間【

50-100

】的數就可以捨棄了,然後查詢範圍就縮減為了【

1-49

】,接下來仍然那

25和查詢區間的中間數

25做比較,顯然這樣已經查詢到了,這樣只需要

2次就查詢到了,而普通的查詢方法需要

25次。

假設其陣列長度為n,其演算法複雜度為o(log(n)),灰常高效。

【二分演算法的非遞迴實現】

這個可能就是c++

中stl

庫中的那個。

1

int binarysearch(int a,int n,int x)//

a待查詢陣列 n查詢範圍 x被查詢數 215

return -1;//

查詢失敗

16 }

【stl中的binary_search】

當然,如果是純粹的二分搜尋,可以直接呼叫algorithm中的二分搜尋函式,上面的就都省了。、

binary_search(num,num+n,key);

這裡的引數num指查詢序列(已經排過序),num-num+n指查詢範圍,key指待查詢的值。

如果查詢成功則返回true,否則返回false。

【二分搜尋的遞迴實現】

1

int binarysearch(int a,int x,int low,int high)//

a待查詢陣列 low/high查詢範圍 x被查詢數

2

二分作為一種基本的演算法,在程式設計題中往往不會單獨用到,而更像是一種工具,常用作一些問題的優化。

二分搜尋樹基本操作

原 查詢刪除等等。insert插入 find查詢 delete刪除 最大值最小值 前驅後繼successor predecessor 上界下屆floor ceil 某個元素的排名rank 尋找第k大元素 select int search int arr,int n,int key return 1...

Java 二分搜尋 二分查詢

對陣列元素進行逐個查詢顯然是費時費力的工作,我們可以使用一些方法快速地搜尋出陣列中元素的指定位置.接下來我們介紹一種方法 二分搜尋法 二分搜尋法充分利用了元素間的次序關係.基本思想 將n元素分成個數大致相同的涼拌,取arr n 2 與欲查詢的x做比較,如果 下面將採用兩種方式 遞迴 非遞迴 來展示二...

二分(二分答案 二分搜尋)與單調性

經典二分搜尋是二分空間範圍。二分答案又叫二分猜值,是二分解的值空間。其實可以統一,普通的二分搜尋也是二分答案值域 下標空間,也是猜值。二分必須滿足單調性,最直觀的,二分搜尋只能在有序陣列上進行。單調性體現在,下標和元素值是單調的,也就是 if j i 有 a j a i 一般二分答案解決的問題是最優...