算法-动态规划

在牛客网做题时遇到个很简单的题,即求斐波那契(Fibonacci)数列的第n项。我一看,这太简单了, 不就是一个递归解决的事吗。然后。。。就没有然后了。事实证明,这道题用递归算法太浪费资源了,效率也不高。于是 看了下大神代码,说是用动态规划解决,效率之高令我汗颜,因此在网上了解了下动态规划思想。然而我发现这是个挺 复杂的东西,或许是我没弄明白吧,总之今天先记录所得,虽不完整亦为收获。

动态规划

动态算法的核心是记住已经求过的解。而记住已经求过的解有两种方式:自顶向下的备忘录自底向上。

自顶向下的备忘录方式也要用到递归,这里暂且不表。重点来谈谈自底向上的方法。

简单来说,自底向上就是先把必定要算出来的子算法先求出来,再通过子算法层层往上。对于Fibonacci数列来说, 求其第n项,那么第n-1项都是必须要求的,而求其第n-1项,第n-2项也是必求的。。。。最底层的就是第0项了.代码如下

public static int fib(int n)
{
if(n<=0)
return n;
int []Memo=new int[n+1];
Memo[0]=0;
Memo[1]=1;
for(int i=2;i<=n;i++)
{
Memo[i]=Memo[i-1]+Memo[i-2];
}
return Memo[n];
}

优化后代码如下

class Solution
{
public int Fibonacci(int n)
{
int p = 0;
int f = 1;
while(n-- != 0){
p += f;
f = p - f;
}
return p;
}
}

详细内容见HankingHu的博客

posted @   北冥虾  阅读(105)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 25岁的心里话
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示