博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
斐波那契搜索法.
阅读量:7123 次
发布时间:2019-06-28

本文共 2733 字,大约阅读时间需要 9 分钟。

hot3.png

 #include 
#include 
#include 
#include 
#include 
template
class FibonacciSearch{ private:  unsigned int number;  std::vector
 data;  int flag;  std::vector
 fibArray;    public:   template
< std::is_same
::value, void >::type>   FibonacciSearch(const std::initializer_list
& il);      ~FibonacciSearch();   template
   const Ty searchData(const Ty& k);};
template
template
FibonacciSearch
::FibonacciSearch(const std::initializer_list
 &il)                   :number(il.size()),                    data(il),                    flag(0){ std::vector
::iterator iter; int temp; this->fibArray.push_back(1); this->fibArray.push_back(1);  for(int i=2; i<20; ++i){//注意这里创建了一个斐波那契数列 1, 1, 2, 3, 5, 8...   temp = this->fibArray[i-1] + fibArray[i-2];  //iter = this->fibArray.insert(iter, temp);  this->fibArray.push_back(temp); }  /*for(auto t : this->fibArray){  std::cout<<"  "<
fibArray.shrink_to_fit();//把容器缩小到跟其中元素个数相同的大小. std::cout<<"success"<
template
FibonacciSearch
::~FibonacciSearch(){ if(this->data.empty()){  data.clear(); }  if(this->fibArray.empty()){  fibArray.clear(); } }
template
template
const Ty FibonacciSearch
::searchData(const Ty& k){ if(typeid(T) != typeid(Ty)){  throw std::bad_cast(); } std::cout<<"enter"<
number-1;//number为data内元素的数量.  int n = 0;  while(this->number > this->fibArray[k]-1){//判断元素的数量是否符合fibonacci搜索.   ++n; }  for(int n=this->number; n < this->fibArray[k]-1; ++n){//扩张数组长度.   this->data.push_back( data[high] ); }  //fibArray[k]-1 = fibArray[k-1]-1 + fibArray[k-2]; 因此mid=fibArray[k-1]-1;  while(low <= high){  mid = low + this->fibArray[k-1]-1;//注意这里上面的data已经被增加到了fibArray[k]-1个元素;       if(k < this->data[mid]){//如果给定关键字k小于这个中间值那么k肯定位于  low - (mid-1)之间.     high = mid-1;    n -= 1;       }else if(k > this->data[mid]){    low = mid + 1;    n -= 2;       }else{    if(mid <= high){     typename std::vector
::iterator iter = data.begin(); //清除后来添加的数据.              this->data.erase(iter+number, data.end());     return mid;         }else{        typename std::vector
::iterator iter = data.begin();             this->data.erase(iter+number, data.end());     return this->number;         }       } } }
int main(){ FibonacciSearch<> myFib({0, 16, 24, 35, 47, 59, 62, 73, 88, 99}); std::cout<
<

转载于:https://my.oschina.net/SHIHUAMarryMe/blog/552411

你可能感兴趣的文章
SpringMVC + Apache POI 实现WEB中Excel下载功能
查看>>
智能锁市场释放洪荒之力 但火热背后仍存隐忧
查看>>
Windows 8上强制Visual Studio以管理员身份运行
查看>>
Linux_Bash常用脚本
查看>>
Python Module_subprocess_调用 Powershell
查看>>
HTML5中 HTML表单和PHP环境搭建及与PHP交互 韩俊强的博客
查看>>
安全老炮儿看局势——赛门铁克发布第21期《互联网安全威胁报告》
查看>>
Fortinet 携手中信国际电讯CPC在亚太地区扩展安全托管服务
查看>>
OpenStack发布最新版本Ocata 为开源云带来更高稳定性
查看>>
澳大利亚财政部CIO:云计算不是一种商品
查看>>
《Java核心技术 卷Ⅱ 高级特性(原书第10版)》一1.9 收集到映射表中
查看>>
Cloudian更新企业IT存储 目标高密度系统
查看>>
Colin Dixon:OpenDaylight能做到的有更多
查看>>
R语言如何增强数据科学?
查看>>
检测不出的 PLC rootkit 终于现世
查看>>
Hadoop技术让大数据处理变得简单
查看>>
10 个最基本的JS面试问题及答案
查看>>
双十一,一群金融大脑去了趟苏州!
查看>>
论证:为什么大数据是下一个浪潮?
查看>>
《逻辑与计算机设计基础(原书第5版)》——3.12 其他的算术功能模块
查看>>