二分查找、分治算法——汉诺塔问题
一、二分查找算法(非递归)
1)二分查找法只适用于从有序的数列中进行查找(比如数字和字母等),将数列排序后在进行查找
2)二分查找算法的运行时间为对数时间,即查找到需要的目标位置最多只需要log以2为底n的对数步,假设从[0 ,99] 的队列(100个数,即 n = 100)中寻到目标数为 30 ,则需要查找步数为 ,即最多需要查找6次
代码实现
public static void main(String[] args) {int[] arr = {1,3,8,10,11,67,100};int index = binarySearch(arr, 1000);System.out.println("index = "+index);
}public static int binarySearch(int[] arr, int target){int left = 0;int right = arr.length - 1;while (left <= right) {int mid = (left + right) / 2;if(arr[mid] == target){return mid;} else if (arr[mid] > target) {right = mid - 1; // 向左查找}else{left = mid + 1;}}return -1;
}
二、分治算法
1)分治法是一种很重要的算法。字面上的解释是”分而治之“,就是把一个复杂的问题分成2个或更多的相同或相似的子问题,再把子问题分层更小的子问题…直到最后子问题可以简单的直接求解,原问题的解即子问题的解的合并。这个技巧是很多高效算法的基础,如排序算法(快速排序,归并排序)傅里叶变换
2)分治算法可以 求解的问题
- 二分搜索
- 大整数乘法
- 棋盘覆盖
- 合并排序
- 快速排序
- 线性时间选择
- 最接近点对问题
- 循环赛日程表
- 汉诺塔
分治算法的基本步骤
分解:将原问题分解为诺干个规模较小,相互独立,与原问题形式相同的子问题
解决:若子问题规模较小而容易被解决则直接解,否则递归地解各个子问题
汉诺塔游戏实现思路
1)如果是有一个盘,A --> C
如果我们有 n>=2 情况,我们总是可以看作是两个盘,1. 最下面的一个盘。2. 上面的所有盘
1)先把最上面的盘 A --> B
2)最下边的盘 A --> C
3)把 B 塔的所有盘从 B --> C
代码实现
public static void main(String[] args) {han(2, 'A', 'B', 'C');
}
public static void han(int n, char a, char b, char c){if(n == 1){System.out.println("第1个盘从 " + a + " 移动到了 " + c);} else {// 先将最上面的盘移动到 Bhan(n - 1, a, c, b);// 将最下面的盘移动到 CSystem.out.println("第"+n+"个盘从 " + a + " 移动到了 " + c);// 将 B 上的盘移动到 Chan(n - 1, b, a, c);}
}
二分查找、分治算法——汉诺塔问题相关推荐
- 分治算法——汉诺塔(HanoiTower)
分治算法--汉诺塔 介绍 分治算法是一种很重要的算法.字面上的解释是"分而治之",就是把一个复杂的问题分成两个或更多的相同或相似的子问题,再把子问题分成更小的子问题···直到最后子 ...
- 三十三、分治算法---汉诺塔问题
一.分治算法的介绍 分治法是一种很重要的算法.字面上的解释是"分而治之",就是把一个复杂的问题分成两个或更多的相同或 相似的子问题,再把子问题分成更小的子问题--直到最后子问题可以 ...
- 分治算法---汉诺塔
思路分析 代码实现 package com.atguigu.dac;public class Hanoitower {public static void main(String[] args) {h ...
- 分治算法(汉诺塔游戏)
分治算法 分治算法就是将原问题分解成n个规模较小,并且结构与原问题相似的子问题,再去递归地解决这些子问题,然后这些子问题,然后再合并其结果,就可以得到原问题的解. 分治算法的递归实现,每一层递归都会涉 ...
- hanoi java_java算法汉诺塔(hanoi)
[实例简介]java算法汉诺塔(hanoi) [核心代码] public class Hanoi { /** * Hanoi塔问题 */ public static void main(String[ ...
- 玩游戏写算法——汉诺塔
玩了个汉诺塔的flash游戏,总结下算法 四五层就不说了,太长,4层要15步,每步一截屏就刷死了,其实要想归纳出规律,最好还是玩四五层看看,多了才出规律. 上小下大,一个压一个,想把最底下的第 n 个 ...
- 算法 汉诺塔-java详解
第一次看到这个算法时,很懵逼,是在栈那里.想了半天没想到半点跟栈有关系的解法.最后看了答案,是用的递归.但是看了答案还是很懵逼,下面就是博主自己对汉诺塔的一些了解. 有三根木桩,第一根上有n个盘子,最 ...
- 数据结构与算法 汉诺塔问题和列车车厢重排问题
1. 汉诺塔问题: (a)通过递归的方式解决:https://blog.csdn.net/zj1131190425/article/details/85156570 // 汉诺塔问题: 递归解决方案 ...
- 算法自我分析——汉诺塔算法
汉诺塔算法 汉诺塔(又称河内塔)问题是源于印度一个古老传说的益智玩具.大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘.大梵天命令婆罗门把圆盘从下面开始按大小 ...
最新文章
- c语言对齐方式研究笔记
- mac上使用zsh配置环境变量
- java2d游戏代码_Java 2D游戏图形
- 数组翻转_算法系列之翻转单词顺序
- conda(pip) bad interpreter的解决办法
- [LeetCode] 3. Longest Substring Without Repeating Characters 题解
- POJ3126 Prime Path(BFS)
- 基于DEV控件库的webservice打印.repx模板
- linux重定向文件容加时间,linux – Shell重定向和文件I / O持续时间
- 94页5万字市级应急平台建设方案
- 2021年如何有效地准备PMP考试?
- CNN与LeNet的应用-数字手写体识别
- 解决spacedesk卸载/重装软件时显示 指定的账户已存在
- 摄影图片分享网站项目制作总结
- Leetcode 1628. Design an Expression Tree With Evaluate Function [Python]
- 计算机的传播速度和传播速率一样吗,U盘传输速度和什么有关?
- 软件设计师:06-程序设计语言与语言处理程序基础
- 32位安装linux系统下载,CentOS 5.0 i386官方正式版系统(32位)
- 微信小程序 页面导航、传参、接收参数
- 基于maven自动发布-Maven Wagon