威廉希尔中文网站-ios/安卓/手机版app下载

python应用——分治法实现循环赛

  一.要求

  用分治法实现循环赛:

  一共有n个选手要进行循环赛,请设计一个满足以下要求的比赛日程表:

  (1)每个选手必须与其他n-1个选手各赛一次;

  (2)每个选手一天只能赛一次;

  (3)当n 是偶数,循环赛进行n-1天,当n是奇数,循环赛进行n天。

  按分治策略,将所有的选手分为两半,n个选手的比赛日程表就可以通过为n/2个选手设计的比赛日程表来决定。递归地用对选手进行分割,直到只剩下2个选手时,比赛日程表的制定就变得很简单。这时只要让这2个选手进行比赛就可以了。

  总共需要进行n*(n-1)/2场比赛。

  当有偶数个选手参加比赛时需要进行n-1天比赛。当有奇数个选手时会出现轮空现象,考虑n+1个选手参加比赛的日程安排,最后将多出来的选手对应的比赛轮空,一共需要进行(n+1)-1天比赛。由此推测,不论参加选手人数为偶数还是奇数,统一处理为偶数考虑。

  当n/2为偶数时,通过对子问题矩阵元素的平移即可得到。如下图所示:

  

  当n/2为奇数时,首先将子问题处理为n/2+1的情况,再扩充矩阵,以六名选手为例,如下图所示:

  

  2名选手:

  C:UsersAdministratorAppDataLocalProgramsPythonPython36python.exeC:/Users/Administrator/PycharmProjects/untitled1/xunhuansai.py

  输入需要进行循环赛的人数:2

  [[ 1. 2.]

  [2.  1.]]

  Process finished with exit code 0

  3名选手:

  C:UsersAdministratorAppDataLocalProgramsPythonPython36python.exeC:/Users/Administrator/PycharmProjects/untitled1/xunhuansai.py

  输入需要进行循环赛的人数:3大佬们都在玩{精选官网网址: www.vip333.Co }值得信任的品牌平台!

  [[ 1. 2.  3.  0.]

  [2.  1. 0.  3.]

  [3.  0. 1.  2.]

  [0.  0. 0.  0.]]

  Process finished with exit code 0

  4名选手:

  C:UsersAdministratorAppDataLocalProgramsPythonPython36python.exeC:/Users/Administrator/PycharmProjects/untitled1/xunhuansai.py

  输入需要进行循环赛的人数:4

  [[ 1. 2.  3.  4.]

  [2.  1. 4.  3.]

  [3.  4. 1.  2.]

  [4.  3. 2.  1.]]

  Process finished with exit code 0

  5名选手:

  C:UsersAdministratorAppDataLocalProgramsPythonPython36python.exeC:/Users/Administrator/PycharmProjects/untitled1/xunhuansai.py

  输入需要进行循环赛的人数:5

  [[ 1. 2.  3.  4. 5.  0.]

  [2.  1. 5.  3.  0.  4.]

  [3.  0. 1.  2.  4.  5.]

  [4.  5. 0.  1.  3.  2.]

  [5.  4. 2.  0.  1.  3.]

  [0.  0. 0.  0.  0.  0.]]

  Process finished with exit code 0

  6名选手:

  C:UsersAdministratorAppDataLocalProgramsPythonPython36python.exeC:/Users/Administrator/PycharmProjects/untitled1/xunhuansai.py

  输入需要进行循环赛的人数:6

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

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

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

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

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

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

  Process finished with exit code 0

  五名选手及六名选手的结果分别为:大佬们都在玩{精选官网网址: www.vip333.Co }值得信任的品牌平台!

  

  其中第一列为选手序号,第二列为第一天进行比赛的对手,第三列为第二天进行比赛的选手大佬们都在玩{精选官网网址: www.vip333.Co }值得信任的品牌平台!。。。当对手序号为0时,表示当天该选手轮空。

  经过对比,5名选手的比赛安排是在6名选手的比赛安排上去掉涉及第6名选手的比赛。运行结果和预先的思路相符。

python应用——分治法实现循环赛

python应用——分治法实现循环赛

分享:
扫描分享到社交APP
发表列表
请登录后评论...
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~