c语言算法单循环球队比赛安排,单循环赛赛程安排算法研究.doc
單循環(huán)賽賽程安排算法研究
摘要:循環(huán)賽賽程安排算法是一個很經(jīng)典的計(jì)算機(jī)算法,它是分治法的一個經(jīng)典應(yīng)用,但該算法只適應(yīng)于2n支隊(duì)伍的賽程安排問題,而對于非 2n支隊(duì)伍的賽程安排問題卻沒有很好的解決。文章使用可視化語言Visual Basic作為開發(fā)工具,借助于循環(huán)隊(duì)列的規(guī)律,針對任意n支隊(duì)伍的賽程安排提出一種直觀、方便的算法。
關(guān)鍵詞:單循環(huán)賽;賽程安排;算法;Visual Basic 6.0
中圖分類號:TP312文獻(xiàn)標(biāo)識碼:A文章編號:1009-3044(2007)15-30805-02
Single Cycle Match Competition Schedule Arrangement Algorithm Research
ZHANG Lin-zhong
(Anhui Agricultural University,College of Applied Mathematics Institute,Hefei 230036)
Abstract:Round robin schedule algorithm is a classic computer algorithm,it is a representative application of the divide and rule algorithm, but the classical computer algorithm can solve match arrangement of 2n teams only, it can not satisfactorily resolve the problem of not 2n teams. The article using Visual Basic as a development tool, using cohort cycle of the law against arbitrary n teams in the schedule proposed an intuitive and user-friendly algorithm.
Key words:Single round robin;the schedule;Algorithm;Visual Basic 6.0
1 引言
在計(jì)算機(jī)算法中,循環(huán)賽賽程安排算法是是分治法的一個經(jīng)典應(yīng)用,但該算法只適應(yīng)于2n支隊(duì)伍的賽程安排問題,而對于任意n支隊(duì)伍的賽程安排問題卻不能很好的解決。文獻(xiàn)4中對該算法作了一個補(bǔ)充,可以對任意支隊(duì)伍進(jìn)行比賽的賽程進(jìn)行安排,但該算法不是很直觀,而且通過Turbo C實(shí)現(xiàn),操作起來不是很方便。本文采用面向?qū)ο蟮拈_發(fā)工具Visual Basic,提出一種更為簡單的算法,得到更為直觀、操作方便的結(jié)果。
2 單循環(huán)賽賽程算法
單循環(huán)賽,是所有參加比賽的隊(duì)伍均能相遇一次,最后按各隊(duì)在全部比賽中的積分、得失分率排列名次。這種競賽方法滿足(假設(shè)有n支隊(duì)伍):a、每支隊(duì)伍必須與其他n-1支隊(duì)伍各賽一次;b、每支隊(duì)伍每輪只能進(jìn)行一場比賽。很明顯,當(dāng) n為奇數(shù)時,需進(jìn)行n輪比賽;當(dāng) n為偶數(shù)時,需進(jìn)行n-1輪比賽。首先考慮n為奇數(shù)的情況,在此基礎(chǔ)上再考慮n為偶數(shù)時的情況。
(1)當(dāng)比參賽隊(duì)(或人)為奇數(shù)即n=2*k-1 (n≥2)時,考慮到每輪均有一支隊(duì)伍輪空,先將隊(duì)伍一分為二,每輪比賽在前后兩部分中依次選取一支隊(duì)伍進(jìn)行比賽,第一輪將k號選手輪空,利用對稱性,將1號隊(duì)伍和n號隊(duì)伍比賽,2號隊(duì)伍和n-1號隊(duì)伍比賽,依此類推排完第一輪選手的比賽;第二輪將k+1號隊(duì)伍輪空,再將2號隊(duì)伍和1號隊(duì)伍比賽,3號隊(duì)伍和n號隊(duì)伍比賽,依此類推排完第二輪選手的比賽;為了避免兩個隊(duì)之間出現(xiàn)重復(fù)比賽,所以用循環(huán)隊(duì)列(如圖1)的方式解決每輪輪空隊(duì)伍的編號,即編號為n的隊(duì)伍輪空的下一輪為編號1的隊(duì)伍輪空。例:7支隊(duì)伍參加比賽的排法(見圖2):
圖1 循環(huán)隊(duì)列
第一輪 1-7 2-6 3-5
第二輪 2-1 3-7 4-6
第三輪 3-2 4-1 5-7
第四輪 4-3 5-2 6-1
第五輪 5-4 6-3 7-2
第六輪 6-5 7-4 1-3
第七輪 7-6 1-5 2-4
圖2 7支隊(duì)伍
(2)當(dāng)比賽隊(duì)伍數(shù)為偶數(shù)即n = 2*k(n≥2)時,每一輪比賽只需在n=2*k(n≥2)的基礎(chǔ)上補(bǔ)上輪空的隊(duì)伍和編號為n的隊(duì)伍比賽即可。例:8支隊(duì)伍參加比賽的排法(見圖3):
第一輪 1-7 2-6 3-5 4-8
第二輪 2-1 3-7 4-6 5-8
第三輪 3-2 4-1 5-7 6-8
第四輪 4-3
總結(jié)
以上是生活随笔為你收集整理的c语言算法单循环球队比赛安排,单循环赛赛程安排算法研究.doc的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python辗转相除法算法_辗转相除法的
- 下一篇: log4j漏洞分析及总结