斐波那契查找算法中为什么需要把数组长度扩充到f[k]-1而不是f[k]或者f[k+1]
这是斐波那契查找的理解难点。
这是为了能正确递归计算mid值,看下图可发现 f[k]-1 = (f[k-1] + f[k-2]) - 1 = (f[k-1]-1) + 1 + (f[k-2]-1),中间的1就是我们二分的锚点mid,如果目标在左区,数组长度就缩到(f[k-1]-1),如果在右区,数组长度就缩到(f[k-2]-1),否则就等于mid完成查找。而(f[k-1]-1)又能拆成(f[k-2]-1)+1+(f[k-3]-1),这样递归分割下去就能不断的缩小区间直至找到目标。
假如扩充到f[k],f[k] = f[k - 1] + f[k - 2],少了一个mid点。
假如扩充到f[k + 1]点,f[k + 1] = f[k] + f[k - 1],少了一个mid点。
假如扩充到f[k] + 1点,f[k] + 1 = f[k - 1] + 1 + f[k - 2],这里mid点有了,但是接下来f[k - 1]和f[k - 2]都无法拆分出mid点。
斐波那契查找算法中为什么需要把数组长度扩充到f[k]-1而不是f[k]或者f[k+1]相关推荐
- 查找算法之斐波那契查找算法
斐波那契(黄金分割法)查找算法 (一)算法简介 (1)斐波那契数列 在讲算法之前,我们先介绍一下斐波那契数列,该数列公式为F(K) = F(k-1) + F(k-2),即 1.1.2.3.5.8.13 ...
- 斐波那契查找算法解析
文章目录 前言 一.斐波那契数列 二.斐波那契查找算法 前言 学数据结构的时候被斐波那契查找算法困扰,刚开始难以理解,脑袋有点懵,翻看了许多大佬的博文,加上自己的理解发了出来 一.斐波那契数列 我们先 ...
- 007.斐波拉契查找算法
1. 斐波拉契查找算法 斐波拉契查找算法也称为黄金分割查找算法,它是在折半查找算法的基础上根据斐波拉契数列进行分割.折半法是取排序好的中间值进行分割,而斐波拉契查找算法是根据黄金分割点进行分割. 黄金 ...
- 【数据结构与算法】插值查找算法、斐波那契查找算法(黄金分割法)的介绍和程序实现
目录 1. 插值查找算法 1.1 插值查找算法的介绍 1.2 插值查找算法的程序实现 2. 斐波那契查找算法 2.1 斐波那契查找算法的介绍 2.2 斐波那契查找算法的程序实现 1. 插值查找算法 1 ...
- 查找算法:斐波那契查找算法实现及分析
斐波那契查找算法介绍 斐波那契查找法肯定与斐波那契相关嘛,斐波那契数列 又称黄金分割数列.所以我们先把黄金分割弄懂,后面代码才能看得懂!黄金分割点大家都知道吧.1:0.618或者1.618:1,我们的 ...
- 顺序,二分,插值,斐波那契 查找算法
总结: 博客详细描述:(http://www.cnblogs.com/maybe2030/p/4715035.html#_label4) 关注: 二分查找.插值查找以及斐波那契查找都可以归为一类插值查 ...
- 二十三、斐波那契查找算法
一.基本介绍 1.黄金分割点是指把一条线段分割为两部分,使其中一部分与全长之比等于另一部分与这部分之比.取其前三位 数字的近似值是 0.618.由于按此比例设计的造型十分美丽,因此称为黄金分割,也称为 ...
- 查找算法-(顺序查找、二分查找、插值查找、斐波那契查找)
1)顺序查找或叫线性查找 就是顺序遍历匹配 2)二分查找 package search;public class BinarySearch {/*** 二分查找数组必须有序*//**** @param ...
- 【Java数据结构与算法】第九章 顺序查找、二分查找、插值查找和斐波那契查找
第九章 顺序查找.二分查找.插值查找和斐波那契查找 文章目录 第九章 顺序查找.二分查找.插值查找和斐波那契查找 一.顺序查找 1.基本介绍 2.代码实现 二.二分查找 1.基本介绍 2.代码实现 三 ...
- JAVA数据结构与算法之斐波那契查找(黄金分割点)
前言 最近面临毕业就业,在复习数据结构与算法,为了更好地掌握,加深印象,所以决定写一些博客来知识复现. 温馨提示:这篇博客可能不适合刚学数据结构的新手. 算法的简单介绍 黄金分割点是指把一条线段分割为 ...
最新文章
- 【摄像头】宽动态范围
- 2017-2018-1 20155321 《信息安全系统设计基础》课下作业3
- Mysql---之Mysqladmin修改账号密码方式
- sqlserver复习总结
- uni-app小程序本地打包超过2M不能预览问题;小程序打包过大不能预览和真机调试;uni-app分包;
- xcode+文字支持html元素,iOS使用UITextview实现富文本编辑
- Redis-哨兵机制,实现高可用
- realsched.exe进程
- 【语音分析】基于matlab线性预测系数对比【含Matlab源码 557期】
- 卸载有卸载密码和安全策略的OFFICESCAN客户端(破解)
- MinDoc 权限的简单配置
- 求职面试PPT模板推荐
- 0723电话面试整理
- GATK-HaplotypeCaller 变异检测详解
- 多台路由器,不同网段的设备之间如何互访?
- 万字面试分享贴!从十二个角度解析面试全流程!附互联网公司Offer难度系数分析...
- Windows NT引导过程源代码分析
- Mysql高性能优化
- AFNetWorking改为同步请求
- Open3D RANSAC拟合空间直线
热门文章
- 安装和启动tftp-server服务器及可能出现Redirecting to /bin/systemctl restart xinetd.service问题的解决方式...
- Unix环境高级编程(十九)终端I/O
- 读Zepto源码之Data模块
- HTML5 input新增属性
- 自动登录Windows系统
- Qt 使用vs调试的方法
- 11月26日struts项目练习
- 6.Kong入门与实战 基于Nginx和OpenResty的云原生微服务网关 --- Lua 语言
- 5. Javascript 错误和异常
- 第4讲 The Zend Framework MVC Architecture