斐波那契算法的理解

news/2024/12/2 18:55:06/

1.斐波那契数列 :

数组:int[] F={1, 1, 2, 3, 5, 8, 13, 21, 34, 55 };

特点:

从第三个数开始,后边每一个数都是前两个数的和 。F[k]=F[k-1]+F[k-2];

如图所示:

        ①low、mid、high都是F数组的索引,F[k]-1表示长度。

        ②为了方便计算出mid,变形:F[k]-1 = (F[k-1]-1) + (F[k-2]-1) + 1;(多出来的1,可以当作mid)

        ③high=(F[k]-1)-1;

        mid=low+F[k-1]-1;

2.需求:

        现在有一个数组int[] arr={1,8,10,89,1000,1234},长度n=6;

        需要定义一个方法,从arr数组中找到数值为80(key=80),

        若有,则返回索引,若没有,就返回-1。

分析:

①黄金分割点: 

        黄金比例又称黄金分割,是指事物各部分间一定的数学比例关系,即将整体一分为二,较大部分与较小部分之比等于整体与较大部分之比,其比值约为1:0.618或1.618:1。

结论:

        只要顺序表的长度是F[k]-1,就可以分成两段:较大部分F[k-1]-1,和较小部分F[k-2]-1。

③黄金分割点,是按照长度来划分,与索引有密切关系。

        一旦确定了数组arr的黄金分割点mid,之后就可以拿着我们要找的80与黄金分割点mid索引的元素值比较。再之后与二分查找类似。

④arr数组的长度n,是固定的值6,由于(F[k]-1)是不定的,最大值可以非常大,可看成无限大。

        所以总是会存在:(F[k]-1)的值刚好大于或等于长度6。

        arr数组的长度n确定了,那么(F[k]-1)的值也就确定了。

因此只要arr数组中元素个数n能达到此时的(F[k]-1),就可以把arr数组分成两段,从而确定黄金分割点。

⑤新建一个数组brr,长度为(F[k]-1)。然后把arr这个数组中的数据全都拷贝到brr数组中,不足的部分先用0补充,最后把0换成arr的最后一个元素来补充(即arr[high])。

拿着key=80,与brr[mid]比较,

若key大,就把黄金分割点及右侧的部分都删除。

若key小,就把黄金分割点及左侧的部分都删除。

然后产生新的黄金分割点,再比较,直至两者相等,

若最终一直没找到,low>high就停止寻找。


http://www.ppmy.cn/news/262136.html

相关文章

UTXO理解

UTXO 代表 Unspent Transaction Output, 表示未花费的输出。 以现实的钱包举例,一个钱包中有一个10元、1个5元,1个1元,一共16元。比特币一个账户的余额,也是根据这个账户UTXO计算的。 当花12元买东西时,可…

utxo解释

UTXO是比特币交易的基本单位UTXO(Unspent Transaction Outputs)是未花费的交易输出,它是比特币交易生成及验证的一个核心概念。交易构成了一组链式结构,所有合法的比特币交易都可以追溯到前向一个或多个交易的输出,这些…

Umi

目录标题 1 项目目录2 项目配置3 环境变量4 多份环境配置文件5 跨域请求代理 1 项目目录 官方文档 -> https://umijs.org/zh-CN### 项目目录结构 (没有的就自己创建) ------------------------------------------------------------------------------ ├── config …

umi -- 插件

umi插件 plugin-access 启用方式: 有src/access.ts时启用 des:约定了 src/access.ts 为我们的权限定义文件,该文件需要默认导出一个方法,导出的方法会在项目初始化时被执行。该方法需要返回一个对象,对象的每一个值就对应定义了…

Moamen and XOR

C. Moamen and XOR 莫阿门和伊扎特在玩游戏。他们创建了一个由n个非负整数组成的数组a其中每个元素都小于2k。 当a1&a2&a3&…&an≥a1⊕a2⊕a3⊕…其中&为按位与运算,⊕为按位异或运算。 请计算出Moamen数组a的中奖数量。 由于结果可能非常大&am…

umi.js

umi使用步骤 相关配置 在.umirc.ts文件中配置hash为true时,打包完dist目录下的js和css文件会生成随机hash值 配置base则会改变首页文件的访问路径,配置的时候还要一起配置一个publicPath,一般和base相同,添加这个的目的就是在dist生成的ind…

CubeMX的简介

在Cube工具还没出来之前,在ST的MCU开发都是用标准固件库,标准库自推出以来受到ST的使用者的推崇,现在很多公司也都在使用。但是ST官方在2013年后就没有更新版本,ST官方也全力推HAL(Hardware Abstraction Layer&#xf…

Ymodem

目录 一、数据帧格式 1.1 起始帧 1.2 数据帧 1.3 结束帧 二、文件传输流程 2.1 传输符号表 三、CRC校验源码 一、数据帧格式 1.1 起始帧 格式1(128byte):SOH 00 FF filename[ ] filezise[ ] NUL[ ] CRCH CRCL 格式2(1k …