首页 > 编程语言 >分治算法

分治算法

时间:2022-09-27 15:12:47浏览次数:49  
标签:分治 问题 算法 num 汉诺塔 hanoiTower 排序

  • 简介
把一个复杂的问题分成两个或更多的相同或相似的子问题,再把子问题分成更小的子问题……直到最后子问题可以简单的直接求解,原问题的解即子问题的解的合并。
这个技巧是很多高效算法的基础,如排序算法(快速排序,归并排序),傅立叶变换(快速傅立叶变换)……

# 解决的问题
二分搜索 大整数乘法 棋盘覆盖 合并排序 快速排序 线性时间选择 最接近点对问题 循环赛日程表 汉诺塔

分解:将原问题分解为若干个规模较小,相互独立,与原问题形式相同的子问题 
解决:若子问题规模较小而容易被解决则直接解,否则递归地解各个子问题 
合并:将各个子问题的解合并为原问题的解
  • 解决汉诺塔问题代码实现
public class Hanoitower {

	public static void main(String[] args) {
		hanoiTower(10, 'A', 'B', 'C');
	}
	
	//汉诺塔的移动的方法
	//使用分治算法
	public 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->C
			System.out.println("第" + num + "个盘从 " + a + "->" + c);
			//3. 把B塔的所有盘 从 B->C , 移动过程使用到 a塔  
			hanoiTower(num - 1, b, a, c);
		}
	}

}

标签:分治,问题,算法,num,汉诺塔,hanoiTower,排序
From: https://www.cnblogs.com/chniny/p/16734605.html

相关文章

  • 基础算法脚本
    将字符串翻转:functionreverseString(str){//法一:/*letarr=[];for(leti=0;i<str.length;i++){arr.unshift(str[i]);}//console.log(arr);//[......
  • 计算空间物体包围球的两种算法实现_charlee44的博客
    1.概述在进行二维空间几何运算的之前,往往会用包围盒进行快速碰撞检测,从而筛掉一些无法碰撞到的可能。而在三维中,比较常用的就是包围球了。当然,如何计算包围球是一个问题......
  • 力扣算法第1题--两数之和(暴力题解&优化题解)
    两数之和题目描述:给定一个整数数组nums 和一个整数目标值target,请你在该数组中找出和为目标值target 的那 两个 整数,并返回它们的数组下标。你可以假设每种输......
  • Java实现SHA1单向加密算法
    importjava.security.MessageDigest;importjava.security.NoSuchAlgorithmException;publicclassSha1Util{publicStringsha1(Stringdata)throwsNoSuch......
  • 算法练习-第五天【哈希表】
    哈希表242.有效的字母异位词参考:代码随想录242.有效的字母异位词看完题目的第一想法本题最直接的做法就是两层for循环,暴力解题,时间复杂度O(\(n^2\))。因为题目只包含......
  • 算法第二章心得
    1.请以伪代码描述最大字段和的分治算法将序列a[1:n]分成长度相等的两段a[1:n/2]和a[n/2+1:n],则a[1:n]的最大子段和有三中情形:在[1,n/2]内;在[n/2+1,n]内;在起点位于[1,n/2......
  • 华东师范大学算法课ACM——框体排列
    框体排列单点限制:1.0sec内存限制:512MB数轴上有n个点,每个点有一个坐标ai。现在需要用数个宽度为k的框体覆盖数轴上全部n个点,求出最少需要的框体数量。输入格式......
  • 常见距离算法
    机器学习中有很多的距离计算公式,用于计算数据和数据之间的距离,进而计算相似度或者其他。1.欧式距离(EuclideanDistance)​ 欧式距离是最常见的距离度量方法。小学、初......
  • 冒泡算法排序
    for(vari=0;i<arr.length;i++){    for(varj=0;j<arr.length-i;j++){        if(arr[j]>arr[j+1]){//            vartemp=arr[j]; ......
  • 15 -- 排序算法之选择排序
    选择排序的思想:选择排序(selectsorting)也是一种简单的排序方法,它的基本思想是:第一次排序从arr[0]~arr[n-1]中选取最小值,与arr[0]交换,第二次排序从arr[1]~arr[n-1]中......