算法笔记_二分查找/斐波那契查找
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
算法笔记_二分查找/斐波那契查找相关推荐
- Java数据结构之二分查找/插值查找/斐波那契查找
目录 一.简单的线性查找 1.问题引出 2.代码实现 二.二分查找算法 1.基本介绍 2.代码实现(递归) 3.代码实现(非递归) 4.二分查找的功能完善 三.插值查找 1.简单介绍 2.代码实现(递 ...
- 理论基础 —— 查找 —— 斐波那契查找
[概述] 斐波那契查找,其利用了黄金分割原理来对二分查找进行了改进. 黄金分割又称黄金比例,是指事物各部分间一定的数学比例关系,即将整体一分为二,较大部分与较小部分之比等于整体与较大部分之比,其比值约 ...
- 【数据结构与算法】插值查找算法、斐波那契查找算法(黄金分割法)的介绍和程序实现
目录 1. 插值查找算法 1.1 插值查找算法的介绍 1.2 插值查找算法的程序实现 2. 斐波那契查找算法 2.1 斐波那契查找算法的介绍 2.2 斐波那契查找算法的程序实现 1. 插值查找算法 1 ...
- 斐波那契查找(黄金分割法)超详细详解
斐波那契查找思路 说句实在话,这个斐波那契查找我看了不下5遍才理解他的思路和代码,因为它里面的值太多,不好理解容易绕晕,所以我给大家用自己的理解讲一下 什么是斐波那契 要想学会斐波那契查找,首先你得知 ...
- 查找算法-(顺序查找、二分查找、插值查找、斐波那契查找)
1)顺序查找或叫线性查找 就是顺序遍历匹配 2)二分查找 package search;public class BinarySearch {/*** 二分查找数组必须有序*//**** @param ...
- 【Java数据结构与算法】第九章 顺序查找、二分查找、插值查找和斐波那契查找
第九章 顺序查找.二分查找.插值查找和斐波那契查找 文章目录 第九章 顺序查找.二分查找.插值查找和斐波那契查找 一.顺序查找 1.基本介绍 2.代码实现 二.二分查找 1.基本介绍 2.代码实现 三 ...
- 顺序,二分,插值,斐波那契 查找算法
总结: 博客详细描述:(http://www.cnblogs.com/maybe2030/p/4715035.html#_label4) 关注: 二分查找.插值查找以及斐波那契查找都可以归为一类插值查 ...
- java斐波那契查找_详解Java Fibonacci Search斐波那契搜索算法代码实现
一, 斐波那契搜索算法简述 斐波那契搜索(Fibonacci search) ,又称斐波那契查找,是区间中单峰函数的搜索技术. 斐波那契搜索采用分而治之的方法,其中我们按照斐波那契数列对元素进行不均等 ...
- 算法:静态查找表(Static Search Table)(顺序查找、二分查找、插值查找、斐波纳契查找)
转载 BinarySearch.java /*** @ClassName BinarySearch* @Description 折半查找** 可以使用插值公式将折半查找性能优化** 只需将其中的 mi ...
- Java有序表查找:折半查找、二分查找、差值查找和斐波那契查找
Java有序表查找:折半查找.二分查找.差值查找和斐波那契查找 [尊重原创,转载请注明出处]http://blog.csdn.net/guyuealian/article/details/51 ...
最新文章
- Java-----instanceof、isInstance、isAssignableFrom
- EnterpriseLibrary2.0系列文章及下载
- 如何配置Spring的XML文件及使用
- Android 之 LogDog
- Hadoop常见错误解析
- SAP CRM product hierarchy和category的三个问题问答
- 解决mybatis generator无法覆盖XML
- c++将.cpp编译为.so文件
- 借个iPad玩玩,越狱4.2.1成功
- 未能找到服务器的主机名,未能找到服务器的主机名
- 2.4 残差网络为什么有用?
- win10,Net Share 共享,每次开机都会出现 --- 彻底关闭的方法---禁用server服务
- 【托马斯微积分11版---英文】读书笔记:前言--未完待续
- python绘制基因结构图_分分钟教你绘制基因结构图!
- 微信小程序自定义组件(1)----地址选择器
- android6.0系统车载航一,谷歌确定Android 6.0命名为Marshmallow
- 分布式数据库原理解析
- linux 二次封装 释放,Linux必学的60个命令(二)
- Unity 灯光与渲染 (一)
- systemd启动流程分析
热门文章
- 使用JS禁用浏览器后退按钮
- Java8 Base64
- cmd进入mysql界面的命令
- python学习笔记(十二)之函数
- hdu 1251(字典树)
- SharePoint2010企业开发最佳实践(八)---- SPWeb 对象
- 如何在MyEclipse 中将工程已经删除的文件恢复过来
- 如何使用Java代码获取文件、文件流或字符串的编码方式
- .Net MVC中SelectList绑定默认值失效的解决办法
- .Net发布到服务器出现必须添加对程序集“System.Runtime, Version=4.0.0.0, Culture=neutral, PublicKeyToken=的问题