一、算法思路
1、思路
分治算法的思想是:對于一個規模為N的問題,若該問題可以容易解決(比如規模N較小),則直接解決,否則将其分解為M個規模較小的子問題,這些子問題互相獨立,并且與原問題形式相同,遞歸的解決這些子問題,然後将各子問題的解合并得到原問題的解
2、分治法适用範圍
一般具有以下特征的問題可以使用分治算法求解:
(1)求解問題可以分解為若幹個規模較小的相同問題
(2)求解問題的規模分解到一定程度,就能夠很容易地求解
(3)合并子問題的解可以得到問題的解
(4)由求解問題所分解的各個子問題是互相獨立的
3、分治法的步驟
(1)分解:将要求解的問題劃分為規模較小的同類問題
(2)求解:當子問題劃分的足夠小的時候,用比較簡單的方法求解,得到子問題的解
(3)合并:按求解問題的要求,将子問題的解逐層合并,即可構成最終的解
二、分治法執行個體:比賽日程的安排
1、問題描述
某學校舉行乒乓球比賽,在初賽階段設定為循環賽,設有n位選手參賽,初賽共進行n-1天,每位選手要與其他每一位選手進行一場比賽,然後按積分排名選拔進入決賽的選手。根據學校作息時間,要求每位選手每天必須比賽一場,不能輪空。按此要求為比賽安排具體日程,即決定每天各選手對陣的對手
2、解題思路
可考慮使用分治法來簡化日程的安排。按照分治政策,可以将所有的參賽選手分為兩半,則n個選手的比賽日程可以通過n/2個選手比賽日程來決定。繼續用這種一分為二方法對選手進行劃分,直到隻剩2位選手時情況就很簡單了
設n位參賽選手按順序編号為1,2,3,…,n,比賽的日程表制作為一個二維表格,其中每一行為一位選手各天對陣的各選手編号,例如8位選手7天的比賽日程如下表所示:

在上表中,每一清單示當天的比賽安排,由左側選手編号對陣當天這列中對應編号的選手,如:
第1天,1号選手對陣2号選手,3号選手對陣4号選手
第3天,1号選手對陣4号選手,3号選手對陣2号選手
對于8位選手的情況,仍然比較複雜,通過分治法将其分為兩半,即隻考慮4位選手的比賽情況,可以編寫如下日程:
對于4位選手的對陣情況,可繼續采用分治法,将4個選手的比賽分解為2個選手的情況來考慮。隻有2個選手時,比賽日程的制定就變得很簡單了,比賽隻需要1天,有1号和2号選手對陣即可,如下圖所示:
上面的分解過程可以描述如下:
在日程安排還有個重要問題,就是通過分治法将問題分解後,怎樣将得到的結果合并在一起。觀察4位選手的日程情況,可以看到一些規律:
1、第1天的日程隻需将1、2号選手和3、4号選手的日程直接合并
2、第2、3天的日程相對就要複雜些,将4人的表格劃分為4部分,這時會發現,将表格左下角的值複制到右上角,左上角複制到右下角即可
是以使用分治法,要找到合并結果的規律