折半查詢法是效率較高的一種查詢方法。假設有已經按照從小到大的順序排列好的五個整數a0~a4,要查詢的數是x,其基本思想是: 設查詢資料的範圍下限為l=1,上限為h=5,求中點m=(l+h)/2,用x與中點元素am比較,若x等於am,即找到,停止查詢;否則,若x大於am,替換下限l=m+1,到下半段繼續查詢;若x小於am,換上限h=m-1,到上半段繼續查詢;如此重複前面的過程直到找到或者l>h為止。如果l>h,說明沒有此數,列印找不到資訊,程式結束。
該方法是查詢的範圍不斷縮小一半,所以查詢效率較高。三角形加倍折半法 加倍折半法的關鍵是如何「加倍」、「折半」。那麼「加倍」、「折半」的方法又是什麼呢?傳統的「加倍」的方法,是將線段延長一倍;傳統的「折半」的方法,是取線段的中點。豈不知,「三角形中位線定理」、「直角三角形斜邊上的中線等於斜邊的一半」、「等腰三角形的三線合一性質」、「平行線等分線段定理」……均有「加倍、折半」的功用。也就是說「加倍」「折半」的方法是眾多的、豐富的。而這些的方法基本上都是來自上述的一些重要的定理。
例1 已知:△abc中,ab=ac,延長ab到d,使db=ab,e是ab的中點。求證:cd=2ce
思路一:延長ce到f1,使ef1=ce,即用
延長的方法將ce擴大一倍為cf1,證cf1=cd
思路二:取cd的中點,即用「取中點」的方法將cd縮小一半為cf2,證cf2=ce。
以上為「傳統」的加倍折半法,引申後則有:
思路三:抓住e為ab中點這一特點,作△abf3,使ce為該三角形的中位線(過a作af3∥ce,交bc的延長線於f3),即用三角形中位線定理將ce擴大一倍為af3,證af3=cd
思路四:抓住b為ad中點這一特點,作△adc以cd邊為底邊的中位線(過b作bf4∥cd,交ac於f4),即:用三角形中位線定理將cd縮小一半為bf4,證bf4=ce
對三角形加倍折半法「用途」的引申傳統的加倍折半法主要應用於線段(或角)倍半關係的證明。隨著「方法」的引申,其功能也隨之得到了增強。特別是完全領會了加倍折半法的基本思想後,許多疑難問題就會迎刃而解。它的用途遠遠超出了原先的範圍,幾乎適用於所有含「2」的型別題。下面,分「結論中含有2」和「題設中含有2」兩中情況作簡單的介紹。
1、加倍折半法來解「結論中含有2」的型別題,實際上就是「分析法」的一種具體應用。「加倍折半法」在此起的作用,也可稱之為「解題技巧」。例1屬於該種型別的「傳統」例題,下面舉幾個引申後的例子。
例2 已知:△abc中,d是bc上的中點,f是ad上的任意一點,延長cf交ab於e。求證:af:df=2ae:be
思路:本題的難點是如何除去比例式中的「2」
方法一:將ae或df「加倍」,由於d是bc的中點,
過點b作bg∥df,交ce的延長線於g,則用三角形中位線定理將df「擴大一倍」為bg。這樣,原題就有效的轉化為證明af:bg=ae:be。
方法二:是將af或be「折半」,由於d是bc的中點,過點d作dh∥ab,交ce於gh,則用三角形中位線的定理將be「縮小一半」為dh。這樣,原題就有效的轉化為證明af:df=ae:dh。
2、用加倍折半法來解「題設中含有2」的型別題,實際上就是「綜合法」的一種具體的應用。「加倍折半法」在此起的作用,可稱之為「解題經驗」。
例3 已知:△abc中,ad是高線,∠abc=2∠acb。求證:cd=ab+bd
思路:該題屬於「截長補短法」的習題,
折半查詢法
但由於已知條件中有角的倍半關係,因
而用「加倍折半法」的思路也可以解決。
思路一:延長db到e1,使be1=ba(造等腰三角形將∠abc「折半「為e1),則∠e1=∠c,ae1=ac,cd=de1,故cd=ab+bd
思路二:作∠cae2,使∠cae2=∠c(造等腰三角形將∠c「加倍」為∠ae2b),則∠ae2b=∠abc,ae2=e2c=ab,bd=de2,故cd=ab+bd。
1.定義3個用來記錄索引值的變數,變數min記錄當前範圍最小索引值,初始值為0;變數max記錄當前範圍最大索引值,初始值為陣列長度-1;變數mid記錄當前當前範圍最中間元素的索引值,初始值為(min+max) / 22.使用迴圈,判斷當前範圍下,最中間元素值與指定查詢的數值是否相等
若相等,結束迴圈,返回當前範圍最中間元素的索引值mid
若不相等,根據比較結果,縮小查詢範圍為上一次查詢範圍的一般
中間元素值 比 要查詢的數值大,說明要查詢的數值在當前範圍的最小索引位置與中間索引位置之間,此時,更新查詢範圍為:
範圍最大索引值 = 上一次中間索引位置 -1;
中間元素值 比 要查詢的數值小,說明要查詢的數值在當前範圍的最大索引位置與中間索引位置之間,此時,更新查詢範圍為:
範圍最小索引值 = 上一次中間索引位置 +1;
在新的查詢範圍中,更新中間元素值的位置,再次使用最中間元素值與指定查詢的數值是否相等。
中間索引值 = (範圍最小索引值 +範圍最大索引值) / 2;
3.每次查詢範圍縮小一半後,使用if語句判斷,查詢範圍是否小於0個元素,若小於0個元素,則說明指定數值沒有查詢到,返回索引值-1。
int
search
(int
* p,
int number,
int under,
int top)
else
if(p[mind]
< number)
else
if(p[mind]
> number)
else
return mind+1;
}
折半查詢法
折半查詢法 include include int binsearch int x,int v,int n return 1 int main scanf d x scanf d n x 2 n 7 position binsearch x,v,n 呼叫函式時,不要再引數的型別,陣列v,用v代替就好...
折半查詢法
輸出檔案 輸出檔案 half.in half.out 大魔導師培根曾經說過 讀史使人明智,讀詩使人聰慧,演算使人精密,哲理使人深刻,倫理學使人有修養,邏輯修辭使人善辯。由此可見書籍的重要性是不言而喻的。而與書籍天天打交道的圖書管理員,更是奪天地之造化,吸日月之精華的 神之職業 據史料記載,魔法世界從...
折半查詢法
折半查詢法也稱二分查詢法,是一種快捷有效的查詢關鍵字的方法。在所需查詢資料量較大時,可高效縮短用迴圈遍歷的查詢時間,大大提公升機器效率 但其缺點是所需查詢陣列必須是有序的,下以公升序為例。例 有乙個陣列arr,裡面公升序存放了10個整數,arr 10 任意輸入乙個數字,用折半查詢法找到其位於陣列中的...