摘要:
什么是KMP KMP算法主要应用在字符串匹配问题。 因为是由这三位学者发明的:Knuth,Morris和Pratt,所以取了三位学者名字的首字母。所以叫做KMP 核心思想 KMP的主要思想是: 「当出现字符串不匹配时,可以知道一部分之前已经匹配的文本内容,可以利用这些信息避免从头再去做匹配了。」 ( 阅读全文
摘要:
排序思想分类 比较类排序:通过比较来决定元素间的相对次序,由于其时间复杂度不能突破O(nlogn),因此也称为非线性时间比较类排序。(大部分排序算法) 非比较类排序:不通过比较来决定元素间的相对次序,它可以突破基于比较排序的时间下界,以线性时间运行,因此也称为线性时间非比较类排序(计数排序、桶排序、 阅读全文
摘要:
前言与重点 1.DP数组 dp[ i ] [ j ] 2.递推公式(状态转移公式) 3.算法步骤 1.确定DP数组及其下标的含义 2.确定递推公式(状态转移公式) 3.dp数组如何初始化 4.确定遍历顺序 5.举例推导dp数组 动态规划理论基础 什么是动态规划 动态规划,英⽂:Dynamic Pro 阅读全文
摘要:
递归 函数中自己调用自己 经典例题:汉诺塔 需要将所有盘子按顺序放到塔C上(问题规模:n) 就需要最大的盘子在C底部 就需要将其余所有盘子移动到塔B上 第二塔上也需要按顺序摆放(问题规模:n-1) 就需要第二大的盘子在B底部 就需要将其余所有盘子移动到另一个塔上 ·················· 阅读全文
摘要:
深度优先搜索DFS 基本概念 深度优先搜索(Depth-First Search,DFS)是十分常见的图搜索方法之一。 深度优先搜索会沿着一条路径一直搜索下去,在无法搜索时,回退到刚刚访问过的节点。 它从初始节点出发,按预定的顺序扩展到下一个节点,然后从下一节点出发继续扩展新的节点,不断递归执行这个 阅读全文
摘要:
定义 栈内元素单调按照递增(递减)顺序排列的栈。 主要用于找到每一个元素左边或右边,第一个比它大或小的数时,可使用单调栈算法。 时间复杂度 由于每个元素最多各自进出栈一次,复杂度是O(n) 功能 递增单调栈: 在一个队列中针对每一个元素从它右边找到第一个比它小的元素 在一个队列中针对每一个元素从它左 阅读全文
摘要:
贪心算法 每一步都找到当前局部最优解,短视,但是有思考 贪心算法(Greedy Alogorithm)又叫登山算法,它的根本思想是逐步到达山顶,即逐步获得最优解,是解决最优化问题时的一种简单但是适用范围有限的策略。 贪心算法没有固定的框架,算法设计的关键是贪婪策略的选择。 每一步都找到最优解,由于其 阅读全文
摘要:
时空复杂度 时间复杂度:O(nlogn) 空间复杂度:O(n) 使用了分治思想 优势 1.稳定 归并的时空复杂度非常稳定的,不论是在哪种情况下,归并算法的时间复杂度都不变, 2.高效 归并算法计算效率相比其他算法也是非常快的 思路图解 分 把一个有n个元素的数组,分成n个有1个元素的数组 然后边比较 阅读全文