java 递归实现循环比赛日程
2014-11-27 19:29
148 查看
在java实现循环比赛日程的程序中,主要运用的思想就是分治法。
分治法:通俗的理解就是在实际需要解决的问题当中,将大的问题分成小的问题,逐次分割,直到达到容易解决的范围。然后再将分割的小域的解按一定规律组合在一起成为“母”解,也就是这个大问题的解。
设有n=2*k个运动员要进行网球循环赛。先要设计一个满足一下要求的比赛日程:
(1)每个选手必须与其他n-1个选手各比赛一次
(2)每个选手一天只能比赛一次
(3)循环赛一天进行n-1天
按照这个要求可将比赛日程设计成n行和n-1列的一个表,在表的第1列放的是选手的编号其余列存放的是对应的比赛对手。按照分治策略,我们将所有对手设计成两组,n个选手的比赛日程表就可以通过n/2个选手设计的比赛日程来决定。递归的用这种一分为二的策略对选手进行分割,直到只剩下2个选手时,比赛日程的指定就变得简单。
运行的结果如下所示(运行结果是当运动员个数为8个的时候,最左边的一列为对应的运动员编号):
分治法:通俗的理解就是在实际需要解决的问题当中,将大的问题分成小的问题,逐次分割,直到达到容易解决的范围。然后再将分割的小域的解按一定规律组合在一起成为“母”解,也就是这个大问题的解。
设有n=2*k个运动员要进行网球循环赛。先要设计一个满足一下要求的比赛日程:
(1)每个选手必须与其他n-1个选手各比赛一次
(2)每个选手一天只能比赛一次
(3)循环赛一天进行n-1天
按照这个要求可将比赛日程设计成n行和n-1列的一个表,在表的第1列放的是选手的编号其余列存放的是对应的比赛对手。按照分治策略,我们将所有对手设计成两组,n个选手的比赛日程表就可以通过n/2个选手设计的比赛日程来决定。递归的用这种一分为二的策略对选手进行分割,直到只剩下2个选手时,比赛日程的指定就变得简单。
运行的结果如下所示(运行结果是当运动员个数为8个的时候,最左边的一列为对应的运动员编号):
1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 |
2 | 1 | 4 | 3 | 6 | 5 | 8 | 7 |
3 | 4 | 1 | 2 | 7 | 8 | 5 | 6 |
4 | 3 | 2 | 1 | 8 | 7 | 6 | 5 |
5 | 6 | 7 | 8 | 1 | 2 | 3 | 4 |
6 | 5 | 8 | 7 | 2 | 1 | 4 | 3 |
7 | 8 | 5 | 6 | 3 | 4 | 1 | 2 |
8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 |
相关文章推荐
- JAVA使用循环和递归方法实现斐波拉切数列
- 二叉树的遍历(循环及递归实现)——Java
- java实现八皇后问题(递归和循环两种方式)
- 【Java】斐波那契数列(Fibonacci Sequence、兔子数列)的3种计算方法(递归实现、递归值缓存实现、循环实现、尾递归实现)
- JAVA下实现二叉树的先序、中序、后序、层序遍历(递归和循环)
- 乘方--java递归实现--循环实现
- Java实现二叉树的递归构建及先序、中序、后序、层序遍历(递归和循环)
- 多个数组间元素排列组合问题求解(Java实现) 标签: 递归排列组合循环
- Java基于递归和循环两种方式实现未知维度集合的笛卡尔积算法示例
- 8皇后以及N皇后算法探究,回溯算法的JAVA实现,非递归,循环控制及其优化
- JAVA下实现二叉树的先序、中序、后序、层序遍历(递归和循环)
- 循环比赛日程(递归解法)
- Java基于循环递归回溯实现八皇后问题算法示例
- 树形目录的递归实现(一)数据库+jsp+javabean
- Java数组实现循环队列
- 二分查找法的C语言实现:递归与循环
- Java实现循环队列
- java实现循环左移和右移的简单算法
- 递归的使用——关于括号排列(分别使用Java和C++算法实现)
- 简单谈谈 C/C++ 递归的思想,实现,以及和循环的关系。