
手敲算法
castomere
与君论心握君手,荣辱于余亦何有
展开
-
【手敲算法】AC自动机 从 理解 到 裸敲
为什么要学习 AC自动机当 众多(n 个) "模式串 Ti" 需要确定 与 "母串S" 的相对关系时,如果 使用 kmp 逐个进行 模式串Ti,与S串(lenS = n)匹配的匹配工作,单次复杂度 = O(n)n个 Ti,则 复杂度 = O(n * n),此时需要 AC自动机,进行 "一对多" 的快速匹配复杂度 = O(n +m) m是字符失配跳动的次数(小)相对关系:匹配了哪些 Ti串,匹配多少条 Ti串,匹配Ti 串多少次,等等 可以想到的种种变型算法算法原理AC自动机的 "原创 2020-05-25 17:15:45 · 304 阅读 · 0 评论 -
【手敲算法】RMQ 理解 到 裸敲
为什么要学习RMQ目的:计算数组长度为 n 的 任意区间内 max or min线段树 和 RMQ 区别:1.线段树处理为 O(n * logn) , 查询 O(logn) , 修改O(logn)2. RMQ通过 dp预处理 O(n * logn) , 查询 O(1) , 不支持修改算法原理dp 合并 两个区间内 的...原创 2020-05-06 12:23:28 · 346 阅读 · 0 评论 -
【手敲算法】LCA (最近公共祖先) 从理解 到 裸敲
为什么要学习LCA算法LCA:两个树上节点,逐层向上寻找它们的父节点,第一次查找到的 "相同 (祖先) 节点"查询q次,每次给出两个节点,向上递归查找,最坏情况下是 O(n*q) 的时间复杂度要降低查询的时间复杂度共有三种三算法:(在线:来一个查询操作,执行一次query;离线:读入全部查询操作,一次性计算所有结果)1. LCA tarjan算法 ...原创 2020-05-08 15:28:31 · 399 阅读 · 0 评论 -
【手敲算法】kmp 理解 到 裸敲
为什么要学习kmp and 算法的作用给出两串 字符串,模式串T(长度m),匹配串S(长度n)。在S中快速找到T串的位置暴力破解 是 O(n * m) ——枚举起始点逐个匹配kmp算法可以在线性时间O(n + m)下解决问题算法原理kmp根据 前缀表 和 next数组 来实现前缀表是取出 T 串的所有前缀对每一个前缀(后称pre)进行如下操作:找出pre的前缀 和...原创 2020-04-19 13:09:06 · 347 阅读 · 0 评论 -
算法知识 跳转链接
不能裸敲的算法,不是你的 —— 持续更新数组(一维)操作树状数组 链接原创 2020-04-16 17:06:28 · 193 阅读 · 0 评论 -
【手敲算法】线段树[模板] 理解到 裸敲
为什么学习线段树 and 算法作用查询 or 修改 一段区间或者单点,由O(n) 到 O(logn)算法原理为了理解一段区间的 数字 修改 和查询的操作我们每次将一段区间 二分 成两段如果 需要修改(查询)的区间 包含当前线段,直接对这一段的数据进行 某种操作如果 需要修改(查询)的区间 覆盖了当前线段的一部分,向下递归 :1.直到完全覆盖——向上返回数据 2.没有覆...原创 2020-04-18 17:31:19 · 216 阅读 · 0 评论 -
【手敲算法】树状数组[模板] 理解 到 裸敲
为什么学树状数组每次修改一段区间,O(n) 根本不能满足我们对时间复杂度的需求有需求就要有解决的办法算法作用维护一段线性区间的 O(logn) 的更新与查询算法原理为了理解,我们从目的 =>倒推 =>方法:因为要 O(logn) 的查询长度,所以可以将一个线段分成最长为 logn 的很多段每段为了计算长度,则会继续向下递归分解。那么遵循一种...原创 2020-04-16 17:04:45 · 191 阅读 · 0 评论