双循环比赛队伍排列组合问题
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)
- 前面的问题定义已经清楚了,但是因为这个参数并没有确定,所以有时候直接去思考宏观上的通用方式有点麻烦,有很多细节问题需要思考,所以我这里选择将m定义为2轮;因为1轮就不需要考虑梅每天队伍碰撞的问题了。
- 同时因为是双循环赛,分为上半轮循环和下半轮循环,就是说,可以单纯的安排上半场比赛,即1轮循环赛;下半轮的时候,第一小轮不和上班论的最后小轮不比赛碰撞即可(因为m = 2)。
- 再来进行细节讨论,整体上,最终对战的比赛已经确定,每只队伍反正就是对战(n - 1 )场,他们队伍之间匹配问题,已经是固定的,只需要进行排列他们比赛场次的问题即可。
(到这里我感觉到这个m好像也是有一定确定关系的 2019/05/12) - 已经确定m = 2,那么一共就是比赛2 n * ( 2n - 1) / n * m = 2*n - 1 天
- 其实到现在这个情况,貌似很简单了就。我凑够一轮小比赛,共n场,每天两轮,保证每个队伍都对战不同的就可以了;然后先考虑把一场循环弄完,也就是整轮循环就是对战5个不同的队伍。(但我怀疑我是不是想的简单了,因为他们那些什么分治法,好像考虑的更多,我这个还是有点陷入比赛安排的细节了)
思考过程
- 首先,在看到问题之后,根据MSI的比赛情况,写出了自己对赛制的理解;
- 进一步抽象,看到了文章[1]对问题的描述,利用符号来对具体的书进行代表;但是这里有一个问题,他们同时对n这个队伍数也进行了限制,而且,对于比赛天数什么的,我也没有进行假设,所以说,从问题的定义来看,并不完整;
- 思考解决的办法,在看到这个东西的第一想法,是通过搜索的角度来进行解决;但搜索到的一些算法都是跟分治法相关;
- 在仔细观察了问题之后,第二步中需要思考的问题真的很重要,我看了一些单循环的问题,每天就是打一场,这个很直白,但对于这个问题来说,他并没有说明;但我仔细想了想,很多参数,比如说,每天一共比几场,每天每只队伍比几场,都是收到限制的,并不是完全就很随意;如果能把所有的情况都考虑清楚,问题应该是很好回答的。这个过程,就很像很早的时候,以前学习这个相应的公式推理的时候,就最后一个题,那个n的内容,叫什么想不起来了。
- 思考了几个必要的限制条件,两个队伍的比赛,那么队伍总数最好是2*n,这样的话,如果是6支队伍,也就是说一轮比赛下来是3场,这3场情况下就可以保证所有的队伍都参战了。那么我可以给这个赛制安排加上一个限制,每天最起码进行n场比赛,即一轮比赛;那么最后问题的最后结果定义就是:
现在2n支队伍(这里是不考虑队伍为奇数的情况),共计进行2n (2n -1)场比赛;每天至少进行m (m>=1)轮比赛,每轮n场比赛,那么2n * (2n -1) / (nm) = 2(2n - 1) / m,要保证天数是完整的,
同时保证每天的轮数都相等;前面说过的每个队每天要进行m场比赛,而且赛程安排必须保证每天对阵的m个队伍不同(开始解决思路的书写
- 限制m参数实现基本算法(解决思路进行到第5步)
- 查看了很多现有的博客,他们都是针对的单循环赛,利用的都是分治法,我也看不懂,感觉他们写的不具体;但我自己模拟了一下,如果是直接利用他们所说分治法,对于非2^n的情况就无法满足,而且在文章[2]中也找到了同样的说辞,跟我的想的一样,必须进行一些改进,可以在分治法的基础上。
参考文献
[1]分治法:循环赛日程安排问题
[2]循环赛算法分析
双循环比赛队伍排列组合问题相关推荐
- .NET平台开源项目速览(11)KwCombinatorics排列组合使用案例(1)
阅读目录 1.KwCombinatorics基本介绍 2.足球彩票排列组合应用 3.排列组合生成代码与测试 今年上半年,我在KwCombinatorics系列文章中,重点介绍了KwCombinator ...
- 计算机组装错题整理,数学排列组合部分错题精选.docx
数学排列组合部分错题精选 数学复习易做易错题选 排列组合易错题正误解析 排列组合问题类型繁多.方法丰富.富于变化,稍不注意,极易出错.本文选择一些在教学中学生常见的错误进行正误解析,以飨读者. 1没有 ...
- hdu 4489(排列组合+DP)
有N个高矮不同的人,求高矮高矮高矮高矮......或者矮高矮高矮高......的排列方法一共有多少种. 假设第N个插入到队伍中的人比前N-1个人都要高,假设他插入的位置为 j ,那么j-1要比j-2矮 ...
- 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/ ...
- 排列组合,字符串——Killer Names
**题目:**Problem - 6143 http://acm.hdu.edu.cn/showproblem.php?pid=6143 Killer Names Time Limit: 2000/1 ...
- 信奥中的数学:排列组合
排列组合题型总结课程(一) 排列组合题型总结课程(一)_哔哩哔哩_bilibili 排列组合的公式 排列组合的公式_百度知道 [Manim动画]如何以可视化视角直观理解排列组合? [Manim动画]如 ...
- 【一级讲解】不可思议唤来不可思议β——数学排列组合
不可思议唤来不可思议β Time Limit: 1 Sec Memory Limit: 128 MB Description In the world line 1.048596% 双叶理央因为&qu ...
- 小王想报英语计算机,7月31日数量关系排列组合与概率(6页)-原创力文档
好老师 好课程 好服务 7 月31 日 数量关系-排列组合与概率 1. 某单位要求职工参加20 课时线上教育课程,其中政治理论 10 课时,专业技能 10 课时.可供选择的政治理论课共8 门,每门2 ...
- 组合数学--排列组合
组合数学--排列组合 1. 概述 1.1 应用 1.2 三大问题 2. 排列组合 2.1 两大法则 2.2 排列 3. 放球模型 4. 模型转换 5. 线性方程的解 5.1 若干等式及其组合意义 6. ...
最新文章
- Spring MVC 单元调试和访问
- 几款最新的解谜单机小游戏
- 如何调用华为云api_postman调用华为云接口添加资源
- Android Animation学习(六) View Animation介绍
- python判断输入的数字是完全平方还是三次方
- 数据双向绑定_手写 Vue3 数据双向绑定 理解Proxy
- www.SQnote.cn
- Linux gtk开发教程,使用GTK+和Glade快速开发Linux图形界面
- mos管结电容等效模型_MOS管等效模型
- 基于JavaEE的公共自行车租赁管理系统_JSP网站设计_SqlServer数据库设计
- xcode archive 去掉dsym文件和添加dsym文件
- 宏病毒的研究与实例分析01——基础篇
- DDOS攻击器常见的三种方式
- 抖音测试距离的软件,抖音同款距离测量仪
- 笔记本计算机的连接无线网络连接,计算机无法连接到无线网络,我将详细教您解决笔记本电脑无法连接到无线网络...
- 真的是没有底线了,重新认识Java
- H3C的l2tp报错
- 登录学习通报错:浏览器没有开启cookie功能
- 短视频拍摄技巧分享,巧用转场提升高级感,拥有自己的风格很重要
- 一零二一、ERROR StandaloneSchedulerBackend: Application has been killed. Reason: All masters are unrespon
热门文章
- sqlserver提权失败_mssql提权遇到CreateProcess' 失败,错误代码: '5'。
- 理财-力哥七部定投法
- spring xml 配置transactionManager事务管理器踩的坑
- CreateParameter 方法 Type 属性 (ADO)
- 路由器重温——PON接口配置管理
- asp.net会议室网上预约系统【源码分享】
- 怎么利用计算机打桌球,腾讯全民桌球怎么在电脑上玩 全民桌球PC电脑版安装使用【图文攻略】...
- 看门狗的使用方法和作用
- 微软基于云计算的免费杀毒软件Morro曝光
- c语言计算随机数分布概率,C++ piecewise_constant_distribution分段常数分布随机数用法详解...