Java常用算法二:分治法
文章目录
- 一、分治算法的基本步骤
- 二、分治算法解决汉诺塔问题
- 2.1 汉诺塔的规则:
- 2.2 使用分治算法
笔记参考:尚硅谷
分治法就是把很复杂的问题分而治之,把一个很大的问题分成几个很小的问题,再把这几个很小的问题分成很多个更小的问题。直到子问题可以简单地直接求解,那么原问题的解就是子问题解的集合。
分治算法可以解决:
- 二分搜索
- 大整数乘法
- 棋盘覆盖
- 合并排序
- 快速排序
- 线性时间选择
- 最接近点对问题
- 循环赛日程表
- 汉诺塔
一、分治算法的基本步骤
分治法在每一层递归上都有三个步骤:
- 分解:将原问题分解为若干个规模较小,相互独立,与原问题形式相同的子问题
- 解决: 若子问题规模较小而容易被解决则直接解,否则递归地解各个子问题
- 合并: 将各个子问题的解合并为原问题的解。
二、分治算法解决汉诺塔问题
2.1 汉诺塔的规则:
有三根杆子A,B,C。
A杆上有 N 个 (N>1) 穿孔圆盘,盘的尺寸由下到上依次变小。
要求按下列规则将所有圆盘移至 C 杆:
每次只能移动一个圆盘;
大盘不能叠在小盘上面。
提示:可将圆盘临时置于 B 杆,也可将从 A 杆移出的圆盘重新移回 A 杆,但都必须遵循上述两条规则。
问:如何移?最少要移动多少次?
- 如果是有一个盘, A->C
如果我们有 N>=2 情况,我们总是可以看做是两个盘1.最下边的盘 2.上面的盘 - 先把最上面的盘A->B
- 把最下边的盘A->C
- 把B塔的所有盘从B->C
2.2 使用分治算法
public class Hanoitower {public static void main(String[] args) {hanoiTower(5, 'a', 'b', 'c');}// a 是 source// b 是 middle// c 是 targetpublic static void hanoiTower( int num, char a, char b, char c) {if(num == 1)//问题较小,直接解决System.out.println("第1个盘从" + a + "->" + c);else {//如果我们有 n>=2 情况,我们总是可以看做是两个盘 1.最下边的一个盘 2.上面的所有盘// 1. 先把最上面的所有盘A->B, 移动过程会使用c作为中间站hanoiTower(num-1, a, c, b);// 2. 再把最后一个盘从a->CSystem.out.println("第" + num+ "个盘从" + a + "->" + c); // 3. 把上面的所有盘从b->c,移动过程会使用a作为中间站hanoiTower(num-1, b, a, c);}}
}
Java常用算法二:分治法相关推荐
- c语言分治法求众数重数_算法实验二 分治法 众数问题.pdf
算法实验二 分治法 众数问题 算法分析与设计实验二 分治法 主要内容 • 实验目的 • 主要实验仪器设备和环境 • 实验内容 • 实验要求 • 注意点 实验目的 • 理解分治法的基本思想 • 针对特定 ...
- 深大算法设计与分析实验二——分治法求最近点对问题
源代码: 深大算法设计与分析实验二--分治法求最近点对问题代码-C/C++文档类资源-CSDN下载 目录 实验问题 一.实验目的: 二.内容: 三.算法思想提示 产生不重复的随机点算法: 蛮力算法: ...
- 算法设计与分析 实验二 分治法求解最近点对问题
分治法求解最近点对问题 一.实验目的与要求 1.实验基本要求 2.实验亮点 二.实验内容与方法 三.实验步骤与过程 (一)一些准备工作 1.实验流程 2.数据生成与去除重复点 (二)暴力穷举法 1.算 ...
- java常用算法之冒泡排序简单例子
为了更好的理解冒泡排序过程,下面举一个实例. 初始数组 118 101 105 127 112 一次排序 101 118 105 112 127 二次排序 101 105 118 112 127 三次 ...
- 趣学算法系列-分治法
趣学算法系列-分治法 声明:本系列为趣学算法一书学习总结内容,在此推荐大家看这本算法书籍作为算法入门, 原作者博客链接,本书暂无免费电子版资源,请大家支持正版,更多实例分析请查看原书内容 第三章 分治 ...
- Java常用算法三:01背包问题
文章目录 一.动态规划 1.简介 2.应用场景:背包问题 二.01背包问题 1.1 分析过程 1.2 java实现01背包问题求解 笔记来源: 尚硅谷 一.动态规划 1.简介 动态规划(Dynamic ...
- python分治算法_Python算法:分治法
本节主要介绍分治法策略,提到了树形问题的平衡性以及基于分治策略的排序算法 本节的标题写全了就是:divide the problem instance, solve subproblems recur ...
- python分治算法_python算法实现-分治法
分治法概念将一个复杂的问题分成两个或更多的相同或相似的子问题,再把子问题分成更小的子问题----"分" 将最后子问题可以简单的直接求解----"治" 将所有子问 ...
- python分治算法_分治法及其python实现例子
在前面的排序算法学习中,归并排序和快速排序就是用的分治法,分治法作为三大算法之一的,有非常多的应用例子. 分治法概念 将一个复杂的问题分成两个或更多的相同或相似的子问题,再把子问题分成更小的子问题-- ...
最新文章
- MySQL 优化必经之路, Explain执行计划 ?
- [组合数]求组合数的几种方法总结
- [BUUCTF-pwn]——ciscn_2019_es_2(内涵peak小知识)
- discuz邮件设置PHP,Discuz!6.0—如何配置发送邮件的参数
- Mapgis6.7 林相图自动注记 .
- cwc云莱特链_CWC的完整形式是什么?
- js在div中追加html,JS把内容动态插入到DIV的实现方法
- 30秒内限制函数只被调用一次
- qthread run结束了算销毁吗_Java线程的run()方法和start()方法有什么区别?
- win7 nginx php 环境,win7下docker环境搭建nginx+php-fpm+easyswoole+lavarel开发环境
- 5.go 代码包 package
- 张果老能是鸿蒙时期一蝙蝠,张果老(中国古代神话传说八仙之一)_百度百科...
- Keil MDK5安装详细步骤
- 堪萨斯州立大学计算机专业,全美顶尖大学:堪萨斯州立大学
- 机器学习笔记(一)-局部加权回归(Locally weighted regression)LWR
- OpenGL(三)——着色器
- vue中引用echarts设置渐变色new echarts不能用
- Vue + 原生Canvas实现生成电子证书的实践
- 扬帆致远跨境电商:跨境电商品牌如何锁定真实用户
- 健合集团携手企企通,打造智慧采购商城管理平台
热门文章
- 脉冲神经网络原理及应用pdf_CNN卷积神经网络原理讲解+图片识别应用(附源码)...
- python有什么用-Python到底有什么用?为什么那么多人都在学Python?
- python爬虫步骤-Python爬虫怎么入门-初级篇
- 爬虫python能做什么-Python 爬虫学到什么样就可以找工作了?
- R-查询子段元素和 提前储存
- Redis--高并发之分布式锁
- angular中使用z-tree初始化之后,展开根节点不生效
- linux fdisk 4k,linux查看硬盘4K对齐方法
- windows本地运行sentinel
- jmx.JmxAdminException