分治演算法 1

2021-07-24 02:29:27 字數 843 閱讀 9756

(1)設計過程:

divide:整個問題劃分為多個子問題

conquer:求解各子問題(遞迴呼叫子問題的演算法)

combine:合併子問題的解,形成原始問題的解

(2)分析過程:

(2.1)建立遞迴方程 t(n)=at(n/b)+d(n)+c(n)

divide時間複雜度:d(n)

conquer時間複雜度:at(n)

combine:c(n)

當n小於乙個常數時,t(n)=θ(1)

(2.2)遞迴方程求解

二、分治演算法舉例

(1)歸併排序

d(n)=θ(1),由圖可知,一直分解到最後得到的子問題可以在常數時間內完成;

at(n)=2t(n/2),由圖可知,在遞迴求解的時候是把乙個問題分解為兩部分,然後這兩部分進行比較確定大小順序,也就是n/2的規模,最後的一步看做是把原問題一分為二,分別進行求解再合併,也就是a=2。

c(n)=o(n),合併的時間複雜度是o(n),關於合併,我的理解是這樣的,在遞迴的最後一步,我們把分解的子問題的結果重新合併為原始問題的結果,這個結果合併的過程就是c(n),毫無疑問,兩個有序陣列合併為乙個陣列,只要每次取陣列的下標最小的那兩個比較,依次確定位置就可以了,時間複雜度是o(n)。

所以,歸併排序的時間複雜度是:

t(n)=2t(n/2)+o(n)=o(nlogn)

演算法練習 1 放蘋果(分治演算法)

首先談談分治演算法為何物。在電腦科學中,分治法是一種很重要的演算法。字面上的解釋是 分而治之 就是把乙個複雜的問題分成兩個或更多的相同或相似的子問題,再把子問題分成更小的子問題 直到最後子問題可以簡單的直接求解,原問題的解即子問題的解的合併。這個技巧是很多高效演算法的基礎,如排序演算法 快速排序,歸...

分治演算法 1 金塊問題 遞迴和分治策略

例14 2 金塊問題 有乙個老闆有一袋金塊。每個月將有兩名雇員會因其優異的表現分別被獎勵乙個金塊。按規矩,排名第一的雇員將得到袋中最重的金塊,排名第二的雇員將得到袋中最輕的金塊。根據這種方式,除非有新的金塊加入袋中,否則第一名雇員所得到的金塊總是比第二名雇員所得到的金塊重。如果有新的金塊週期性的加入...

演算法 分治演算法

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