#include "stdio.h"
#include "string.h"
#include "malloc.h"
#define MAX_LIST 50
typedef struct _SqList {
int data[MAX_LIST];
int length;
}SqList;
//The key difference between Fibonacci search and binary search
//is how the anchor point is determined.
bool FibonacciSearch( SqList* L, int key, int& loc )
{
static int F[] = { 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55 };
int low = 0;
int high = L->length - 1;
int mid;
int l = L->length;
int k = 0;
for( ; F[k] < L->length; k++ );
int *buf = L->data;
//padding with duplicate numbers if necessary
if( F[k] > MAX_LIST )
{
buf = (int*)malloc( F[k]*sizeof(buf[0]) );
memcpy( buf, L->data, L->length*sizeof(buf[0]) );
}
for( ; l < F[k]; l++ )
buf[l] = L->data[high];
l = -1;
high = F[k] - 1;
while( k > 0 && low <= high )
{
mid = low + F[k-1];
if( key < buf[mid] )
{
high = mid - 1;
k = k - 1;
}
else if( key > buf[mid] )
{
low = mid + 1;
k = k -2;
}
else
{
if( mid < L->length )
l = mid;
else
l = L->length - 1;
break;
}
}
if( buf != L->data ) free(buf);
return ( loc = l ) != -1;;
}
int main()
{
SqList d;
int intarr[] = {1,10,23,48,65,67,78,79,98,100};
memcpy( d.data, intarr, sizeof(intarr));
d.length = sizeof(intarr)/sizeof(int);
int index = 0;
for( ; index < d.length; index++ )
printf(" %d", d.data[index] );
int key = 100;
printf("\nfibonacci search %d...\n", key);
FibonacciSearch( &d, key, index );
printf("%d is at position %d\n", key, index);
printf("\n");
return 0;
}
相关推荐
C语言实现斐波那契搜索Fibonacci search算法(附完整源码)
斐波那契搜索Fibonacci search算法斐波那契搜索Fibonacci search算法的完整源码(定义,实现,main函数测试) 斐波那契搜索Fibonacci search算法的完整源码(定义,实现,main函数测试) #include <stdio.h> #include <stdlib.h> int fibMonaccianSearch(int arr[], int x, int n) { /* Initialize fibonacci numbers */
查找算法-斐波那契查找法(Fibonacci Search)
斐波那契查找法又称为斐氏查找法,此查找法和二分法一样都是以分割范围来进行查找的,不同的是斐波那契查找法不是按对半方式来分割的,而是以斐波那契级数的方式来分割的。斐波那契级数的定义如下:斐波那契级数:0、1、1、2、3、5、8、13、21、34、55、89、...。也就是除了第0个和第1个元素外,级数中的每个元素值都是前两个元素值的和。斐波那契查找法的好处是只需要用到加减运算而不需要用到乘除运算,这从计算机运算的过程来看效率会高于前两种查找法。在尚未介绍斐波那契查找法之前,我们先来认识斐波那契树。
Python fibonacci search斐波那契查找算法详解及源码
斐波那契查找算法是一种用于有序数组的快速查找算法。它利用了斐波那契数列的特性来进行查找操作。
七大查找之斐波那契查找
文章目录1.基本思想2.算法步骤3.代码实现3.1.算法实现3.2.测试程序4.实验结果 1.基本思想 斐波那契搜索(Fibonacci search) ,又称斐波那契查找,是区间中单峰函数的搜索技术。斐波那契查找就是在二分查找的基础上根据斐波那契数列进行分割的。(mid的关系式不同) 斐波那契查找同样是查找算法家族中的一员,它要求数据是有序的(升序或降序)。斐波那契查找采用和二分查找/插值查找相似的区间分割策略,都是通过不断的分割区间缩小搜索的范围 。(分治法) 斐波那契数列(Fibonacci sequ
人形机器人系列——硬件介绍
人形机器人是多领域交叉技术的产物,主要由三大系统组成:感知系统、决策系统和执行系统。感知系统感知系统是人形机器人获取外界信息的途径,主要由各种传感器组成。其中,视觉传感器用于获取图像信息,如摄像头、激光雷达等;触觉传感器用于感知触碰和压力,如力/力矩传感器、声学传感器等。这些传感器收集到的信息为机器人的决策和执行提供基础。决策系统决策系统是人形机器人的大脑,负责处理和决策各种信息。它由芯片和算法组成。芯片是硬件基础,提供计算能力;算法是软件基础,用于处理和分析传感器收集到的信息,并做出相应的决策。执行系统。
unity转微信小游戏:UI大小设置
unity转微信小游戏:UI大小设置
【算法系列 | 12】深入解析查找算法之—斐波那契查找
查找算法是计算机科学中的一类算法,用于在数据集中寻找特定值或数据项。其目标是确定数据是否存在于给定的数据结构中,并找到数据项的位置(索引)或其他相关信息。不同的查找算法适用于不同类型的数据结构,数据有序性,以及数据规模。以下是一些常见的查找算法以下是一些常见的查找算法及其应用场景:布隆过滤器(Bloom Filter):适用于判断一个元素是否存在于一个大规模的数据集中,时间复杂度为O(1),但有一定的误判率。二分查找。
从零配置到批量处理:FaceFusion 3.1完整使用指南(含hififace_256模型测试)
本文详细介绍了FaceFusion 3.1的完整使用指南,包括环境配置、模型选择(特别是hififace_256模型的深度测试)以及批量处理技巧。通过AI驱动的脸部替换技术,帮助用户高效实现高质量的面部处理,适用于影视制作、广告设计等多种场景。
浅谈:斐波那契搜索算法(Fibonacci search)
一:有趣的背景 谈到斐波那契查找算法,总是有一个神奇的数字与之紧密相连——黄金分割数(0.618)。黄金分割数被公认为最具有审美意义的比例数字,这个数值的作用不仅仅体现在诸如绘画、雕塑、音乐、建筑等艺术领域,而且在管理、工程设计等方面也有着不可忽视的作用。在斐波那契数列中,也存在着黄金分割数的身影。我们不妨在斐波那契数列中寻找一下它的身影。 斐波那契数列:0 1 1 2 3 5 8 13 21 34 55 89 144 233 377… 1/2 = 0.5; 2/3 = 0.667; 3/5 =
RTC 实时时钟实验
如果在 RTC_CR 寄存器中设置了相应的允许位,则在每个TR_CLK 周期中 RTC 产生一个中断(秒中断)。void BKP_WriteBackupRegister(uint16_t BKP_DR, uint16_t Data) // 往备份区域写用户数据的函数 (这个函数的第一个参数就是寄存器的标号了,这个是通过宏定义定义的)存储在 RTC_ALR 寄存器中的可编程时间相比较,如果 RTC_CR 控制寄存器中设置了相应允许位,比较匹配时将产生一个闹钟中断。寄存器操作完成,并同步之后,设置秒钟中断。
Qt图表库三选一:Qwt、QChart、QCustomPlot实战性能对比与避坑指南
本文深入对比了Qt开发中三大主流图表库Qwt、QChart和QCustomPlot的性能与适用场景。通过实测数据展示各库在渲染效率、内存占用和功能特性上的差异,并提供针对不同项目需求的选型建议和集成避坑指南,帮助开发者高效选择最适合的Qt图表解决方案。
python 斐波那契搜索-迭代与递归(Fibonacci Search)
设第(m-2)个斐波那契数为i,我们将arr[i]与x进行比较,如果x相同,则返回i。由于 fibMm2 标记了大约三分之一的数组,并且它标记的索引肯定是有效的,因此我们可以将 fibMm2 添加到 offset 并检查索引 i = min(offset + fibMm2, n) 处的元素。当我们继续寻找目标时,当我们的目标位于数组的较大 (2/3) 部分时,最坏的情况就会发生。斐波那契数被递归地定义为 F(n) = F(n-1) + F(n-2)、F(0) = 0、F(1) = 1。
Python 爬虫实战:从零搭建第一个爬虫程序(附完整代码)
本文介绍了Python网络爬虫的入门实战,以豆瓣Top250电影榜单为例,详细讲解爬虫开发全流程。内容包括爬虫基础原理、环境搭建、请求发送与响应处理、数据解析与保存等核心环节,并提供了可直接运行的完整代码示例。文章还分析了常见问题解决方案,并强调了爬虫开发的合规注意事项。通过本教程,读者可快速掌握Python爬虫的基本思路和实操技巧,为后续深入学习BeautifulSoup、XPath等进阶技术打下基础。
Searching: Fibonaccian Search-1: N+1 is a perfect Fibonacci number
Algorithm FAlgorithm F (Fibonaccian search). Given a table of records R1R2 … RN whose keys are in increasing order K1 < K2 < … < KN, this algorithm searches for a given argument K. For convenienc
esp8266步进电机驱动控制
blinker控制步进电机起保停,正反转(Arduino uno+esp8266+TB6600驱动器) Arduino uno的板子的程序 esp8266板子接入到Arduino uno的控制引脚上的5,6,7 esp8266程序 //****库***** #define BLINKER_WIFI //官方wifi协议库 #define BLINKER_PRINT Serial //串口协议库 #include <Blinker.h>
【EB_Tresos专题】-01-EB Tresos导入工程
<--返回「Autosar_BSW高阶配置」总目录--> <--返回「Autosar_BSW高阶配置」专栏主页--> <--返回「个人博客」首页--> <--返回「Autosar_BSW高阶配置」总目录--> <--返回「Autosar_BSW高阶配置」专栏主页--> <--返回「个人博客」首页--> 结尾 ...
斐波那契数列算法 Fibonacci Search 优化二分法查找算法
二分法已经非常快速了,但是还是可以改进二分法查找: 不要使用中间元素, 而是使用更为精确的区间,找到关键字在上面区间内,使其收敛更快。 使用Fibonacci序列数字来确定这个区间,就是Fibonacci Search。 下面是Wiki对Fibonacci Search的叙述:
汉书HE8,好用的汇编代码编写工具
汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大
go语言:实现fibonacci search斐波那契查找算法(附带源码)
go语言:实现fibonacci search斐波那契查找算法(附带源码)
C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片
基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正
精雕软件(JDpaint) 5.5 绿色版
精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版
斐波那契查找(Fibonacci Search)
<br /><br />1、Fibonacci数列<br />“有小兔一对,若等二月它们成年,第三月生下一对小兔,以后每月生产一对小兔,而所生小兔亦在第二月成年,第三月生产另一对小兔,以后亦每月生产小兔一对。假定每生产一对小兔,必为一雌一雄,且均无死亡,试问一年后共有小兔几对?<br />分析:首先观察一下头七个月的情况,为此引入下述记号,用表示原来的一对小兔,(=1,2……12)表示第个月生的一对小兔子,表示第对小兔子两个月以后又生的第对小兔子,依次类推如表。<br />月份<br /> <br />对数
java实现fibonacci search
java实现fibonacci search
PHP 斐波那契搜索(Fibonacci Search)
设第(m-2)个斐波那契数为i,我们将arr[i]与x进行比较,如果x相同,则返回i。由于 fibMm2 标记了大约三分之一的数组,并且它标记的索引肯定是有效的,因此我们可以将 fibMm2 添加到 offset 并检查索引 i = min(offset + fibMm2, n) 处的元素。当我们继续寻找目标时,当我们的目标位于数组的较大 (2/3) 部分时,最坏的情况就会发生。斐波那契数被递归地定义为 F(n) = F(n-1) + F(n-2)、F(0) = 0、F(1) = 1。
Java Fibonacci Search 斐波那契搜索算法代码实现详解
本期目录 一,斐波那契搜索算法简述 二,斐波那契搜索算法代码实现 三,斐波那契搜索算法总结 四,跳转搜索算法完整代码 一,斐波那契搜索算法简述 斐波那契搜索(Fibonacci search) ,又称斐波那契查找,是区间中单峰函数的搜索技术。 斐波那契搜索采用分而治之的方法,其中我们按照斐波那契数列对元素进行不均等分割。此搜索需要对数组进行排序。 与二进制搜索不同,在二进制...
c 语言 斐波那契搜索(Fibonacci Search)
设第(m-2)个斐波那契数为i,我们将arr[i]与x进行比较,如果x相同,则返回i。由于 fibMm2 标记了大约三分之一的数组,并且它标记的索引肯定是有效的,因此我们可以将 fibMm2 添加到 offset 并检查索引 i = min(offset + fibMm2, n) 处的元素。当我们继续寻找目标时,当我们的目标位于数组的较大 (2/3) 部分时,最坏的情况就会发生。斐波那契数被递归地定义为 F(n) = F(n-1) + F(n-2)、F(0) = 0、F(1) = 1。
python 实现fibonacci search斐波那契查找算法
斐波那契查找(Fibonacci Search)是一种在有序数组中查找特定元素的算法,它基于斐波那契数列。斐波那契数列是一个著名的数列,其中每个数是前两个数的和,序列以0和1开始。斐波那契查找算法利用斐波那契数列的性质来减少查找过程中不必要的比较次数,从而提高查找效率。斐波那契查找算法的基本思想是通过构造一个斐波那契数列来逼近目标值的位置。
821



被折叠的 条评论
为什么被折叠?



