search - fibonacci search

斐波那契搜索(Fibonacci search) 斐波那契数列: F[n] = F[n-1] + F[n-2] (n>=0), F[0] = 1, F[1] = 1; 斐波那契数列相关概念:黄金比例又称黄金分割,是指事物各部分间一定的数学比例关系,即将整体一分为二,较大部分与较小部分之比等于整体与较大部分之比, 其比值约为1:0.618或1.618:1。0.618被公认为最具有审美意义的比例数字,这个数值的作用不仅仅体现在诸如绘... 阅读详情
#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;
}
JavaScript:实现Fibonacci Search斐波那契搜索算法(附完整源码) 阅读详情

相关推荐

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 */

希望我的博客,能帮上你解决学习中工作中所遇到的问题 821

查找算法-斐波那契查找法(Fibonacci Search)

斐波那契查找法又称为斐氏查找法,此查找法和二分法一样都是以分割范围来进行查找的,不同的是斐波那契查找法不是按对半方式来分割的,而是以斐波那契级数的方式来分割的。斐波那契级数的定义如下:斐波那契级数:0、1、1、2、3、5、8、13、21、34、55、89、...。也就是除了第0个和第1个元素外,级数中的每个元素值都是前两个元素值的和。斐波那契查找法的好处是只需要用到加减运算而不需要用到乘除运算,这从计算机运算的过程来看效率会高于前两种查找法。在尚未介绍斐波那契查找法之前,我们先来认识斐波那契树。

Hank_W 999

Python fibonacci search斐波那契查找算法详解及源码

斐波那契查找算法是一种用于有序数组的快速查找算法。它利用了斐波那契数列的特性来进行查找操作。

希望我的博客,能帮上你解决学习中工作中所遇到的问题 905

七大查找之斐波那契查找

文章目录1.基本思想2.算法步骤3.代码实现3.1.算法实现3.2.测试程序4.实验结果 1.基本思想 斐波那契搜索(Fibonacci search) ,又称斐波那契查找,是区间中单峰函数的搜索技术。斐波那契查找就是在二分查找的基础上根据斐波那契数列进行分割的。(mid的关系式不同) 斐波那契查找同样是查找算法家族中的一员,它要求数据是有序的(升序或降序)。斐波那契查找采用和二分查找/插值查找相似的区间分割策略,都是通过不断的分割区间缩小搜索的范围 。(分治法) 斐波那契数列(Fibonacci sequ

qq_46359697的博客 3959

人形机器人系列——硬件介绍

人形机器人是多领域交叉技术的产物,主要由三大系统组成:感知系统、决策系统和执行系统。感知系统感知系统是人形机器人获取外界信息的途径,主要由各种传感器组成。其中,视觉传感器用于获取图像信息,如摄像头、激光雷达等;触觉传感器用于感知触碰和压力,如力/力矩传感器、声学传感器等。这些传感器收集到的信息为机器人的决策和执行提供基础。决策系统决策系统是人形机器人的大脑,负责处理和决策各种信息。它由芯片和算法组成。芯片是硬件基础,提供计算能力;算法是软件基础,用于处理和分析传感器收集到的信息,并做出相应的决策。执行系统。

liangwqi的博客 1万+

unity转微信小游戏:UI大小设置

unity转微信小游戏:UI大小设置

会潜水的小火龙的博客 3270

【算法系列 | 12】深入解析查找算法之—斐波那契查找

查找算法是计算机科学中的一类算法,用于在数据集中寻找特定值或数据项。其目标是确定数据是否存在于给定的数据结构中,并找到数据项的位置(索引)或其他相关信息。不同的查找算法适用于不同类型的数据结构,数据有序性,以及数据规模。以下是一些常见的查找算法以下是一些常见的查找算法及其应用场景:布隆过滤器(Bloom Filter):适用于判断一个元素是否存在于一个大规模的数据集中,时间复杂度为O(1),但有一定的误判率。二分查找。

颜淡慕潇 5万+

从零配置到批量处理:FaceFusion 3.1完整使用指南(含hififace_256模型测试)

本文详细介绍了FaceFusion 3.1的完整使用指南,包括环境配置、模型选择(特别是hififace_256模型的深度测试)以及批量处理技巧。通过AI驱动的脸部替换技术,帮助用户高效实现高质量的面部处理,适用于影视制作、广告设计等多种场景。

weixin_29056865的博客 655

浅谈:斐波那契搜索算法(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 =

黎璃QAQ的博客 7184

RTC 实时时钟实验

如果在 RTC_CR 寄存器中设置了相应的允许位,则在每个TR_CLK 周期中 RTC 产生一个中断(秒中断)。void BKP_WriteBackupRegister(uint16_t BKP_DR, uint16_t Data) // 往备份区域写用户数据的函数 (这个函数的第一个参数就是寄存器的标号了,这个是通过宏定义定义的)存储在 RTC_ALR 寄存器中的可编程时间相比较,如果 RTC_CR 控制寄存器中设置了相应允许位,比较匹配时将产生一个闹钟中断。寄存器操作完成,并同步之后,设置秒钟中断。

m0_55996456的博客 1205

Qt图表库三选一:Qwt、QChart、QCustomPlot实战性能对比与避坑指南

本文深入对比了Qt开发中三大主流图表库Qwt、QChart和QCustomPlot的性能与适用场景。通过实测数据展示各库在渲染效率、内存占用和功能特性上的差异,并提供针对不同项目需求的选型建议和集成避坑指南,帮助开发者高效选择最适合的Qt图表解决方案。

weixin_33691700的博客 449

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。

csdn_aspnet的专栏,请点击博客主页右上角三个点中的私信联系 1212

Python 爬虫实战:从零搭建第一个爬虫程序(附完整代码)

本文介绍了Python网络爬虫的入门实战,以豆瓣Top250电影榜单为例,详细讲解爬虫开发全流程。内容包括爬虫基础原理、环境搭建、请求发送与响应处理、数据解析与保存等核心环节,并提供了可直接运行的完整代码示例。文章还分析了常见问题解决方案,并强调了爬虫开发的合规注意事项。通过本教程,读者可快速掌握Python爬虫的基本思路和实操技巧,为后续深入学习BeautifulSoup、XPath等进阶技术打下基础。

2503_91057718的博客 2316

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

d3y1`5 81_09 703

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&gt

perseverance51博客 2854

【EB_Tresos专题】-01-EB Tresos导入工程

<--返回「Autosar_BSW高阶配置」总目录--> <--返回「Autosar_BSW高阶配置」专栏主页--> <--返回「个人博客」首页--> <--返回「Autosar_BSW高阶配置」总目录--> <--返回「Autosar_BSW高阶配置」专栏主页--> <--返回「个人博客」首页--> 结尾 ...

「汽车电子助手」的博客 6433

斐波那契数列算法 Fibonacci Search 优化二分法查找算法

二分法已经非常快速了,但是还是可以改进二分法查找: 不要使用中间元素, 而是使用更为精确的区间,找到关键字在上面区间内,使其收敛更快。 使用Fibonacci序列数字来确定这个区间,就是Fibonacci Search。 下面是Wiki对Fibonacci Search的叙述:

靖空间 2982

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

go语言:实现fibonacci search斐波那契查找算法(附带源码)

go语言:实现fibonacci search斐波那契查找算法(附带源码)

欢迎来到我的博客!这里是一个专注于计算机技术的分享平台,涵盖编程开发、算法研究、系统架构、软件工程等多个领域。无论你是初学者还是资深开发者,都能在这里找到有价值的内容。 1056

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 />对数

adermxl的专栏 3245

java实现fibonacci search

java实现fibonacci search

qq_43726119的博客 196

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。

csdn_aspnet的专栏,请点击博客主页右上角三个点中的私信联系 994

Java Fibonacci Search 斐波那契搜索算法代码实现详解

本期目录 一,斐波那契搜索算法简述 二,斐波那契搜索算法代码实现 三,斐波那契搜索算法总结 四,跳转搜索算法完整代码 一,斐波那契搜索算法简述 斐波那契搜索(Fibonacci search) ,又称斐波那契查找,是区间中单峰函数的搜索技术。 斐波那契搜索采用分而治之的方法,其中我们按照斐波那契数列对元素进行不均等分割。此搜索需要对数组进行排序。 与二进制搜索不同,在二进制...

不坠青云 1368

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。

csdn_aspnet的专栏,请点击博客主页右上角三个点中的私信联系 823

python 实现fibonacci search斐波那契查找算法

斐波那契查找(Fibonacci Search)是一种在有序数组中查找特定元素的算法,它基于斐波那契数列。斐波那契数列是一个著名的数列,其中每个数是前两个数的和,序列以0和1开始。斐波那契查找算法利用斐波那契数列的性质来减少查找过程中不必要的比较次数,从而提高查找效率。斐波那契查找算法的基本思想是通过构造一个斐波那契数列来逼近目标值的位置。

luthane的博客 796
上一篇: search - binary search
下一篇: search - binary search/sort tree
小马识图
博客等级 码龄18年 8粉丝 30原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值