
算法
九州殊口二
这个作者很懒,什么都没留下…
展开
-
回溯算法详解
文章目录1.回溯算法框架2.全排列问题1.回溯算法框架废话不多说,直接上回溯算法框架。解决一个回溯问题,实际上就是一个决策树的遍历过程。你只需要思考 3 个问题:路径:也就是已经做出的选择。选择列表:也就是你当前可以做的选择。结束条件:也就是到达决策树底层,无法再做选择的条件。如果你不理解这三个词语的解释,没关系,我们后面会用「全排列」和「N 皇后问题」这两个经典的回溯算法问题来帮你理解这些词语是什么意思,现在你先留着印象。代码方面,回溯算法的框架:result = []v转载 2020-07-04 11:25:32 · 742 阅读 · 0 评论 -
0-1 背包问题
描述给你一个可装载重量为W的背包和N个物品,每个物品有重量和价值两个属性。其中第i个物品的重量为w[i],价值为v[i],现在让你用这个背包装物品,最多能装的价值是多少?这是最基础的背包问题,特点是:每种物品仅有一件,可以选择放或不放。题目就是这么简单,一个典型的动态规划问题。这个题目中的物品不可以分割,要么装进包里,要么不装,不能说切成两块装一半。这就是 0-1 背包这个名词的来历。解决...转载 2020-04-23 22:29:55 · 468 阅读 · 0 评论 -
动态规划设计——最长递增子序列
题目注意「子序列」和「子串」这两个名词的区别,子串一定是连续的,而子序列不一定是连续的。下面先来一步一步设计动态规划算法解决这个问题。为什么可以用动态规划解决每个数为结尾可组成的最大子序列 = 它前一个最大的小于它的数组成的最大子序列 + 1动态规划解法动态规划的核心设计思想是数学归纳法。相信大家对数学归纳法都不陌生,高中就学过,而且思路很简单。比如我们想证明一个数学结论,那么我们先...转载 2020-02-18 18:40:32 · 245 阅读 · 0 评论 -
动态规划
文章目录什么问题应该使用动态规划一、斐波那契数列递归带备忘录的递归解法dp 数组的迭代解法二、凑零钱问题三、最后总结什么问题应该使用动态规划存在重叠子问题和最优子结构。问题的目标是求一个问题的最优解。什么是重叠子问题?一个大问题由多个小问题组成,而且这些”小问题“会被重复调用。什么是最优子结构?问题的最优解包含子问题的最优解。反过来说就是,我们可以通过子问题的最优解,推导出问题的最优解...转载 2020-02-08 23:11:28 · 375 阅读 · 0 评论 -
快慢指针
什么是快慢指针这种模式,有一个非常出门的名字,叫龟兔赛跑。咱们肯定都知道龟兔赛跑啦。但还是再解释一下快慢指针:这种算法的两个指针的在数组上(或是链表上,序列上)的移动速度不一样。还别说,这种方法在解决有环的链表和数组时特别有用。通过控制指针不同的移动速度(比如在环形链表上),这种算法证明了他们肯定会相遇的。快的一个指针肯定会追上慢的一个(可以想象成跑道上面跑得快的人套圈跑得慢的人)。咋知道需...原创 2020-02-06 17:32:54 · 645 阅读 · 1 评论 -
归并排序——Java
文章目录归并排序原地归并的抽象方法归并排序两个有序数组归并成一个更大的有序数组,就叫归并。归并排序是一种递归排序算法,就对一个数组来说,可以先将它(递归地)分成两半分别排序,然后将结果归并起来。时间复杂度:O(NlogN)空间复杂度:N原地归并的抽象方法两个不同的有序数组如何实现归并?一个最简单直接地方法就是创建一个最够大的第三数组,然后将两个有序数组的元素从大到小的排到第三数组中...原创 2020-01-29 17:34:32 · 346 阅读 · 0 评论 -
DFS模板
在大多数情况下,我们在能使用 BFS 时也可以使用 DFS。但是有一个重要的区别:遍历顺序。与 BFS 不同,更早访问的结点可能不是更靠近根结点的结点。因此,你在 DFS 中找到的第一条路径可能不是最短路径。模板-递归/* * Return true if there is a path from cur to target. */boolean DFS(Node cur, Node ...原创 2019-04-05 20:48:36 · 659 阅读 · 0 评论 -
迪杰斯特拉算法
源码//数据结构typedef struct VertexType//节点{ int index;//编号 string name;};typedef int VRType; //顶点关系类型,有权图就为权值,无权就为0、1typedef struct ArcCell{ VRType adj =0 ; //权值}AdjMatrix[MAX_NUM][MAX_NUM];t...原创 2019-04-02 20:35:03 · 157 阅读 · 0 评论