分治演算法 二分求最大最小

2021-08-28 16:39:41 字數 542 閱讀 4380

例題1:給n個實數,求它們之中最大值和最小值,要求比較次數盡量小。

思路:用遞迴呼叫函式,在函式裡做出以下判斷:

1 若left==right(只有乙個數) max和min都為這個數

2 若left==right-1(只有兩個數) max為較大的,min為較小的

3 除以上兩種以外 首先定義中間值d,在遞迴呼叫left到d與d+1到right的函式,max為兩函式返回值的最大值,min為最小值

核心思路如上

原**:

錯誤原因:思路沒錯,但11行的if前面沒有else,導致15行的else只建立在11行的if上,與思路不符,把if前面填個else即可:

沒有考慮到第11行如果沒有else,那樣15行的else只對應著11行的if,而與7行的if沒有關係,而當right1left1時,right1不等於left1加1,所以當left1right1時,15行判斷沒有錯誤,照樣執行,與思路相悖;

經驗教訓:

在今後使用if…else進行判斷時,盡量用if…if …if 來代替(當然漏掉的可能性會增加),爭取不重複,不漏掉.

分治演算法 二分搜尋

一.演算法簡介 以有序表表示靜態查詢表時,查詢函式可以用二分查詢 binary search orhalf intervalsearch 來實現。這種演算法基於分治。二 複雜度分析 二分查詢的時間複雜度是 o log n 最壞情況下的時間複雜度是 o n 三 演算法思想及步驟 二分查詢 binary...

分治演算法 1 二分查詢

分 把問題劃分成子問題 治 遞迴的求解子問題 合 把子問題的解合併成問題的解 在電腦科學中,二分查詢又稱為折半搜尋,二分搜尋,是一種在有序陣列中查詢某一特定元素的演算法。搜素過程從陣列的中間元素開始,如果中間元素正好是要查詢的元素,則搜素過程結束 如果某一特定元素大於或者小於中間元素,則在陣列大於或...

分治演算法之二分查詢

c 提供一類stl函式來實現對陣列中元素的檢索,其中較為簡單且應用較廣的是binary search,upper bound和lower bound,它們都被包含在標頭檔案 include中。lower bound g 用來找以g為下界的第乙個元素,而upper bound g 則用來找以g為上界的...