排序算法-10-算法-分治法(Divide and Conquer)

##Divide and Conquer - 分治法 在計算機科學中,分治法是一種很重要的算法。分治法即**『分而治之』**,把一個複雜的問題分紅兩個或更多的相同或類似的子問題,再把子問題分紅更小的子問題……直到最後子問題能夠簡單的直接求解,原問題的解即子問題的解的合併。這個思想是不少高效算法的基礎,如排序算法(快速排序,歸併排序)等。算法

###分治法思想 分治法所能解決的問題通常具備如下幾個特徵:ide

  1. 問題的規模縮小到必定的程度就能夠容易地解決。
  2. 問題能夠分解爲若干個規模較小的相同問題,即該問題具備最優子結構性質。
  3. 利用該問題分解出的子問題的解能夠合併爲該問題的解。
  4. 該問題所分解出的各個子問題是相互獨立的,即子問題之間不包含公共的子問題。

分治法的三個步驟是:排序

  1. 分解(Divide):將原問題分解爲若干子問題,這些子問題都是原問題規模較小的實例。
  2. 解決(Conquer):遞歸地求解各子問題。若是子問題規模足夠小,則直接求解。
  3. 合併(Combine):將全部子問題的解合併爲原問題的解。

分治法的經典題目:
Divide and Conquer - 分治法 在計算機科學中,分治法是一種很重要的算法。分治法即『分而治之』,把一個複雜的問題分紅兩個或更多的相同或類似的子問題,再把子問題分紅更小的子問題……直到最後子問題能夠簡單的直接求解,原問題的解即子問題的解的合併。這個思想是不少高效算法的基礎,如排序算法(快速排序,歸併排序)等。遞歸

分治法思想 分治法所能解決的問題通常具備如下幾個特徵:基礎

問題的規模縮小到必定的程度就能夠容易地解決。 問題能夠分解爲若干個規模較小的相同問題,即該問題具備最優子結構性質。 利用該問題分解出的子問題的解能夠合併爲該問題的解。 該問題所分解出的各個子問題是相互獨立的,即子問題之間不包含公共的子問題。 分治法的三個步驟是:計算機科學

分解(Divide):將原問題分解爲若干子問題,這些子問題都是原問題規模較小的實例。 解決(Conquer):遞歸地求解各子問題。若是子問題規模足夠小,則直接求解。 合併(Combine):將全部子問題的解合併爲原問題的解。搜索

分治法的經典題目:循環

  1. 二分搜索
  2. 大整數乘法
  3. Strassen矩陣乘法
  4. 棋盤覆蓋
  5. 歸併排序
  6. 快速排序
  7. 循環賽日程表
  8. 漢諾塔
相關文章
相關標籤/搜索