动态规划一
动态规划 概述 动态规划通过将复杂问题分解为相互重叠的子问题,并利用存储中间结果来避免重复计算,从而高效解决具有最优子结构特性的问题 其核心在于 “状态定义” 和 “状态转移” 实现步骤 定义状态 (State Definition) 这是动态规划最基础且关键的一步。你需要定义一...
动态规划 概述 动态规划通过将复杂问题分解为相互重叠的子问题,并利用存储中间结果来避免重复计算,从而高效解决具有最优子结构特性的问题 其核心在于 “状态定义” 和 “状态转移” 实现步骤 定义状态 (State Definition) 这是动态规划最基础且关键的一步。你需要定义一...
概述 贪心算法(Greedy Algorithm)是一种构造性算法,用于解决最优化问题 其核心思想是在每一步选择中,都采取当前状态下最优的选择,期望通过一系列局部最优的选择达到全局最优 贪心算法在许多实际问题中非常有效,但并不是所有问题都适用 特点 局部最优选择 每一步都选择当前...
树与图的存储 树是一种特殊的图,与图的存储方式相同。 对于无向图中的边ab,存储两条有向边a->b, b->a。 因此我们可以只考虑有向图的存储。 树与图的遍历 拓扑排序 时间复杂度O(n+m),n表示点数,m表示边数 朴素dijkstra算法 时间复杂度O(n*n+...
第三个变量 实现 优点 简单易懂,逻辑清晰 缺点 需要额外的空间来存储临时变量 异或运算 实现 优点 不需要额外的空间 运算只使用基本的逻辑运算,适用于底层硬件编程 缺点 对大多数程序员来说,这种方法不如使用第三个变量的方式直观,容易引起误解 如果 a 和 b 是同一个变量,这种...
字符串匹配 字符串匹配的形式化定义如下:假设文本是一个长度为n的数组 T[1...n],而模式是一个长度为m的数组P[1...m],其中m<=n。进一步假设P和T的元素都是来自一个有限字母集合M的字符。如M={0,1}或者M={a,b,c,...z}。 字符数组P和T通常称...
二叉堆 特性 最大堆的堆顶是整个堆中的最大元素 最小堆的堆顶是整个堆中的最小元素 每次删除旧堆顶,调整后的新堆顶都是大小仅次于旧堆顶的节点。 只要反复删除堆顶,反复调整二叉堆,所得到的集合就会成为一个有序集合。 简述 堆排序算法步骤: 把无序数组构建成二叉堆。需要从小到大排序,就...
单链表 双链表 栈 队列 循环队列 单调栈 单调队列 KMP Trie树 并查集 堆 一般哈希 字符串哈希 STL
简述 最长公共子序列算法思想,令 X=< x1,x2,...xm > Y=<y1,y2,...yn> 为两个序列, Z=<z1,z2,...zk>为X和Y的某一个最长公共子序列: 如果 xm=yn,则zk=xm=yn,且Z(k-1)是X(m-1...
快速排序 归并排序 整数二分算法 浮点数二分算法 高精度加法 高精度减法 高精度乘低精度 高精度除以低精度 一维前缀和 二维前缀和 一维差分 二维差分 位运算 双指针算法 离散化 区间合并
简述 桶排序需要创建若干个桶来协助排序。 所谓桶,每个桶bucket代表一个区间范围,里面可以承载一个或多个元素。 复杂度 名称 最好 平均 最差 空间 稳定性 桶排序 n+k n nlog(n) n 是 实现 算法导论 桶排序思想,假设对数组A[p...r]排序,首先将这些元素...
搜索当前标签