分治法學習

2021-06-02 00:39:38 字數 770 閱讀 6880

1.將問題的例項劃分為同乙個問題的幾個較小的例項,最好擁有同樣的規模

2.對這些較小的例項求解(一般使用遞迴方法,但在問題規模足夠小的時候,也會用其他方法)

3.如果必要的話,合併這些較小問題的解,以得到原始問題的解。

舉個例子說明下:比如計算n個數字的和。如果n>1,我們可以把該問題分解為它的兩個例項:計算前n/2個數字的和以及計算後n/2個數字的和。一旦這兩個和都被計算出來了(通過遞迴應用上述方法),我們就可以把這兩個和相加,這樣就得到原始問題的答案。

#include

using namespace std;

const int size = 100;

int arr[size];

//排序陣列arr[fir:end]

void mergesort(int fir,int end)

for( i=fir;i<=end;i++)

arr[i]=temparr[i];

}int main()

a[i]=temp;

return i;

}void quicksort(int low,int high)

{if(low>n;

for(i=0;i>a[i];

quicksort(0,n-1);

for(i=0;i分治法在很多演算法中都有用到,以上兩個例子只是比較典型的應用。演算法中的方法很多,本人覺的學習演算法比較有用的方法就是,了解某種方法以後,最去做有關這種方法的演算法或看相關的演算法題來加深理解。不斷學習中,加油!

演算法學習 點分治

演算法梗概 點分治,是一種針對可帶權樹上簡單路徑統計問題的演算法。本質上是一種帶優化的暴力,帶上一點容斥的感覺。注意對於樹上路徑,並不要求這棵樹有根,即我們只需要對無根樹進行統計。接下來請把無根樹這一關鍵點牢記於心。引入 話不多說,先看一題 給定一棵樹,樹上的邊有權值,給定乙個閾值 k 請統計這棵樹...

演算法分析之分治法學習總結(一)

演算法分析之分治法學習總結 一 一 解決問題的型別 當我們要解決乙個輸入規模 n 很大的問題時,直接處理往往比較困難或者根本無法 求解,我們希望把輸入規模縮小,即分成很多份,分別解決了,並且這些小問題容易合起來從而解決整個問 題。二 解題關鍵 1 如何分 我們往往先把輸入分成兩個與原來相同的子問題,...

分治(二) 三分法學習筆記

當答案具有可二分性時,我們可以用二分答案來解決。但是,如果要求出凸性函式或凹性函式的最值時,二分就毫無用武之地了,這時,我們就可以用三分法來求出答案。乙個凸性序列 凹性序列通俗的說法就是在該序列最大值 最小值的左邊滿足不嚴格單調遞增 遞減,右邊滿足不嚴格單調遞減 遞增。如1,2,3,6,4是乙個凸性...