算法

算法
菠萝算法学习
1.基础算法
a.递归
递归,在数学与计算机科学中,是指在方法的定义中使用方法自身。也就是说,递归算法是一种直接或者间接调用自身方法的算法。简言之:在定义自身的同时又出现自身的直接或间接调用。
简单的案例:
斐波那契数 (通常用
F(n)
表示)形成的序列称为 斐波那契数列 。该数列由0
和1
开始,后面的每一项数字都是前面两项数字的和。也就是:
F(0) = 0,F(1) = 1
F(n) = F(n - 1) + F(n - 2),其中 n > 1给定
n
,请计算F(n)
。
func fib(n int) int { |
通过递推关系,为我们可以写出这样的代码。
递归是相对简单的算法了。
就是你在 函数里面 调用函数本身 的一种算法。
注意:一定要有递归的退出条件。
b.最短路径Dijkstra
参考:最短路算法(Dijkstra + SPFA + Floyd) - 知乎 (zhihu.com)
Dijkstra算法是一种较为经典的最短路径求解算法,它的整体思路和前面的PrimPrim算法非常相似,但是又有一些不同之处。接下来首先对Dijkstra算法的整体流程进行一个大致的了解。
我们要了解邻接矩阵和邻接表
题单:
- 设计可以求最短路径的图类 1811
- 概率最大的路径 1846
- 最小体力消耗路径 1948 做法不止一种
- 使网格图至少有一条有效路径的最小代价 2069 也可以 0-1 BFS
- 从第一个节点出发到最后一个节点的受限路径数 2079
- 到达目的地的方案数 2095
- 前往目标的最小代价 2154
- 到达目的地的第二短时间 2202 也可以 BFS
- 细分图中的可到达节点 2328
- 得到要求路径的最小带权子图 2364
- 在网格图中访问一个格子的最少时间 2382
- 修改图中的边权 2874
- 前往目标城市的最小费用(会员题)
- 购买苹果的最低成本(会员题)
- 找到最短路径的 K 次跨越(会员题)
- 找到最近的标记节点(会员题)
LCP 35. 电动车游城市