分而治之演算法

2021-08-09 10:07:48 字數 1834 閱讀 1596

今天的演算法是乙個叫分而治之的思想,這個思想感覺對於程式優化,節約時間很有幫助,但是對於實際中的用途還是稍微差了點!這個思想很簡單即使把乙個大的程式,分成一小段一小段的區分步執行,這樣的好處就是減少複雜度,比如我們要計算2的100次方,我們通常的思想就是

for (int i = 0 ; i < 100 ; i++)

好吧這麼計算真的很麻煩,我們可以這樣 

int    step = 2*2 ;

for (int i = 0 ;  i < 50 ; i++)

這樣可以節約一半的時間,所以他的效率還是蠻高的,但是除了這中比較簡單的例項以外,其他的分而治之的方法,真的是少子又少。下面講乙個歸併排序和快速排序的方法

歸併排序:

感覺歸併排序就是插入排序,但是可能複雜度要小一些,他的思路就是先將數列分成兩組,再將每一組分成兩組,直至將數列全部分成乙個數,再兩個兩次合併,再進行插入排序。由於不會插圖,這個排序本身並不好講,所以我也不說太多了。

快速排序:

就是選擇最後乙個數,比他大的放左邊,比他小的放右邊,在後再對剩下的陣列分別做這個方法的遞迴。

這裡面看到了乙個快速乘積的演算法叫做karasuba演算法:(這個網上自己搜尋去吧,他講的仔細)

下面是幾個分治演算法的例題

就是乙個籬笆上的木板高低不是很統一,要找出籬笆上最大的長方形面積?

#include

#include

using namespace std;

int main()

for (int i = 0; i < data.size(); i++)

break;

}temp_num += data.at(i);

if (temp_num > final_num && j == data.size()-1)}}

cout << "最大的和是" << final_num;

char ch;

cin >> ch;

return 0 ;}

以上是我的答案,但是我真的想說自己的演算法真的是太low了,因為是個人就能想得到,書上寫的演算法則是將這個問題分成3種情況

在選擇一塊木板的情況下,最大的長方形在左邊,在右邊,和在木板的兩邊  

即我們對每個木板進行訪問,同時判斷如果在訪問一塊木板的時,發現木板兩邊的木板都高於該木板,則繼續往外擴充套件,以此類推。

粉絲見面會問題:

輸入乙個樂隊組合成員的男女順序,再輸入粉絲團的男女順序,粉絲團每個人依次走過樂團成員,並與之擁抱。其中出現粉絲是男的,樂團的隊員的男的情況則改擁抱為握手,請問樂團有多少次全體隊員都能擁抱:

#include

#include

#include

using namespace std;

int main()

for (string::iterator it = fans.begin(); it < fans.end(); it++)

for (int i = 0; i < vector_fans.size() - vector_team.size() + 1; i++)

vector_last.push_back(temp);

cout << endl << temp;

}for (vector::iterator it = vector_last.begin(); it < vector_last.end(); it++)

}cout << "同時擁抱次數" << num;

char a;

cin >> a;

return 0;}

大概思路就是把女的看作0 ,把男的看作1 ,然後將兩個序列看作兩個數,然後將其相稱,判斷其中結果中為0 的個數,其中比不包括不是全體隊員的情況。

分而治之演算法

演算法是問題的分步驟解決的方法。分而治之的思想是 有很多問題,可以劃分為多個小問題,而小問題本身是易於解決的,那麼就通過找到 劃分方法 得到小問題後,最終解決原問題。一 是否所有問題都能劃分成小問題?比如1 1 可以劃分麼?不行。因此並不是所有問題都能夠劃分。二 怎樣的問題能夠劃分?和規模n相關的,...

演算法設計與分析 分而治之演算法 金塊問題

目錄 題目描述 問題分析 編寫 列印結果 老闆有一袋金塊 共n塊,n是2的冪 n 2 最優秀的雇員得到其中最重的一塊,最差的雇員得到其中最輕的一塊。假設有一台比較重量的儀器,希望用最少的比較次數找出最重和最輕的金塊。對於一般思路 通過乙個函式max進行n 1次比較來找到最重的金塊,然後再從餘下的n ...

分而治之 D C)

分而治之 能將問題逐步分解,但並非可用於解決問題的演算法,而是一種解決問題的思路。分而治之演算法是遞迴的,使用分而治之 d c 解決問題的過程包括兩個步驟 找出遞迴邊界條件,這種條件必須盡可能簡單 不斷地將問題分解 或者說縮小規模 直到符合遞迴邊界條件。注意 假設要將一塊地均勻地分成方塊,確保分出的...