一、二分查找算法(非递归)

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);}
}

二分查找、分治算法——汉诺塔问题相关推荐

  1. 分治算法——汉诺塔(HanoiTower)

    分治算法--汉诺塔 介绍 分治算法是一种很重要的算法.字面上的解释是"分而治之",就是把一个复杂的问题分成两个或更多的相同或相似的子问题,再把子问题分成更小的子问题···直到最后子 ...

  2. 三十三、分治算法---汉诺塔问题

    一.分治算法的介绍 分治法是一种很重要的算法.字面上的解释是"分而治之",就是把一个复杂的问题分成两个或更多的相同或 相似的子问题,再把子问题分成更小的子问题--直到最后子问题可以 ...

  3. 分治算法---汉诺塔

    思路分析 代码实现 package com.atguigu.dac;public class Hanoitower {public static void main(String[] args) {h ...

  4. 分治算法(汉诺塔游戏)

    分治算法 分治算法就是将原问题分解成n个规模较小,并且结构与原问题相似的子问题,再去递归地解决这些子问题,然后这些子问题,然后再合并其结果,就可以得到原问题的解. 分治算法的递归实现,每一层递归都会涉 ...

  5. hanoi java_java算法汉诺塔(hanoi)

    [实例简介]java算法汉诺塔(hanoi) [核心代码] public class Hanoi { /** * Hanoi塔问题 */ public static void main(String[ ...

  6. 玩游戏写算法——汉诺塔

    玩了个汉诺塔的flash游戏,总结下算法 四五层就不说了,太长,4层要15步,每步一截屏就刷死了,其实要想归纳出规律,最好还是玩四五层看看,多了才出规律. 上小下大,一个压一个,想把最底下的第 n 个 ...

  7. 算法 汉诺塔-java详解

    第一次看到这个算法时,很懵逼,是在栈那里.想了半天没想到半点跟栈有关系的解法.最后看了答案,是用的递归.但是看了答案还是很懵逼,下面就是博主自己对汉诺塔的一些了解. 有三根木桩,第一根上有n个盘子,最 ...

  8. 数据结构与算法 汉诺塔问题和列车车厢重排问题

    1. 汉诺塔问题: (a)通过递归的方式解决:https://blog.csdn.net/zj1131190425/article/details/85156570 // 汉诺塔问题: 递归解决方案 ...

  9. 算法自我分析——汉诺塔算法

    汉诺塔算法 汉诺塔(又称河内塔)问题是源于印度一个古老传说的益智玩具.大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘.大梵天命令婆罗门把圆盘从下面开始按大小 ...

最新文章

  1. c语言对齐方式研究笔记
  2. mac上使用zsh配置环境变量
  3. java2d游戏代码_Java 2D游戏图形
  4. 数组翻转_算法系列之翻转单词顺序
  5. conda(pip) bad interpreter的解决办法
  6. [LeetCode] 3. Longest Substring Without Repeating Characters 题解
  7. POJ3126 Prime Path(BFS)
  8. 基于DEV控件库的webservice打印.repx模板
  9. linux重定向文件容加时间,linux – Shell重定向和文件I / O持续时间
  10. 94页5万字市级应急平台建设方案
  11. 2021年如何有效地准备PMP考试?
  12. CNN与LeNet的应用-数字手写体识别
  13. 解决spacedesk卸载/重装软件时显示 指定的账户已存在
  14. 摄影图片分享网站项目制作总结
  15. Leetcode 1628. Design an Expression Tree With Evaluate Function [Python]
  16. 计算机的传播速度和传播速率一样吗,U盘传输速度和什么有关?
  17. 软件设计师:06-程序设计语言与语言处理程序基础
  18. 32位安装linux系统下载,CentOS 5.0 i386官方正式版系统(32位)
  19. 微信小程序 页面导航、传参、接收参数
  20. 基于maven自动发布-Maven Wagon

热门文章

  1. 论文阅读--Adapted Dynamic Memory Network for Emotion Recognition in Conversation
  2. c# OutlookBar控件
  3. 合并两个递增的有序数组
  4. Mac安装vim插件
  5. JDBC编程的六个步骤以及使用示例(详细)
  6. R语言 cowplot包快速拼图
  7. PTA单链表 - 20. 单值化(去重)
  8. 追源索骥:透过源码看懂Flink核心框架的执行流程--来自GitHub
  9. Markdown / KaTex数学公式汇总
  10. 转载:2019年AI顶级会议时间表