1. 查找

问题定义:在非降序数组中,找出指定的元素,如从{1,2,3,6,8,12}中找出元素2的位置。

二分查找的复杂度(比较次数,又称查找长度)是O(1.5log(n)),但不是最优的。改进:fibonacci数列进行改进。

原因:对于一个非降序数组,二分查找向左查找。需要比较1次,而向右查找,需要比较2次,存在不平衡,而我们希望,正确的比较(向左查找)的次数多一些,所以,不再使用从中间元素分成两半,进行查找,而是以fibonacci数列的值(1、1、2、3、5、8、13、21、34)作为划分数组的依据。如假设待查找数组的长度是21-1=20,第一次二分的点是13-1=12的位置,依次类推。

2. 例子

分别计算成功命中/未命中的查找次数,向左走,比较1次;向右走,比较2次。算得查找长度比二分查找略小(4.00<4.14)

3 代码实现

与二分查找,唯一的不同在于分割点 middle point 取的是fibonacci数列中的点(黄金分割点,又叫轴点)。

4 推广与证明

二分查找与fibonacci数列查找的区别,在于分割点的选择上,我们将其设为λ,则查找的复杂度为 a(λ)log(n) 列出递推式,求解关于λ的系数函数a(λ),使其最小,可证明正好当λ=0.618是,a(λ)最小,即最优复杂度为1.44log(n).

5 改进

为了使左右对比的次数都为1,所以稍微改变对比的规则,和终止的条件。当待查找的数值小于中间索引的数值时,划分区间,左侧没变化, 右侧,将中间数值也囊括进去。这样,终止条件就成了,上限索引比下限索引小1时终止。

改进的特点在于: 最好情况变坏,最坏情况有所变好,整体性能趋于稳定。

hereto p65 https://www.bilibili.com/video/BV1hJ411S7wU?p=65

算法笔记_二分查找/斐波那契查找相关推荐

  1. Java数据结构之二分查找/插值查找/斐波那契查找

    目录 一.简单的线性查找 1.问题引出 2.代码实现 二.二分查找算法 1.基本介绍 2.代码实现(递归) 3.代码实现(非递归) 4.二分查找的功能完善 三.插值查找 1.简单介绍 2.代码实现(递 ...

  2. 理论基础 —— 查找 —— 斐波那契查找

    [概述] 斐波那契查找,其利用了黄金分割原理来对二分查找进行了改进. 黄金分割又称黄金比例,是指事物各部分间一定的数学比例关系,即将整体一分为二,较大部分与较小部分之比等于整体与较大部分之比,其比值约 ...

  3. 【数据结构与算法】插值查找算法、斐波那契查找算法(黄金分割法)的介绍和程序实现

    目录 1. 插值查找算法 1.1 插值查找算法的介绍 1.2 插值查找算法的程序实现 2. 斐波那契查找算法 2.1 斐波那契查找算法的介绍 2.2 斐波那契查找算法的程序实现 1. 插值查找算法 1 ...

  4. 斐波那契查找(黄金分割法)超详细详解

    斐波那契查找思路 说句实在话,这个斐波那契查找我看了不下5遍才理解他的思路和代码,因为它里面的值太多,不好理解容易绕晕,所以我给大家用自己的理解讲一下 什么是斐波那契 要想学会斐波那契查找,首先你得知 ...

  5. 查找算法-(顺序查找、二分查找、插值查找、斐波那契查找)

    1)顺序查找或叫线性查找 就是顺序遍历匹配 2)二分查找 package search;public class BinarySearch {/*** 二分查找数组必须有序*//**** @param ...

  6. 【Java数据结构与算法】第九章 顺序查找、二分查找、插值查找和斐波那契查找

    第九章 顺序查找.二分查找.插值查找和斐波那契查找 文章目录 第九章 顺序查找.二分查找.插值查找和斐波那契查找 一.顺序查找 1.基本介绍 2.代码实现 二.二分查找 1.基本介绍 2.代码实现 三 ...

  7. 顺序,二分,插值,斐波那契 查找算法

    总结: 博客详细描述:(http://www.cnblogs.com/maybe2030/p/4715035.html#_label4) 关注: 二分查找.插值查找以及斐波那契查找都可以归为一类插值查 ...

  8. java斐波那契查找_详解Java Fibonacci Search斐波那契搜索算法代码实现

    一, 斐波那契搜索算法简述 斐波那契搜索(Fibonacci search) ,又称斐波那契查找,是区间中单峰函数的搜索技术. 斐波那契搜索采用分而治之的方法,其中我们按照斐波那契数列对元素进行不均等 ...

  9. 算法:静态查找表(Static Search Table)(顺序查找、二分查找、插值查找、斐波纳契查找)

    转载 BinarySearch.java /*** @ClassName BinarySearch* @Description 折半查找** 可以使用插值公式将折半查找性能优化** 只需将其中的 mi ...

  10. Java有序表查找:折半查找、二分查找、差值查找和斐波那契查找

    Java有序表查找:折半查找.二分查找.差值查找和斐波那契查找     [尊重原创,转载请注明出处]http://blog.csdn.net/guyuealian/article/details/51 ...

最新文章

  1. Java-----instanceof、isInstance、isAssignableFrom
  2. EnterpriseLibrary2.0系列文章及下载
  3. 如何配置Spring的XML文件及使用
  4. Android 之 LogDog
  5. Hadoop常见错误解析
  6. SAP CRM product hierarchy和category的三个问题问答
  7. 解决mybatis generator无法覆盖XML
  8. c++将.cpp编译为.so文件
  9. 借个iPad玩玩,越狱4.2.1成功
  10. 未能找到服务器的主机名,未能找到服务器的主机名
  11. 2.4 残差网络为什么有用?
  12. win10,Net Share 共享,每次开机都会出现 --- 彻底关闭的方法---禁用server服务
  13. 【托马斯微积分11版---英文】读书笔记:前言--未完待续
  14. python绘制基因结构图_分分钟教你绘制基因结构图!
  15. 微信小程序自定义组件(1)----地址选择器
  16. android6.0系统车载航一,谷歌确定Android 6.0命名为Marshmallow
  17. 分布式数据库原理解析
  18. linux 二次封装 释放,Linux必学的60个命令(二)
  19. Unity 灯光与渲染 (一)
  20. systemd启动流程分析

热门文章

  1. 使用JS禁用浏览器后退按钮
  2. Java8 Base64
  3. cmd进入mysql界面的命令
  4. python学习笔记(十二)之函数
  5. hdu 1251(字典树)
  6. SharePoint2010企业开发最佳实践(八)---- SPWeb 对象
  7. 如何在MyEclipse 中将工程已经删除的文件恢复过来
  8. 如何使用Java代码获取文件、文件流或字符串的编码方式
  9. .Net MVC中SelectList绑定默认值失效的解决办法
  10. .Net发布到服务器出现必须添加对程序集“System.Runtime, Version=4.0.0.0, Culture=neutral, PublicKeyToken=的问题