动态规划的算法启蒙---斐波那契数列

斐波那契数列(概念不介绍了,都点进来了,默认都有基础)

##方法一:递归

后面的项依赖前面的项

每一项都在不停的调用自身,递归最重要的就是找到终止条件

```js

function fib(n) {

console.log(n)

if(n == 0) return 0

if(n == 1) return 1

return fib(n-1) + fib(n-2)

}

```

以40为例,通过打印可以看到递归开销非常大(100直接就停不下来了),可以用动态规划来优化

##方法二:动态规划1.0

计算机有两种开销:时间和空间

缓存 --- 空间换时间

用数组直接存储前面项的计算结果

```js

function fib(n) {

console.log(n)

let arr = \[\]

if(n == 0) return 0

if(n == 1) return 1

for(let i = 2;i<=n;i++){

arri = arri-1 + arri-2

}

return arrn

}

```

不够不够,继续优化

使用数组其实对整个内存的影响也很大

用变量 --- 做原地编辑,不使用额外的空间

动态规划2.0

```js

function fib(n){

if(n <= 1) return n

let prev = 0,current = 1,next

for(let i = 2;i<=n;i++){

next = prev + current

prev = current

current = next

}

return current

}

```

ok!

拓展

webssembly

基于typescript

飞书文档、在线画板。追求性能

画布不会直接用canvas

而是canvaskit - skia - WebAssembly

上面的算法案例,如果用webssembly+递归,时间会非常快,通常不到1ms

相关推荐
Nil2089 分钟前
leetcode 108有序数组转换为二叉搜索树
数据结构·算法·leetcode
高频因子挖掘机10 分钟前
QuantDash 成交量单位统一实战:从“手”到“股”的跨市场量化数据清洗全流程
后端·算法·github
Escalating_xu28 分钟前
【C++ STL简介】从六大组件到容器、迭代器与算法协作
java·c++·算法
纪念 2291 小时前
算法二叉树(一)
算法
liulilittle2 小时前
llmx 学习手册 06 —— CPU 指令集优化(AVX-512 三层演进)
c++·学习·算法·ai·llm
土司大王2 小时前
LeetCode hot100——相交链表
算法·leetcode·链表
土司大王2 小时前
LeetCode hot100——回文链表
算法·leetcode·链表
sel_93 小时前
【Docker】Docker 安装与使用详解:从零搭建到日常实战
人工智能·深度学习·算法·docker
小O的算法实验室11 小时前
IEEE TASE,基于MPC的多无人机协同搜索竞争群体优化方法
算法
Tbisnic12 小时前
BGE-M3 算法详解:从模型架构到三种检索方式的数学原理
算法·自然语言处理·大模型·bert·transformer·注意力机制