斐波那契数列搜索,参考Edwin《最优化导论》第四版7.3章节,算法采用go语言实现。

/****************************************** FileName  : fibonacci_search.go* Author    : fredric* Date      : 2017.09.01* Note      : 斐波那契数列搜索算法* History   :
*****************************************/
package search import("fmt"
)func _get_fibonacci(i int) int{if i == 1 {return 1}else if i == 2{return 2}else{return _get_fibonacci(i - 1) + _get_fibonacci(i - 2)}
}func _test_func(x float64) float64 {return x*x*x*x - 14*x*x*x + 60*x*x - 70*x
}func _test_func_01(x float64) float64 {return (x - 1) * (x - 1)
}/*
* 基于黄金分割的思路对分割的比例系数p进行优化
* p采用斐波那契数列,即
* p1 = 1 - FN/FN+1
* p2 = 1 - FN-1/FN
* ...
* PN = 1 - F1/F2
* 总的压缩比:p1*p2*..pN = 1/FN+1
* 因此 F N+1 需要能够满足压缩比
*/
func DoFibonnaciSearch(){fmt.Println("DoFibonnaciSearch")//最小区间为0.2//此时需要斐波那契的压缩比 1 + 2e/F N + 1 <= 最小区间长度/初始长度//取e是一个很小的整数,如0.05//则N等于第五次迭代可以满足要求a0 := 0.0b0 := 2.0p  := 0.0delta := 0.05 //最后一次增加一个小整数做偏移for i := 5; i >=1; i-- {if i != 1 {fmt.Printf("a0 = %f, b0 = %f \n", a0, b0)//获取斐波那契数列p1 := _get_fibonacci(i)p0 := _get_fibonacci(i - 1)p = 1 - float64(p0)/float64(p1)a1 := a0 + p * (b0 - a0)b1 := a0 + (1 - p) * (b0 - a0)f_a1 := _test_func_01(a1)f_b1 := _test_func_01(b1)if f_b1 > f_a1 {b0 = b1}else{a0 = a1}fmt.Printf("a1 = %f, b1 = %f f_a1 = %f, f_b1 = %f p = %f\n", a1, b1, f_a1, f_b1, p)}else{a1 := a0 + (1/2 - delta) * (b0 - a0)b1 := a0 + (1/2 - delta) * (b0 - a0)f_a1 := (a1 - 1) * (a1 - 1)f_b1 := (b1 - 1) * (b1 - 1)if f_b1 > f_a1 {b0 = b1}else{a0 = a1}}}//for i := 5; i >=1; i-- {fmt.Printf("a0 = %f, b0 = %f", a0, b0)
}

转载于:https://www.cnblogs.com/Fredric-2013/p/7531603.html

最优化算法-斐波那契数列搜索相关推荐

  1. Java数据结构与算法---斐波那契数列Fibonacci

    Java数据结构与算法-斐波那契数列Fibonacci 原理都很简单,直接上代码: package cn.m_fibonacci;public class Fibonacci {public stat ...

  2. 427-动态规划算法-斐波那契数列

    动态规划算法求解斐波那契数列 状态:dp数组,存储已经求解的子问题的最优解 递归版本的动态规划算法 //参数n表示斐波那契数列中数字的个数. //返回相应个数的斐波那契数列数字的值. int fabn ...

  3. 趣学算法--斐波那契数列

    14天阅读挑战赛 努力是为了不平庸~ 目录 1.神奇的兔子数列 1.1问题分析 1.2斐波那契数列 1.3算法设计 1.3.1递归代码 1.3.2递归的改进,O(n)的代码 1.3.3时间复杂度为O( ...

  4. 经典算法——斐波那契数列

    斐波那契数列的经典解法是采用递归的方式: f(n)=f(n-1)+f(n-2)   n>2 f(1)=1      n=1 f(2)=1      n=2 按照这个思路可以写出递归算法: #in ...

  5. 算法-斐波那契数列:兔子序列

    利用递归函数求斐波那契数列(兔子序列) 1.1.2.3.5.8.13.21-求第n个数是几,n任意一个数大家可以自定义,比如10,20等 分析: 从给出的数列中,可知, n=1时→1 n=2时→1 n ...

  6. C语言中经典算法——斐波那契数列的几种算法

    斐波那契数列的递推公式: 我们尝试计算斐波那契数列的第n项并输出. 1.递归法 #include<stdio.h> int fib(int m) {if(m>=3){return f ...

  7. 算法—斐波拉契数列(跳楼梯问题)

    问题描述: 一只青蛙一次可以跳上1级台阶,也可以跳上2级.求该青蛙跳上一个n级的台阶总共有多少种跳法. 这道题一看,就会轻易的知道用递归,f(1)=1;f(2)=1;f(n)=f(n-1)+f(n-2 ...

  8. 算法-斐波那契数列(黄金分割数列|兔子数列)

    前言 斐波那契数列(Fibonacci sequence),又称黄金分割数列,因数学家莱昂纳多·斐波那契(Leonardoda Fibonacci)以兔子繁殖为例子而引入,故又称为"兔子数列 ...

  9. 算法 - 斐波那契数列问题(转自微信公众号码农翻身)

    注:转自微信公众号漫画:什么是动态规划? 问题描述: 算法:有一座高度是10级台阶的楼梯,从下往上走,每跨一步只能向上1级或者2级台阶.要求用程序来求出一共有多少种走法. 解析:如果只差最后一步就能走 ...

最新文章

  1. U3D架构系列之- FSM有限状态机设计五
  2. 【转】NSMutableArray的正确使用
  3. redis的源码编译安装+发布订阅+RDB持久化
  4. magento 1.9 用户无法登录 magento 1.9 customer can not login
  5. 关于服务发现和负载均衡,你想知道的都在这儿
  6. 模型驱动架构探索之游戏引擎设计 (二)粒度统一
  7. RHEL6入门系列之三十一,管理计划任务
  8. Linux修改SSH端口号
  9. 12款响应式 Lightbox(灯箱)效果插件
  10. Swift 编程语言教程(官方文档)
  11. 移动硬盘提示磁盘结构损坏且无法读取怎么办
  12. 2008年全国337个地级市GDP排名
  13. 简单理解hibernate懒加载
  14. 安卓模拟器右边的虚拟键盘消失了,怎样调出来
  15. 马上2023年了,《北上广深杭》有哪些值得加入的软件测试大厂公司呢?花了三天三夜整理出各大互联网公司
  16. GALAXY S8+ SM-G955N 韩版改G955F双卡多国系统G955NKSU3CRI3 dual sim card
  17. micropython开发板pcb_STM32F405RGT6核心板兼MicroPython开发板的电路方案设计(原理图+完整工程)...
  18. 神经网络算法计算过程推导
  19. vs2010打开vs2017的.sln文件
  20. hive内嵌时间日期函数:所有关于时间日期的函数

热门文章

  1. 用canvas绘制一个圆形,实现绕着一个中心运动
  2. On Tutorial with Caffe--a Hands DIY DL for Vision
  3. JavaScript~~自调用方法
  4. Flexbox 布局 – 表单
  5. 我的 atom 开发工具
  6. Java switch case
  7. js 调用 oc 的解释
  8. 有人WIFI模块使用详解
  9. 关闭本机的代理服务(Proxy)
  10. iOS 支付宝支付集成获取私钥