斐波那契

斐波那契额数列的性质

强颜欢笑 提交于 2019-11-29 17:17:29
总结一下斐波那契额数列的一些性质。(来自以下博客) https://www.cnblogs.com/Milkor/p/4734763.html https://blog.csdn.net/m0_37109329/article/details/78481951 一些恒等式: 一些数论相关性质: 来源: https://www.cnblogs.com/clno1/p/11524099.html

大话数据结构学习笔记 - 查找之顺序查找、折半查找、插值查找及斐波那契查找

孤街醉人 提交于 2019-11-29 16:35:38
大话数据结构学习笔记 - 查找之顺序查找、折半查找、插值查找及斐波那契查找 查找( Searching ) : 就是根据给定的某个值,在查找表中确定一个其关键字等于给定值的数据元素(或记录) 概论 概念 查找表( Search Table ) :由同一类型的数据元素(或记录)构成的集合 关键字( Key ) :数据元素中某个数据项的值,又称为键值,用来标识一个数据元素 主关键字( Primary Key ) :若关键字可以唯一的标识一个记录,则称此关键字为主关键字, 主关键字所在的数据项称为主关键码 次关键字( Secondary Key ) : 可以识别多个数据元素(或记录)的关键字 查找表 静态查找表 静态查找表( Static Search Table ) : 只做查找操作的查找表 查询某个特定数据元素是否在查找表中 检索某个特定数据元素和各种属性 动态查找表 动态查找表( Dynamic Search Table ) : 在查找过程中同时插入查找表中不存在的数据元素,或者从查找表中删除已经存在的某个数据元素 查找时插入数据元素 查找时删除数据元素 面向查找操作的数据结构称为查找结构 本文所有代码,示例数组为 {0,1,16,24,35,47,59,62,73,88,99} , 区间为 [1, 10] , 返回下标 0 则表示查找失败 顺序表查找 顺序查找(

静态查找学习笔记

試著忘記壹切 提交于 2019-11-29 16:30:38
最近在看<大话数据结构>,这本书真是写的好呀呀呀,关于查找做了些笔记. 一.顺序表查找 1. 顺序查找 也称为线性查找,查找过程基本是从第一个(或最后一个)开始查找,逐个与查找值的关键字对比是否相等,若相等查找成功,若到最后都没有没有相等,则查找失败. 时间. 顺序查找优化:即设定一个哨兵,解决了不用每次都要比较. 时间复杂度:O(N). int SequentialSearch ( int * a , int n , int key ) { a [0] = key ; int i = sizeof ( a )/ sizeof ( int ) - 1; // 因 a[0] =key 设定了是哨兵 ; ,当i==0时, a[0] 与 key 必定相等.这也是哨兵的作用 . while ( a [ i ] != key ) { i --; } return i ; } 二. 有序表查找(查找的数据是有序的) ※ 包括折半, 插值, 斐波那契查找. 1. 折半查找 又称二分查找,前提是查找表是有序的. 时间复杂度:O(logN). 查找过程:(1)在有序表中, 取中间值mid与关键字key进行比较,如果mid与key相等,则查 找成功.如果mid < key, 则(2), 如果mid > key,则(3). (2)取mid的左半端(不包括(1)mid)的中间值,转(1). (3

计算第n个斐波那契数(递归,非递归)

扶醉桌前 提交于 2019-11-29 15:43:09
#define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <stdlib.h> 递归: int Fibo(int n){ if (n <= 2) { return 1; } else { return(Fibo(n - 2) + Fibo(n - 1)); } } int main(){ int n; scanf("%d", &n); printf("第%d个斐波那契数为:%d\n", n,Fibo(n)); system("pause"); return 0; } 非递归: int main(){ int a = 1; int b = 1; int c = 1; int n; printf("请输入一个数: "); scanf("%d", &n); for (; n > 2; n--) { c = a + b; b = a; a = c; } printf("它的斐波那契数为:%d", c); system("pause"); return 0; } 来源: oschina 链接: https://my.oschina.net/u/4251026/blog/3134937

python 斐波那契数的几种形式

我们两清 提交于 2019-11-28 05:26:22
斐波那契 问第n个斐波那契数是多少?循环实现: a = 1 b = 1 while 1: n = int(input('请输入你要计算第几个斐波那契数:')) for i in range(1,n+1): if i == 1 or i == 2: a = 1 b = 1 else: a,b=a+b,a print(a) 循环实现 递归实现: def fib(n): if n == 1 or n == 2: return 1 return fib(n-1) + fib(n-2) print(fib(4)) 方法1简单但占内存(一次调两个自己) def fib(n,l=[0]): l[0] +=1 if n == 1 or n == 2: l[0] -=1 return 1,1 else: a,b = fib(n - 1) l[0] -= 1 if l[0] == 0: return a+b return b,a+b print(fib(6)) 方法2 不占内存 来源: https://www.cnblogs.com/xiuyou/p/11393899.html

Leetcode 509. 斐波那契数

試著忘記壹切 提交于 2019-11-28 03:45:53
利用矩阵来解,当然可以用递归,递推去做 如图: 所以f(n)就是左边矩阵的n-1次方后第1行第一列的数字 class Solution { public: struct Matrix//矩阵储存 { long long mat[3][3]; }; Matrix e;//单位矩阵 Matrix Mul(Matrix a, Matrix b)//矩阵相乘 { Matrix temp; for(int i = 1; i <= 2; i++) for(int j = 1; j <= 2; j++) temp.mat[i][j] = 0; for(int i = 1; i <= 2; i++) { for(int j = 1; j <= 2; j++) { for(int k = 1; k <= 2; k++) { temp.mat[i][j] += a.mat[i][k] * b.mat[k][j]; } } } return temp; } Matrix quickpow(Matrix a, int N)//快速幂 { for(int i = 1; i <= 2; i++)//初始单位矩阵 e.mat[i][i] = 1; Matrix res = e; while(N) { if(N & 1) res = Mul(res, a); a = Mul(a, a); N>>=1; }

常见的查找算法(四):斐波那契查找

…衆ロ難τιáo~ 提交于 2019-11-28 01:36:47
斐波那契搜索技术 是一种使用 分而治之算法 搜索 已 排序数组 的方法,该 算法 借助 斐波纳契数 来缩小可能的位置。 与 二元搜索 相比,排序数组被分成两个大小相等的部分,其中一个进一步检查,斐波那契搜索将数组分成两个部分,其大小为连续的斐波纳契数。平均而言,这导致执行的比较增加了大约4%, 但它的优点是只需要加法和减法来计算被访问数组元素的索引,而经典二进制搜索需要比特移位,除法或乘法,这些 操作在Fibonacci搜索时首先不常见出版。Fibonacci搜索具有 O(log n ) 的平均和最差情况复杂度。 总的来说是 二分查找 的一个优化。 Fibonacci序列 具有一个数字是其前面两个连续数的总和的属性。因此,可以通过重复添加来计算序列。两个连续数字的 比率 接近 黄金比率 ,1.618 ...二进制搜索通过将搜索区域除以相等的部分(1:1)来工作。Fibonacci搜索可以将其分成接近1:1.618的部分,同时使用更简单的操作。 构建 斐波那契 序列 数组(越到后面,前一个数与后一个数的比例接近0.618): 1 //构建斐波那契数列 2 public static void fibonacci(int[] F) { 3 F[0] = 0; 4 F[1] = 1; 5 for (int i = 2; i < max_size; ++i) 6 F[i] = F[i -

斐波那契循环节

半腔热情 提交于 2019-11-28 01:11:59
斐波那契循环节 从一道题引出一个算法: 斐波那契数列 这道题并没有什么花里胡哨的条件,就是很简单的计算 \(F(n)\ mod\ p\) 。 但是这题的 \(n\) 达到了 \(10^{30000000}\) 级别,很显然不能直接用矩阵快速幂做。 因此我们要引入一个概念:斐波那契循环节。 显而易见的是 通过看题解我们知道,斐波那契数列在模一个数时会出现循环,而这个周期的长度就称为斐波那契循环节。 所以我们只需要求出斐波那契循环节 \(m\) ,然后用矩阵快速幂计算 \(F(n\ mod\ m)\ mod\ p\) 就行了。 下面将会介绍如何计算斐波那契循环节。 (因为这只是介绍文并非论文,难免有不严谨之处,敬请谅解。本文以通俗易懂为前提,夹有较为详细的证明。) 参考自一篇全英文的paper The Period of the Fibonacci Sequence Modulo j \(Tips:\) \(1.\) 本文的数学推导具有一定难度,部分知识涉及到了高等代数和初等数论,不知道的东西可以上网查,如果实在不懂可以暂时跳过,因为这并不会影响到阅读其他部分。 \(2.\) 如果不想看证明过程,可以直接跳到第五部分看结论。 \(1.\) 前置知识 二次剩余 直接看我的另一篇博客吧。 二次剩余 域 有一个非空集合 \(G\) ,和在 \(G\) 上的一个二元运算 \(\cdot:G

剑指offer 斐波那契数

不羁岁月 提交于 2019-11-27 18:40:55
大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项(从0开始,第0项为0)。 n<=39 fib(1) = 1 fib(2) = 1; fib(3) = fib(1)+fib(2); fib(4) = fib(2)+fib(3); fib(n) = fib(n-2)+fib(n-1); public class Solution { public int Fibonacci(int n) { if(n == 0){ return 0; } if(n==1 || n==2 ){ return 1; } return Fibonacci(n-1)+Fibonacci(n-2); } } 来源: https://blog.csdn.net/sister_wang0712/article/details/99705149