二分查詢是基於分治思想的一種演算法,所謂分治思想就是將一些規模很大難於直接解決的問題,縮小為乙個較小的問題就很容易解決的思想,(當然它的子問題仍可以繼續分解為相同的子問題)。歸結為一句話就是:「以大化小,各個擊破,分而治之,組合取果」。
二分查詢作為一種高效的查詢演算法,是解決一些有序序列查詢的不二之選。但他的缺點也就是使用於有序的陣列,有一定的侷限性。但二分在一些高效的程式設計中往往被用作優化的利器。因此,熟練應用二分查詢是必須的。
二分查詢的實現:比如有一列數從1
到100
,已經排好序,我們要查詢
25,按照傳統的逐個遍歷,需要查詢
25次,而採用二分查詢的方法,首先那
25和這組數列的中間的數做比較
50,結果查詢數小於中間數,所以區間【
50-100
】的數就可以捨棄了,然後查詢範圍就縮減為了【
1-49
】,接下來仍然那
25和查詢區間的中間數
25做比較,顯然這樣已經查詢到了,這樣只需要
2次就查詢到了,而普通的查詢方法需要
25次。
假設其陣列長度為n,其演算法複雜度為o(log(n)),灰常高效。
【二分演算法的非遞迴實現】
這個可能就是c++
中stl
庫中的那個。
1int 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。
【二分搜尋的遞迴實現】
1int 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 一般二分答案解決的問題是最優...