分治法 迴圈賽日程安排問題

2021-09-07 10:42:32 字數 2951 閱讀 5251

問題

描寫敘述:

設有n(

2^k)位選手參加網球迴圈賽,迴圈賽共進行n-1

天,每位選手要與其它

n-1位選手比賽一場。且每位選手每天僅僅能賽一場,試安排比賽。

舉例說明:1,當

n為偶數時,迴圈賽一共要進行n-1

天;比方,有運動員:周董,信哥,蔡依林,小七。一共

4個人,能夠例如以下安排:

運動員第一天

第二天第三天

周董信哥

蔡依林小七

信哥周董

小七蔡依林

蔡依林小七

周董信哥

小七蔡依林

信哥周董

能夠看出。當四個人比賽的時候,要比

3天才幹所有比完。

2,當n為奇數時,迴圈賽要進行

n天;如圖,現有運動員:周董,信哥。蔡依林

,比賽安排表例如以下:

運動員第一天

第二天第三天

周董信哥

蔡依林x

信哥周董

x蔡依林

蔡依林x

周董信哥

能夠看出,當n=3

時,人數為奇數,而且出現輪空現象。

綜上。我們能夠得出乙個基本結論

比賽次數=

n為偶數

n-1天

n為奇數 n

天 演算法描寫敘述:

依照分治策略,我們將

n個選手先一分為二。每組n/2

人。假設

n為奇數,則(

n+1)

/2後分組。然後像我們一起的歸併排序那樣,一直分下去,直到最後僅僅有兩個人比賽。

舉例說明。

6個人比賽。須要比賽

5天,安排例如以下:

1234

5621

5364

3612

4545

6132

5426

1363

4521

回憶我們的歸併排序,歸併排序是先分開。最後再合起來。

這裡也是。

我們先將

6個人分成

2組。每組

3個人(

[1,2,3],[4,5,6]

),然後發現

3是個奇數。然後在每組中+1

個虛擬人:x和

y;這樣,每組就變成了

4個人,然後將這

4個人在除以

2。我們就得到了乙個兩兩組合的小的組。

首先來看

[1,2]; [3,x]

1221

3xx3

將這兩組合起來:12

213x

x3

這樣,第一天的比賽排好了,然後來排第二天的比賽。

接下來第二天讓1跟

3比較,這樣

2就僅僅能跟

x比較了。 1

2321

33x1

x32

依此類推。第三天,讓1跟

x比較,2跟

3比較:

123x

21x3

3x12

x321

這裡要得到

3個選手的比賽安排,所以,我們將假象的

x去掉。並將它的位置以

*取代:

123*21

*33*

12

然後我們也依照這個規律,安排

[4,5,6]

的日程,得到**

456*54

*66*

45

將前3天的日程安排合併起來:

123*

21*3

3*12

456*

54*6

6*45

我們能夠看到,第一天。3和

6都空暇。能夠讓他們比賽。第二天,2和

5都空暇,能夠讓他們比賽;第三天。1和

4空暇,讓他們相互比賽。

所以,上表又一次安排,得到前

3天的日程安排表:

1234

2153

3612

4561

5426

6345

這樣,我們就比較過了

[1,2,3]

和[4,5,6].

然後迴圈下,得到:

[1,2,3]& [5,6,4]

[1,2,3]& [6,4,5]

安排三天的比賽:12

35 2

16 3

34 1

2564

1 65

2 44

3 56

1236 2

14 3

35 1

2645

1 46

2 55

3 64

選取黃色的日程安排,增加到前

3天的日程安排表中:

1234

5 6

2153

6 4

3612

4 5

4561

3 2

5426

1 3

6345

2 1

假設n恰好等於

2^k,那麼。安排日程表就變得比較簡單了,我們先安排兩位選手,

1221

安排4位選手:

1 2

342

1 43

341

2 43

2 1

這時候,我們先依照兩個選手的。將1和

2的安排填好,然後填寫左下角的安排,然後將左下角的元素抄到右上角,最後將左上角的元素抄到右下角。

小結:

分治法在將大問題一步一步兩兩分,直到劃分成能夠解決的小問題時,求出這些小問題的解,然後再將小問題合成大問題的解,可是前提是這些小問題在求解是不受到其它小問題的解的影響的。

迴圈賽日程安排問題

問題描寫敘述 設有n n 2 k 支隊伍參加迴圈賽,迴圈賽共進行n 1天,每支隊伍要與其它n 1支隊伍比賽一場,且每支隊伍每天必須比賽一場,不能輪空。試按此要求為比賽安排日程。演算法思路 我們先安排奇數下標位置與偶數下標位置之間的比賽,就有n 2場,方法非常easy,team 2k 2k,全部奇數號...

分治法 迴圈賽日程表問題

迴圈賽日程表問題問題描述 設有n n 2 k 位選手參加網球迴圈賽,迴圈賽共進行n 1天,每位選手要與其他n 1位選手比賽一場,且每位選手每天必須比賽一場,不能輪空。試按此要求為比賽安排日程 1 每個選手必須與其他n 1個選手各賽一場 2 每個選手一天只能賽一場 3 迴圈賽一共進行n 1天。思路和 ...

分治法 迴圈賽日程表

設有n 2k個運動員要進行羽毛球迴圈賽,現要設計乙個滿足以下要求的比賽日程表 1 每個選手必須與其它n 1個選手各賽一次 2 每個選手一天只能比賽一次 3 迴圈賽一共需要進行n 1天。由於n 2 k,顯然n為偶數。按分治策略,將所有的選手分為兩半,n個選手的比賽日程表就可以通過為n 2個選手設計的比...