摘要:
倍增 倍增是与二分相反的算法,其核心思想是每次扩大一倍,以 2 n 2^n 2n的速度极大扩展空间 原理:任意整数均可被分解为若干个以2为底的幂项和。最经典的倍增是 2 i 2^i 2i(实际应为 e i e^i ei) 流程:定义倍增表 g [ i ] [ j ] g[i][j] g[i][j], 阅读全文
摘要:
Floyd 本质:DP 存储结构:邻接矩阵,若有重边则读入时必须取最小边 算法特点:多源最短路,能一次性求解所有点对间的最短距离 适用对象:小图,允许负权图,无法适用于负环图(负环:环上边权之和为负的环,当任意时刻出现 d p [ i ] [ i ] < 0 dp[i][i]<0 dp[i][i]< 阅读全文
摘要:
Dijkstra 本质:BFS+贪心,对点进行操作 特点:单源最短路,求解一个源点到其他所有点的最短距离 存储结构:链式前向星 适用对象:非负权图(一旦顶点已经确定最短路,其将不再被考查, d i s dis dis将不再改变);不能求最长路 核心思想:不断贪心选取 { d i s } \set{d 阅读全文
摘要:
最长公共子序列(LCS) 给出两序列 v 1 , v 2 v1,v2 v1,v2,求它们最长公共子序列长度(子序列可以不连续) 长度问题 DP( O ( n 2 ) O(n^2) O(n2)) 闫氏DP分析法 注: v 1 , v 2 v1,v2 v1,v2下标从 0 0 0开始, d p dp d 阅读全文