第十七章 二分查找(非递归)和分治算法(汉诺塔)

文章目录

  • 第十七章 二分查找(非递归)和分治算法(汉诺塔)
  • 一、二分查找
    • 1.思路
    • 2.代码实现
  • 二、分治算法(汉诺塔)
    • 1.概述
    • 2.汉诺塔

一、二分查找

1.思路

int[] arr = {1,3,8,10,11,67,100}(默认数组升序)

  1. while 循环 left 不小于 right 时,退出
  2. 找到中间结点 mid,小于目标结点则向右(left = mid + 1)、大于则向左(right = mid - 1)

2.代码实现

package com.sisyphus.binarysearchnorecursion;import java.util.Scanner;/*** @Description: 二分查找(非递归)$* @Param: $* @return: $* @Author: Sisyphus* @Date: 7/27$*/
public class BinarySearchNoRecur {public static void main(String[] args) {int[] arr = {1,3,8,15,23,39};Scanner scanner = new Scanner(System.in);System.out.println("请输入你要查找的整数:");int target = scanner.nextInt();int index = binarySearch(arr,target);System.out.println("要找的数的索引为:" + index);}private static int binarySearch(int[] arr, int target){int left = 0;int right = arr.length - 1;while (left <= right){int mid = (left + right) / 2;if (target == arr[mid]){return mid;}else if(target > arr[mid]){left = mid + 1;}else{right = mid - 1;}}return -1;}
}

二、分治算法(汉诺塔)

1.概述

分治算法,即分而治之:把一个复杂问题分成两个或更多的相同或相似子问题,直到最后子问题可以简单地直接求解,最后将子问题的解合并为原问题的解。归并排序就是一个典型的分治算法

分治算法遵循三个步骤:

  1. 分解:分解原问题为结构相同的子问题(即寻找子问题)
  2. 解决:当分解到容易求解的边界后,进行递归求解
  3. 合并:将子问题的解合并成原问题的解

伪代码:

Divide-and-Conquer(P)
if |P| ≤ n0then return(ADHOC(P))
将 P 分解为较小的子问题 P1,P2,……,Pkfor i ← 1 to kdo yi ← Divide-and-Conquer(Pi) 												

【Java数据结构与算法】第十七章 二分查找(非递归)和分治算法(汉诺塔)相关推荐

  1. 数据结构之栈与递归的应用(汉诺塔递归解法)

    上一节简单的讲述了递归的实现与简单应用,接下来我们说一下另一个经典应用. 汉诺塔递归解法 一.起源: 汉诺塔(又称河内塔)问题是源于印度一个古老传说的益智玩具.大梵天创造世界的时候做了三根金刚石柱子, ...

  2. 算法 - 二分查找(非递归实现二分查找)

    package Algorithm.binarysearchnorecursion;public class BinaaySearchNoRecur {public static void main( ...

  3. 二分查找非递归方式实现

    思路分析 代码实现 package com.atguigu.binarysearchnorecursion;/*** @创建人 wdl* @创建时间 2021/4/2* @描述*/ public cl ...

  4. 算法(9)汉诺塔图解及其代码实现

    写在前面: 我是「扬帆向海」,这个昵称来源于我的名字以及女朋友的名字.我热爱技术.热爱开源.热爱编程.技术是开源的.知识是共享的. 这博客是对自己学习的一点点总结及记录,如果您对 Java.算法 感兴 ...

  5. 用python递归的算法解决汉诺塔问题

    关于递归的四条基准法则 基准情形: 必须由某些基准情形,它无需递归就能解出 不断推进: 对于那些需要递归的情形,每一次递归调用都必须要使求解的状况朝接近基准情形的方向推进 设计法则: 假设所有的递归调 ...

  6. 信息学奥赛一本通 提高篇 第一部分 基础算法 第2章 二分与三分

    信息学奥赛一本通 提高篇 提高版 第一部分 基础算法 第2章 二分与三分 信息学奥赛一本通 提高篇 提高版 第一部分 基础算法 第2章 二分与三分_mrcrack的博客-CSDN博客_信息学奥赛一本通 ...

  7. Java算法--第二章--查找与排序(2)递归基础--佩波那契最大公约数插入排序汉诺塔

    Java算法–第二章–查找与排序(2)递归基础 一.找重复 1.找到一种划分方法 2.找到递推公式或者等价转换 都是父问题转化为求解子问题 二.找变化的量 变化的量通常要作为参数 三.找出出口 代码: ...

  8. 用java编写汉诺塔问题_数据结构与算法之汉诺塔问题(Java递归)

    汉诺塔问题: 有三根柱子,源杆A,暂存杆temp,目的杆C A上有n层盘子,由小到大向下排列,现需要将A杆的盘子移到C杆中 要求:1)大的盘在下面,小的盘在上面 2)一次只能移动一个盘子 个人思路:先 ...

  9. 经典算法之左边界二分查找法(俗称左边界二分搜索法)

    经典算法之左边界二分查找法(俗称左边界二分搜索法) 文章目录 经典算法之左边界二分查找法(俗称左边界二分搜索法) 前言 一.什么左边界二分查找法? 二.代码实现 总结 前言 就算法而言,我们主要学习的 ...

最新文章

  1. oracle+trunkc,Oracle常用备份与恢复操作
  2. Nginx反向代理多个应用时,通过BluePring使Flask支持二级路径(URL前缀)
  3. 为什么 Java 线程没有 Running 状态?
  4. 前端开发工具vue.js开发实践总结
  5. Linux下对Verilog文件进行leda检错
  6. excel怎么设置打印区域_别再浪费打印纸了!这样设置,Excel表格再大都能打印成一页!...
  7. python beautiful soup 标签完全相同_Python爬取Python教程并制作成pdf
  8. matlab中计算不等式的解,matlab解不等式
  9. o00o0o php,PHP $O00OO0=urldecode eval 解密,记一次商业源码的去后门
  10. 物体运动到一个点停止_教科版五年级上册第四单元运动和力复习要点
  11. antd upload手动上传_SpringBoot 如何上传大文件?
  12. 高清 GJB-5000B,2021最新版发布,软件能力成熟度模型
  13. mysql sql语句优化面试题_SQL面试题之SQL优化
  14. springboot+基于JavaWEB学生课程考试系统 毕业设计-附源码171548
  15. CHM格式打不开解决方案
  16. 基于CNN的人脸 性别、年龄识别
  17. 无为的生活中有所感悟的一篇劝勉高考生的文章
  18. image标签不显示照片img标签能显示
  19. Python+uiautomator2手机UI自动化测试实战
  20. Logistic Regression 逻辑斯蒂回归

热门文章

  1. java线程下载文件_Java多线程下载文件实例详解
  2. nginx作用_云服务器:详解Nginx启用proxy_buffer缓冲
  3. java框架之Quartz-任务调度整合Spring
  4. 导入 kotlin(7)
  5. oracle删除死锁进程
  6. 前端-选项卡(菜单栏)
  7. Redis命令参考【EXPIRE】
  8. 普林斯顿公开课 算法1-5:算法理论
  9. jquery获取iframe里的js事件
  10. WPF 后台访问资源图片