Skip to content

Latest commit

 

History

History
 
 

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

高级动态规划 分治淘汰次优解就能形成动态规划 1、将一个复杂的问题分治为简单的子问题 2、分治+最优子结构 3、顺推顺序:动态递推,从下往上 DP顺推模板 function DP() { dp = [][]; // 二维情况 for i=0..M{ for j=0..N { dp[i][j] = _Function(dp[i'][j']...) } } return dp[M][N] }

字符串算法

最长回文子串解法
    1、暴力 O(N^3)
    2、中间向两边扩张 O(n^2)
        两种情况 奇数和偶数
    3、动态规划
        i 起始位置
        j 终点
        首先定义 P(i,j)
                true s[i,j] 是回文串
        P(i,j) =
                false s[i,j] 不是回文串

        接下来
            P(i,j) = (P(i+1,j-1) && S[i] == S[j])

字符串匹配算法
    1、暴力法 - O(MN)
        https://shimo.im/docs/8G0aJqNL86wWrPUE/read
    2、Rabin-Karp 算法
        利用 找出子串的 hash() 是否相等来进行加速
        1、假设子串的长度为 M (pat),目标串的长度为 N(txt)
        2、计算子串的 hash 值hash_pat
        3、计算目标字符串txt中每个长度为M的子串的hash值(共需要计算 N-M+1次)
        4、比较hash值:如果hash值不同,字符串必然不匹配;如果hash值相同,还需要使用朴素算法再次判断
        https://shimo.im/docs/1wnsM7eaZ6Ab9j9M/read
    3、KMP 算法
        用来找已经匹配的这一个片段,最大的前缀和最大的后缀最长有多长
        利用匹配前缀和后缀计算出公共前缀表
        https://www.bilibili.com/video/av11866460?from=search&seid=17425875345653862171
        http://www.ruanyifeng.com/blog/2013/05/Knuth%E2%80%93Morris%E2%80%93Pratt_algorithm.html
    4、Boyer-Moore 算法
        https://www.ruanyifeng.com/blog/2013/05/boyer-moore_string_search_algorithm.html
    5、Sunday 算法
        https://blog.csdn.net/u012505432/article/details/52210975