费氏查找算法
来源:互联网 发布:即时消息软件 编辑:程序博客网 时间:2024/05/02 05:00
费氏查找算法,利用斐波那契数列的思想,逐步修改要查找的区间,
根据数据的范围依据费氏树的结构往下查找数据,直到找到数据或达到费氏树的底端位置。
相对于折半查找算法来说,建立斐波那契数列不需要用除法。效率要高。
在初始阶段搜索相对较快,但是在后半程收敛比较慢。
在考虑是否可以将该方法和其他搜索算法融合一下,得到更快的搜索算法。
#include <stdio.h>#include <stdlib.h>int Fib(int n){if (n <= 1)return 1;elsereturn Fib(n-2) + Fib(n-1);}/*费氏查找法*/int fib_search(int *list, int n, int key){int root; /*左边界*/int dist1;int dist2;int temp;root = Fib(n-1);dist1 = Fib(n-2);dist2 = Fib(n-3);do {if (key < list[root-1]){root = root - dist2;temp = dist1;dist1 = dist2;dist2 = temp - dist2;}else if (key > list[root-1]){root = root + dist2;dist1 = dist1 - dist2;dist2 = dist2 - dist1;}else if (key == list[root-1]){printf("list[%d] = %d\n", root-1, list[root-1]);return 1;}} while(dist2 >= 0);return 0;}int main(int argc, char **argv){int key = 12;int list[] = {12, 16, 19, 22, 25,32, 39, 48, 55, 57,58, 63, 68, 69, 70,78, 84, 88, 90, 97};int len = sizeof(list)/sizeof(list[0]);int fib_index = 1;while(Fib(fib_index) <= len)fib_index++;if (fib_search(list, fib_index, key))printf("Found\n");elseprintf("Donot found\n");return 0;}
0 0
- 费氏查找算法
- 9.4 费氏查找
- 算法之费氏数列
- 算法之费氏序列
- 算法--兔子生兔子的问题(费氏数列)
- 费氏搜寻法之算法分析与实现
- 经典算法详解(2):费氏数列
- 从算法学起C语言--费氏数列
- [算法系列] 费式数列
- 费氏搜索法
- 费氏搜索浅谈
- 费氏搜寻法
- 费氏数列
- Fibonacci费氏数列
- 2.费氏数列
- 费
- Java算法:每对新生兔子第三个月期起生一对兔子(费氏数列)
- 经典算法大全之费式数列
- EXT4磁盘组织 - EXT4文件系统分析 1
- [Leetcode]Bulb Switcher
- poj 1466 && hdu 1068Girls and Boys(最大独立集)
- 一些adb的口令
- 【Linux 驱动】netfilter/iptables (三) 注册和注销Netfilter hook
- 费氏查找算法
- processing-GUI:G4P library-GSlider2D (滑动器):setLimitsX(),setLimitsY(),getValueXI().getValueYI()
- 唐巧的iOS技术博客选摘
- Windows下忘记mysql密码后的解决方法
- 迷宫的最短路线(BFS)
- mysql命令行操作符下让mysql的命令自动补全功能
- swift-基础06-元组和Optionals(可选)
- websocket 解决 The extension [x-webkit-deflate-frame] is not supported 问题
- android中activity的四种加载模式