分治算法之兵乓球比赛日程

分治算法的基本思想是将一个规模为N的问题分解为K个规模较小的子问题,这些子问题相互独立且与原问题性质相同。求出子问题的解,就可得到原问题的解。也就是字面上的解释是“分而治之”,就是把一个复杂的问题分成两个或更多的相同或相似的子问题,再把子问题分成更小的子问题……直到最后子问题可以简单的直接求解,原问题的解即子问题的解的合并。这个技巧是很多高效算法的基础,如排序算法(快速排序,归并排序),傅立叶变换(快速傅立叶变换)

问题的规模越小,越容易直接求解,解题所需的计算时间也越少。任何一个可以用计算机求解的问题所需的计算时间都与其规模有关。例如,对于n个元素的排序问题,当n=1时,不需任何计算。n=2时,只要作一次比较即可排好序。n=3时只要作3次比较即可,…。而当n较大时,问题就不那么容易处理了。要想直接解决一个规模较大的问题,有时是相当困难的。

基本思想

当我们求解某些问题时,由于这些问题要处理的数据相当多,或求解过程相当复杂,使得直接求解法在时间上相当长,或者根本无法直接求出。对于这类问题,我们往往先把它分解成几个子问题,找到求出这几个子问题的解法后,再找到合适的方法,把它们组合成求整个问题的解法。如果这些子问题还较大,难以解决,可以再把它们分成几个更小的子问题,以此类推,直至可以直接求出解为止。这就是分治策略的基本思想。

分治策略是:对于一个规模为n的问题,若该问题可以容易地解决(比如说规模n较小)则直接解决,否则将其分解为k个规模较小的子问题,这些子问题互相独立且与原问题形式相同,递归地解这些子问题,然后将各子问题的解合并得到原问题的解。这种算法设计策略叫做分治法。

如果原问题可分割成k个子问题,1<k≤n,且这些子问题都可解并可利用这些子问题的解求出原问题的解,那么这种分治法就是可行的。由分治法产生的子问题往往是原问题的较小模式,这就为使用递归技术提供了方便。在这种情况下,反复应用分治手段,可以使子问题与原问题类型一致而其规模却不断缩小,最终使子问题缩小到很容易直接求出其解。这自然导致递归过程的产生。分治与递归像一对孪生兄弟,经常同时应用在算法设计之中,并由此产生许多高效算法。

package 练习;import java.util.Scanner;public class 分治算法兵乓球比赛日程 {public static int MAX=65;public static int a[][]=new int [MAX][MAX];public static void main(String[] args) {int i;System.out.println("请输入比赛选手人数");Scanner scanner=new Scanner(System.in);int people = scanner.nextInt();if(people/64>1||people%2!=0){System.out.println("输入的人数必须是2的整数次幂,且人数不超过64人!");return ;}
gemecal(1,people);
System.out.print("编号:");
for(i=1;i<people;i++){System.out.print("  "+i+"天");
}
System.out.println();
for(int j=1;j<=people;j++){for(int  n=1;n<=people;n++){System.out.print("  "+a[j][n]);}System.out.println();
}}public static void gemecal(int k, int people) {// TODO Auto-generated method stubint i,j;if(people==2){a[k][1]=k;a[k][2]=k+1;
//            a[K+1][1]=k+1;a[k+1][1]=k+1;a[k+1][2]=k;}else{gemecal(k, people/2);gemecal(k+people/2, people/2);for(i=k;i<k+people/2;i++){for(j=people/2+1;j<=people;j++){a[i][j]=a[i+people/2][j-people/2];}}for(i=k+people/2;i<k+people;i++){for(j=people/2+1;j<=people;j++){a[i][j]=a[i-people/2][j-people/2];}}}}}

结果:

请输入比赛选手人数
8
编号: 1天 2天 3天 4天 5天 6天 7天
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

转载于:https://www.cnblogs.com/xiaonongpiaoliang/p/5285597.html

分治算法兵乓球比赛日程(java)相关推荐

  1. java 比赛赛程_分治算法兵乓球比赛日程(java)

    分治算法之兵乓球比赛日程 分治算法的基本思想是将一个规模为N的问题分解为K个规模较小的子问题,这些子问题相互独立且与原问题性质相同.求出子问题的解,就可得到原问题的解.也就是字面上的解释是" ...

  2. 兵乓球- 经典街机游戏-python小游戏源码下载

    兵乓球- 经典街机游戏.使用键盘上下移动拨片.第一个错过球的球员输了. 下载地址

  3. list object has no attribute ZScan_【恋爱体验】No.112丨大二男生,河南南阳,身高178,喜欢篮球、羽毛球、兵乓球、足球.........

    哈喽啊,大家晚上好啊 又到了每天的恋爱体验时间 今天脱单了没有 为了让大家(自己)快速脱单 #恋爱体验#又上新啦 [恋爱体验]第 112 期  投稿人   关于自己的一些描述  喜欢篮球.羽毛球.兵乓 ...

  4. 大学生体育运动网页设计模板代码 校园兵乓球网页作业成品 学校篮球网页制作模板 学生简单体育运动网站设计成品

    HTML5期末大作业:大学生体育网站设计--校园兵乓球(5页) HTML+CSS+JavaScript 学生DW网页设计作业成品 web课程设计网页规划与设计 计算机毕设网页设计源码 常见网页设计作业 ...

  5. java实现兵乓球比赛_C语言实现乒乓球比赛

    本文实例为大家分享了C语言实现乒乓球比赛的具体代码,供大家参考,具体内容如下 1).基本要求 用8个LED发光管(红黄绿)的来回滚动显示来模拟打乒乓球时乒乓球在两边球台上的来回运动.比赛双方用按钮/开 ...

  6. 分治算法实践6-气球游戏 戳气球 C++

    题目描述 刚刚今天去游乐场玩,发现了一个新的游戏项目,游戏是这样的,场上一共有 n 个气球,它们的编号是0到n-1,然后每个气球上还有一个数字,我们使用数组nums来保存这些数字. 现在游戏要求刚刚戳 ...

  7. 学生体育运动主题网页设计——兵乓球国乒网(纯HTML+CSS代码)

  8. Java50道经典编程题:(十八)兵乓球赛程安排问题 ——对知识的灵活使用

    1.问题重述 题目:两个乒乓球队进行比赛,各出三人.甲队为a,b,c三人,乙队为x,y,z三人.已抽签决定比赛名单.有人向队员打听比赛的名单.a说他不和x比,c说他不和x,z比,请编程序找出三队赛手的 ...

  9. 选址问题java_学习使用分治算法来解决邮局选址问题(Java实现)

    邮局选址问题(分治算法) 前言 提示:在算法的学习过程中我们会遇到各种各样的算法思想,其中最常见的就有分治算法思想,而本文的问题邮局选址问题就是基于分治思想而去实现的一个日常问题 提示:以下是本文内容 ...

最新文章

  1. 微软发布Visual Studio 2017 15.8
  2. 傅里叶变换性质证明卷积_傅里叶变换(三) 采样与离散序列
  3. Isolation Forest原理总结
  4. HDU 2191 - 悼念512汶川大地震遇难同胞——珍惜现在,感恩生活 (多重背包)
  5. linux上用mplayer播放cue文件的设想
  6. php 数据导出到excel文件,PHP导出数据到excel文件
  7. Android bootchart(二)
  8. python环境搭建什么意思_如何搭建Python环境
  9. Jquery导航条淡进淡出相册(动态无刷新加载数据库数据)
  10. 数据挖掘_wget整站下载
  11. 在线GIF图片帧修改工具
  12. 第八届蓝桥杯第六题最大公共子串
  13. Java开发中出现OOM的常见原因有哪些?
  14. 解决 min-width 在 IE6 中无效的方法
  15. 文件夹复制命令 linux,linux拷贝文件夹命令
  16. 苹果计算机怎么显示汉字,苹果的safari浏览器怎样设定成中文显示
  17. Android9 更改系统默认输入法
  18. android 禁止媒体扫描,Android通过.nomedia文件禁止多媒体库扫描指定文件夹下的多媒体文件...
  19. 商人过河问题c语言图片,商人渡河问题图解法.doc
  20. JavaScript沙箱(环境,黑盒)

热门文章

  1. 酷爆了!阿里预测2020十大科技趋势
  2. 基于无监督深度学习的单目视觉的深度和自身运动轨迹估计的深度神经模型
  3. 接收率高达29%的ICLR 2021有哪些论文入榜呢?
  4. java定义一个course类,java集合,定义两个类,学生Student和课程Course,课程被学生选修,请在课程类中提供以下功能:...
  5. IDEA Docker 插件安装
  6. 板式橡胶支座弹性模量怎样计算_Midas Civil支座模拟的详细解决方法
  7. 位置2的索引超出数组范围不能超过10_golang学习笔记--切片slice 与数组 arr
  8. maven添加本地包命令mvn install:install-file
  9. mybatis分页的一种解决方案
  10. springmvc+json 前后台数据交互