常用演算法總結 分治

2022-08-01 10:57:11 字數 1384 閱讀 8046

分治,字面上的解釋是"分而治之",就是把乙個複雜的問題分成兩個或更多的相同或相似的子問題,再把子問題分成更小的子問題……直到最後子問題可以簡單的直接求解,原問題的解即子問題的解的合併。在電腦科學中,分治法就是運用分治思想的一種很重要的演算法。分治法是很多高效演算法的基礎,如排序演算法(快速排序,歸併排序),傅利葉變換(快速傅利葉變換)等等。

在求解乙個輸入規模為n,而n的取值又很大的問題時,直接求解往往非常困難。這時,可以先分析問題本身所具有的某些特性,然後從這些特性出發,選擇某些適當的設計策略來求解。這種方法,就是所謂的分治法。

採用分治法解決的問題一般具有的特徵如下:

1. 問題的規模縮小到一定的規模就可以較容易地解決。

2. 問題可以分解為若干個規模較小的模式相同的子問題,即該問題具有最優子結構性質。

3. 合併問題分解出的子問題的解可以得到問題的解。

4. 問題所分解出的各個子問題之間是獨立的,即子問題之間不存在公共的子問題。

1. 劃分步:把輸入的問題劃分為k個子問題,並盡量使這k個子問題的規模大致相同。

2. 治理步:當問題的規模大於某個預定的閾值n0時,治理步由k個遞迴呼叫組成。

3. 組合步:組合步把各個子問題的解組合起來,它對分治演算法的實際效能至關重要,演算法的有效性很大地依賴於組合步的實現。

分治法的關鍵是演算法的組合步。究竟應該怎樣合併,目前沒有統一的模式,因此需要對具體問題進行具體分析,以得出比較好的合併演算法。

例題請見黑白棋子的移動

二分查詢又稱折半查詢,優點是比較次數少,查詢速度快,平均效能好,占用系統記憶體較少;其缺點是要求待查表為有序表,且插入刪除困難。因此,折半查詢方法適用於不經常變動而查詢頻繁的有序列表。首先,假設表中元素是按公升序排列,將表中間位置記錄的關鍵字與查詢關鍵字比較,如果兩者相等,則查詢成功;否則利用中間位置記錄將表分成前、後兩個子表,如果中間位置記錄的關鍵字大於查詢關鍵字,則進一步查詢前一子表,否則進一步查詢後一子表。重複以上過程,直到找到滿足條件的記錄,使查詢成功,或直到子表不存在為止,此時查詢不成功。

必須採用順序儲存結構。

2.必須按關鍵字大小有序排列。

時間複雜度無非就是while迴圈的次數!

總共有n個元素,

漸漸跟下去就是n,n/2,n/4,....n/2^k(接下來操作元素的剩餘個數),其中k就是迴圈的次數

由於你n/2^k取整後》=1

即令n/2^k=1

可得k=log2n,(是以2為底,n的對數)

所以時間複雜度可以表示o(h)=o(log2n)

分治演算法訓練總結

對c 常用演算法之一分治演算法訓練結束了,也稍稍學到了一點以前不常用過的內容。分治演算法的核心就是把大的問題化成小的問題,大部分題目的解決方法,感覺和以前上課時老師講的二分法很像,都是定義乙個中間變數,然後同時從兩邊開始遍歷 比較。也不知道為什麼在做分治演算法相關的題時,個別題好像有點兒動態規劃的思...

常用十大演算法 分治演算法

將複雜問題拆分成許多個具有規律的重複性操作的子問題,通過求解子問題再合併,使之成為複雜問題的結果。分治演算法可以求解的一些經典問題 二分搜尋,大整數乘法,棋盤覆蓋,合併排序,快速排序 線性時間選擇,最接近點對問題,迴圈賽日程表,漢諾塔 下面以漢諾塔求解為例,了解分治演算法 漢諾塔 又稱河內塔 問題是...

演算法 分治演算法

分治策略主要利用遞迴來解決問題,它包括以下三個步驟 分解 將問題分解為一與原問題類似並且比原問題規模更小的子問題 解決 當分解的子問題足夠小時,直接給出答案,否則用遞迴打方式求解 合併 將子問題的解合成原問題的解 下面考慮乙個簡單的利用分治演算法的歸併排序的例子 問題的形式化描述如下 輸入 a是 乙...