
算法策略
文章平均质量分 97
算法策略
AnEra
厚积薄发, 天道酬勤
展开
-
10大排序算法
前言排序算法的稳定性:如果相等的2个元素,在排序前后的相对位置保持不变,那么这是稳定的排序算法 排序前:5, 1, 3????, 4, 7, 3???? 稳定的排序: 1, 3????, 3????, 4, 5, 7 不稳定的排序:1, 3????, 3????, 4, 5, 7对自定义对象进行排序时,稳定性会影响最终的排序效果冒泡排序思路: 1. 从头开始比较每一对相邻元素,如果第1个比第2个大,就交换它们的位置; 执行完一轮后,最末尾那个元素就是最大的元素 2.原创 2020-08-14 20:05:36 · 521 阅读 · 0 评论 -
最小生成树: Prim算法、Kruskal算法
目录生成树(Spanning Tree)最小生成树(Minimum Spanning Tree)切分定理Prim算法Prim算法 – 执行过程Prim算法 – 实现Kruskal算法Kruskal算法 – 执行过程Kruskal算法 – 实现Prim算法、Kruskal算法中使用的最小堆和并查集最小堆并查集生成树(Spanning Tree)生成树(Spanning Tree),也称为支撑树, 连通图的极小连通子图, 它含有图中全部的 n 个顶点,..原创 2020-09-04 16:44:31 · 829 阅读 · 1 评论 -
最短路径: Dijkstra算法、Bellman-Ford算法、Floyd算法
目录最短路径(Shortest Path)最短路径 – 无权图最短路径 – 负权边最短路径 – 负权环最短路径算法Dijkstra (迪杰斯特拉算法)Dijkstra –思路Dijkstra – 执行过程Dijkstra –代码实现Bellman-Ford (贝尔曼-福特算法)Bellman-Ford–思路Bellman-Ford–思考Bellman-Ford –执行过程Bellman-Ford –代码实现Floyd (弗洛伊德算法...原创 2020-09-07 12:14:53 · 2168 阅读 · 2 评论 -
快慢指针判断链表中是否存在环以及查找环的起始位置
判断链表中是否有环? 使用快慢指针, 慢指针一次走一步, 快指针一次走两步, 当快慢指针相遇时,说明链表存在环为什么快指针每次走两步而慢指针每次走一步呢? 因为slow指针和fast指针都会进入环内, 就像在环形跑道内不同位置的两个人;slow指针在后面,fast指针在前面, 但实际上fast指针也在追slow指针, 希望能在环内超slow指针一圈(当超过一圈时会相遇)。那么fast指针总会追上slow指针的;那么fast指针会不会跳过slow指针呢(为什么快慢指针的步骤差必须为1呢)...原创 2020-11-05 17:21:38 · 882 阅读 · 2 评论 -
算法策略 - 动态规划
目录动态规划(Dynamic Programming)动态规划的常规步骤动态规划的一些相关概念无后效性有后效性算法1 – 找零钱问题状态定义题解– 暴力递归题解– 记忆化搜索题解– 递推思考题: 请输出找零钱的具体方案 (具体是用了哪些面值的硬币)题解– 通用实现优化算法2 – 最大连续子序列和问题状态定义状态转移方程和初始状态题解– 动态规划 – 实现题解– 动态规划 – 优化实现算法3 – 最长上升子序列 (LI...原创 2020-09-16 16:25:18 · 2174 阅读 · 1 评论 -
算法策略 - 分治
分治(Divide And Conquer)分治,也就是分而治之。它的一般步骤是(1) 将原问题分解成若干个规模较小的子问题(子问题和原问题的结构一样,只是规模不一样)(2) 子问题又不断分解成规模更小的子问题,直到不能再分解(直到可以轻易计算出子问题的解)(3) 利用子问题的解推导出原问题的解因此,分治策略非常适合用递归, 需要注意的是:子问题之间是相互独立的分治的应用 快速排序 归并排序Karatsuba算法(大数乘法)主定理(Master Theorem)练习1..原创 2020-09-11 18:07:10 · 313 阅读 · 1 评论 -
算法策略 - 贪心
目录贪心(Greedy)练习1 – 最优装载问题(加勒比海盗)问题思路代码实现练习2 – 零钱兑换问题思路代码实现贪心策略中存在的问题注意:练习3 – 0-1背包问题思路实例分析代码实现贪心(Greedy)贪心策略,也称为贪婪策略, 每一步都采取当前状态下最优的选择(局部最优解),从而希望推导出全局最优解贪心的应用:哈夫曼树最小生成树算法:Prim、Kruskal最短路径算法:Dijkstra练习1 – 最优装载问题(加勒原创 2020-09-11 17:25:38 · 494 阅读 · 1 评论 -
回溯: N皇后问题
目录回溯 (Back Tracking)N皇后问题 (NQueens)解决思路四皇后 – 回溯法四皇后 – 剪枝(Pruning)八皇后 – 回溯法流程N皇后问题– 实现N皇后问题–优化1N皇后问题–优化2回溯 (Back Tracking)回溯可以理解为: 通过选择不同的岔路口来通往目的地(找到想要的结果)每一步都选择一条路出发, 能进则进, 不能进则退回上一步(回溯), 换一条路再试树、图的深度优先搜索(DFS)、八皇后、走迷宫都是典型的回溯应...原创 2020-09-09 18:30:27 · 537 阅读 · 0 评论 -
递归(Recursion)
递归(Recursion)递归: 函数(方法)直接或间接调用自身函数的调用过程 函数的递归调用过程 如果递归调用没有终止, 将会一直消耗栈空间, 最终导致栈内存溢出(Stack Overflow), 所以必需要有一个明确的结束递归的条件, 也叫作边界条件、递归基实例分析求 1+2+3+...+(n-1)+n 的和 (n>0)实例1:总消耗时间 T(n)=...原创 2020-09-08 17:34:51 · 543 阅读 · 1 评论