2019/05/12

引言

昨天看比赛的时候,看到了各个队伍的对战,这种应用应该是排列组合中的算法,但不是很明确。搜索了一下相关的算法,看到有用分治法的。这里来把这部分的问题来描述一下。

问题分析

问题来源于最近的MSI比赛:

小组赛共计6支队伍,按照双循环赛事,共计比赛5天,每天打6场,每个队每天打2场,第3天的上半轮(即前三场)完成第一轮循环赛,共计30场比赛。

转化为数学形式:

小组赛共计n支队伍,按照双循环赛事,共计比赛n-1天,每天打n场,每个队伍每天打两场,小组赛共计n支队伍,按照双循环赛事,共计比赛n(n-1)场,每支队伍与其他任意一支队伍交手2次,前n(n-1)/2场比赛,完成一轮循坏比赛,即每一只队伍已经与其他任意一支队伍交手1次。

(上面这个说明并不是非常的具体,说明我对这个问题的理解还是不够深入 2019/05/12)
我感觉还有具体的,对于每天的限制什么的,可能要假设比赛多少场什么的。这个应该算是非常经典的排列组合算法吧。
经过思考之后,加入一些限制条件,重新进行问题定义

现在2n支队伍(这里是不考虑队伍为奇数的情况),共计进行2n (2n -1)场比赛;每天至少进行m (m>=1)轮比赛,每轮n场比赛,那么2n * (2n -1) / (nm) = 2(2n - 1) / m,要保证天数是完整的,
同时保证每天的轮数都相等;前面说过的每个队每天要进行m场比赛,而且赛程安排必须保证每天对阵的m个队伍不同

解决思路

( 这个问题并不是为了提供多好的算法,而是说,我来记录一下我的思路过程 2019/05/12)

  1. 前面的问题定义已经清楚了,但是因为这个参数并没有确定,所以有时候直接去思考宏观上的通用方式有点麻烦,有很多细节问题需要思考,所以我这里选择将m定义为2轮;因为1轮就不需要考虑梅每天队伍碰撞的问题了。
  2. 同时因为是双循环赛,分为上半轮循环和下半轮循环,就是说,可以单纯的安排上半场比赛,即1轮循环赛;下半轮的时候,第一小轮不和上班论的最后小轮不比赛碰撞即可(因为m = 2)。
  3. 再来进行细节讨论,整体上,最终对战的比赛已经确定,每只队伍反正就是对战(n - 1 )场,他们队伍之间匹配问题,已经是固定的,只需要进行排列他们比赛场次的问题即可。
    (到这里我感觉到这个m好像也是有一定确定关系的 2019/05/12)
  4. 已经确定m = 2,那么一共就是比赛2 n * ( 2n - 1) / n * m = 2*n - 1 天
  5. 其实到现在这个情况,貌似很简单了就。我凑够一轮小比赛,共n场,每天两轮,保证每个队伍都对战不同的就可以了;然后先考虑把一场循环弄完,也就是整轮循环就是对战5个不同的队伍。(但我怀疑我是不是想的简单了,因为他们那些什么分治法,好像考虑的更多,我这个还是有点陷入比赛安排的细节了)

思考过程

  1. 首先,在看到问题之后,根据MSI的比赛情况,写出了自己对赛制的理解;
  2. 进一步抽象,看到了文章[1]对问题的描述,利用符号来对具体的书进行代表;但是这里有一个问题,他们同时对n这个队伍数也进行了限制,而且,对于比赛天数什么的,我也没有进行假设,所以说,从问题的定义来看,并不完整;
  3. 思考解决的办法,在看到这个东西的第一想法,是通过搜索的角度来进行解决;但搜索到的一些算法都是跟分治法相关;
  4. 在仔细观察了问题之后,第二步中需要思考的问题真的很重要,我看了一些单循环的问题,每天就是打一场,这个很直白,但对于这个问题来说,他并没有说明;但我仔细想了想,很多参数,比如说,每天一共比几场,每天每只队伍比几场,都是收到限制的,并不是完全就很随意;如果能把所有的情况都考虑清楚,问题应该是很好回答的。这个过程,就很像很早的时候,以前学习这个相应的公式推理的时候,就最后一个题,那个n的内容,叫什么想不起来了。
  5. 思考了几个必要的限制条件,两个队伍的比赛,那么队伍总数最好是2*n,这样的话,如果是6支队伍,也就是说一轮比赛下来是3场,这3场情况下就可以保证所有的队伍都参战了。那么我可以给这个赛制安排加上一个限制,每天最起码进行n场比赛,即一轮比赛;那么最后问题的最后结果定义就是:

现在2n支队伍(这里是不考虑队伍为奇数的情况),共计进行2n (2n -1)场比赛;每天至少进行m (m>=1)轮比赛,每轮n场比赛,那么2n * (2n -1) / (nm) = 2(2n - 1) / m,要保证天数是完整的,
同时保证每天的轮数都相等;前面说过的每个队每天要进行m场比赛,而且赛程安排必须保证每天对阵的m个队伍不同(开始解决思路的书写

  1. 限制m参数实现基本算法(解决思路进行到第5步)
  2. 查看了很多现有的博客,他们都是针对的单循环赛,利用的都是分治法,我也看不懂,感觉他们写的不具体;但我自己模拟了一下,如果是直接利用他们所说分治法,对于非2^n的情况就无法满足,而且在文章[2]中也找到了同样的说辞,跟我的想的一样,必须进行一些改进,可以在分治法的基础上。

参考文献

[1]分治法:循环赛日程安排问题
[2]循环赛算法分析

双循环比赛队伍排列组合问题相关推荐

  1. .NET平台开源项目速览(11)KwCombinatorics排列组合使用案例(1)

    阅读目录 1.KwCombinatorics基本介绍 2.足球彩票排列组合应用 3.排列组合生成代码与测试 今年上半年,我在KwCombinatorics系列文章中,重点介绍了KwCombinator ...

  2. 计算机组装错题整理,数学排列组合部分错题精选.docx

    数学排列组合部分错题精选 数学复习易做易错题选 排列组合易错题正误解析 排列组合问题类型繁多.方法丰富.富于变化,稍不注意,极易出错.本文选择一些在教学中学生常见的错误进行正误解析,以飨读者. 1没有 ...

  3. hdu 4489(排列组合+DP)

    有N个高矮不同的人,求高矮高矮高矮高矮......或者矮高矮高矮高......的排列方法一共有多少种. 假设第N个插入到队伍中的人比前N-1个人都要高,假设他插入的位置为 j ,那么j-1要比j-2矮 ...

  4. HDU - 4489 The King’s Ups and Downs (排列组合+dp)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4489点击打开链接 The King's Ups and Downs Time Limit: 2000/ ...

  5. 排列组合,字符串——Killer Names

    **题目:**Problem - 6143 http://acm.hdu.edu.cn/showproblem.php?pid=6143 Killer Names Time Limit: 2000/1 ...

  6. 信奥中的数学:排列组合

    排列组合题型总结课程(一) 排列组合题型总结课程(一)_哔哩哔哩_bilibili 排列组合的公式 排列组合的公式_百度知道 [Manim动画]如何以可视化视角直观理解排列组合? [Manim动画]如 ...

  7. 【一级讲解】不可思议唤来不可思议β——数学排列组合

    不可思议唤来不可思议β Time Limit: 1 Sec Memory Limit: 128 MB Description In the world line 1.048596% 双叶理央因为&qu ...

  8. 小王想报英语计算机,7月31日数量关系排列组合与概率(6页)-原创力文档

    好老师 好课程 好服务 7 月31 日 数量关系-排列组合与概率 1. 某单位要求职工参加20 课时线上教育课程,其中政治理论 10 课时,专业技能 10 课时.可供选择的政治理论课共8 门,每门2 ...

  9. 组合数学--排列组合

    组合数学--排列组合 1. 概述 1.1 应用 1.2 三大问题 2. 排列组合 2.1 两大法则 2.2 排列 3. 放球模型 4. 模型转换 5. 线性方程的解 5.1 若干等式及其组合意义 6. ...

最新文章

  1. Spring MVC 单元调试和访问
  2. 几款最新的解谜单机小游戏
  3. 如何调用华为云api_postman调用华为云接口添加资源
  4. Android Animation学习(六) View Animation介绍
  5. python判断输入的数字是完全平方还是三次方
  6. 数据双向绑定_手写 Vue3 数据双向绑定 理解Proxy
  7. www.SQnote.cn
  8. Linux gtk开发教程,使用GTK+和Glade快速开发Linux图形界面
  9. mos管结电容等效模型_MOS管等效模型
  10. 基于JavaEE的公共自行车租赁管理系统_JSP网站设计_SqlServer数据库设计
  11. xcode archive 去掉dsym文件和添加dsym文件
  12. 宏病毒的研究与实例分析01——基础篇
  13. DDOS攻击器常见的三种方式
  14. 抖音测试距离的软件,抖音同款距离测量仪
  15. 笔记本计算机的连接无线网络连接,计算机无法连接到无线网络,我将详细教您解决笔记本电脑无法连接到无线网络...
  16. 真的是没有底线了,重新认识Java
  17. H3C的l2tp报错
  18. 登录学习通报错:浏览器没有开启cookie功能
  19. 短视频拍摄技巧分享,巧用转场提升高级感,拥有自己的风格很重要
  20. 一零二一、ERROR StandaloneSchedulerBackend: Application has been killed. Reason: All masters are unrespon

热门文章

  1. sqlserver提权失败_mssql提权遇到CreateProcess' 失败,错误代码: '5'。
  2. 理财-力哥七部定投法
  3. spring xml 配置transactionManager事务管理器踩的坑
  4. CreateParameter 方法 Type 属性 (ADO)
  5. 路由器重温——PON接口配置管理
  6. asp.net会议室网上预约系统【源码分享】
  7. 怎么利用计算机打桌球,腾讯全民桌球怎么在电脑上玩 全民桌球PC电脑版安装使用【图文攻略】...
  8. 看门狗的使用方法和作用
  9. 微软基于云计算的免费杀毒软件Morro曝光
  10. c语言计算随机数分布概率,C++ piecewise_constant_distribution分段常数分布随机数用法详解...