通过几天时间的闭关修炼,终于练成算法中的独孤九剑--动态规划法了,哈哈O(∩_∩)O哈哈~。
下面是最简单的动态规划法例子。
求Fibonacci数,最简单的就是利用递归求解。如下面第二个函数两行代码就可以了。
但是这样的话会不断递归,造成很多重复求解,运行速度自然很低。为了提高速度,可以把之前求解到的值保存下来,在下一次循环中重复利用。比如求F(n) = F(n-1) + F(n-2);
F(n-1) =F(n-2)+F(n-3),求F(n)的时候,如果F(n-1)的值保存了的话,那么就不用重复递归求F(n-1)了。
下面第一个函数就是这样解的,效率就是O(n)了,很高的效率。
这个就是动态规划法的入门基础,简单概括就是:如果计算的结果是后面需要重复用到的话,那么就保存这个结果。
class Solution {
public:
int fibonacciD(int n)
{
if(n==0 || n==1) return 1;
int last = 1;
int nextToLast = 1;
int answer = 1;
for(int i = 2; i<=n; i++)
{
answer = last+nextToLast;
nextToLast = last;
last = answer;
}
return answer;
}
int fibonacciR(int n)
{
if(n==0 || n==1) return 1;
return fibonacciR(n-1)+fibonacciR(n-2);
}
};
int main()
{
Solution solu;
cout<<solu.fibonacciD(7)<<endl;
cout<<solu.fibonacciR(7)<<endl;
cout<<endl;
return 0;
}
利用动态规划法可以很轻松产生一个fibonacci序列,如下:
void generateFibonacci(vector<int> &fibvec, int n)
{
fibvec.push_back(0);
fibvec.push_back(1);
for (int i = 2; i < n; i++)
{
fibvec.push_back(fibvec[i-1] + fibvec[i-2]);
}
}
int main()
{
vector<int> fibvec;
generateFibonacci(fibvec, 20);
for (auto x:fibvec)
cout<<x<<" ";
cout<<endl;
system("pause");
return 0;
}
分享到:
相关推荐
算法-数论- 斐波那契数列(Fibonacci).rar
我们相信,这份资源将成为您学习和研究Python算法设计过程中的宝贵资料,为您提供了最详细、最全面的指导。无论您是否已经具备了Python语言和算法设计的基础知识,这份资源都将帮助您更好地掌握相关知识,并为您的...
算法-理论基础- 查找- 斐波那契查找(包含源程序).rar
斐波那契数列的高效求法-动态规划,内含两份代码,一份是递归求解,另一个是动态规划
算法学习-斐波那契数列
简单LFSR算法实现(包含两种实现Galois型和Fibonacci型)
百鸡问题 递归与非递归求最大公约数 斐波那契数列递归与非递归算法 递归与非递归求阶乘
摊还分析11.1 一个无关的智力问题11.2 二项队列11.3 斜堆11.4 斐波那契堆11.4.1 切除左式堆中的节点11.4.2 二项队列的懒惰合并11.4.3 斐波那契堆操作11.4.4 时间界的证明11.5 伸展树总结练习参考文献第12章 高级数据...
Fibonacci(斐波那契)数列的JAVA解法,包含了斐波那契数列常见问题的一些算法。
算法-斐波那契数列(信息学奥赛一本通-T1159)(包含源程序).rar
# Python实现《剑指offer》 部分代码自己添加了一些测试用例, 或者自己添加了一些功能 1. 初级程序员注重算法和数据结构 2. 事先做好准备,对工作有热情 3. 面试过程放松。不要急于写代码,了解清楚所要解决的问题,...
matlab最优化程序包括:无约束一维极值问题、进退法、黄金分割法、斐波那契法、牛顿法基本牛顿法、全局牛顿法、割线法、抛物线法、三次插值法、可接受搜索法、Goidstein法、Wolfe Powell法、单纯形搜索法、Powell法...
动态规划(Dynamic Programming,简称DP)算法是一种通过将问题划分为相互重叠的子问题,并解决子问题来解决原问题的方法。它通常用于优化问题,其中需要找到最优解或最大/最小值。动态规划算法的核心思想在于将复杂...
【基础算法】-python斐波那契数列的四种方法 # 1、递归法 def fib_recur(n): assert n >= 0, "n > 0" if n return n return fib_recur(n-1) + fib_recur(n-2) for i in range(1, 20): print(fib_recur(i),...
使用斐波那契堆的 Prim-s 算法的实现 使用斐波那契堆方案和简单方案实现的 Prim 算法
多种算法计算Fibonacci数,比较效率,写得不好,还望指正
用递推算法 迭代算法 公式法计算求第N个Fibonacci数,计算机能算出最大Fibonacci时N的值,计算1分钟内能计算几个Fibonacci,用公式法计算Fibonacci,当出现错误时,N为多少。
暴力、递归与分治、动态规划、贪心算法和回溯是算法设计中常见的几种思路和方法,经典习题是帮助我们更好掌握这些算法思想的重要途径。以下是对这些经典习题的详细说明: 1. 暴力解法习题 暴力解法往往是最直观、最...
题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为...1. 递归,面向过程编程,简单直接 2. 面向对象编程,别人写的,
- 三大算法思维:贪心,二分,动态规划 - 常见数据结构 ## 注意事项 - 算法,有难度,轻耐心学习 - 不仅关注题目本身,更要关注知识点和解题思路 - 按顺序学习(本章课程按顺序设计的) ## 看几个面试题 列举几...