随笔分类 -  算法

算法基础
摘要:@ 一. 暴力匹配 字符串匹配的最直接的方法就是暴力匹配,而KMP算法也是基于暴力算法进行改进。暴力匹配的思想如下: 对于文本串T和模式串P,从模式串P的第 0 号位置、文本串第 \(i_0\) 号位置开始逐一比对; 比对到中间某个时刻,若$T[i ] == P[j]$,则比对继续进行,\(i++, 阅读全文
posted @ 2020-08-07 10:54 十三w~w 阅读(194) 评论(1) 推荐(0)
摘要:LeetCode中出现了2sum, 3sum, 4sum的问题,文章给出了一种通用的解法,想法是将n_sum问题转换为(n-1)_sum问题,具体步骤如下: 定义函数sum(n, target),表示求解和为target的nsum问题 step1:排序,这样2sum问题可以用双指针解决,时间复杂度为 阅读全文
posted @ 2020-07-17 13:01 十三w~w 阅读(367) 评论(0) 推荐(0)
摘要:理解 动态规划是将原始问题分解为若干个子问题,对子问题进行求解,并记录下子问题的结果,当求解包含已经解决的子问题的原问题时,返回子问题的结果即可 基本概念 转移方程、边界 最优子结构 引例 数塔问题 在如上数塔中,选取一条路径使得路径上的数字和最大 解: 设数塔表示为$f[i][j]$,$dp[i] 阅读全文
posted @ 2019-05-10 16:23 十三w~w 阅读(176) 评论(0) 推荐(0)
摘要:最长回文串问题 manacher算法是用来求解最长回文串的问题。最长回文串的解法一般有暴力法、动态规划、中心扩展法和manacher算法。 暴力法的时间复杂度为$O(n^3)$,一般都会超时; 动态规划的时间复杂度和空间复杂度均为$O(n^2)$,通过矩阵压缩存储,空间复杂度常数可以降低为0.5,但 阅读全文
posted @ 2019-05-10 16:02 十三w~w 阅读(205) 评论(0) 推荐(0)
摘要:一. 字符串比较的分析 如果要判定长度为$n$两个字符串相等,比较中要进行$n$比较,但是如果要判定两个字符串不相等,只需要找出一个不相等的位置,因此可以得到如下结论: 结论1:判定字符串相等和判定字符串不相等的代价不同,判定不相等的代价更小 在KMP算法中,每发生一次失配时,算法总是尝试根据已经获 阅读全文
posted @ 2019-04-26 11:54 十三w~w 阅读(400) 评论(0) 推荐(0)