摘要: 信息熵的公式: 信息量: 信息量是对信息的度量,也相当于理论上所需的存储空间。信息量的大小与事件发生的概率成反比,因为越大概率的事件使人产生的印象越小,从而信息量也就越小。 令事件x的信息量为h(x),x、y为两个不相关事件,显然满足以下性质:h(x,y) = h(x) + h(y)又有 p(x,y 阅读全文
posted @ 2019-10-31 21:27 Hanasaki 阅读(627) 评论(0) 推荐(0) 编辑
摘要: Treap = Tree + Heap Treap的每个节点保存两个值 (1)键值(维持BST的熟悉) (2)优先级(随机生成,维持Heap的属性) 支持六个操作: (1)插入节点 (2)删除节点 (3)查询数x的排名 (4)查询排名为x的数 (5)查询数x的前驱(求树中比x小的最大数) (6)查询 阅读全文
posted @ 2019-09-24 20:16 Hanasaki 阅读(156) 评论(0) 推荐(0) 编辑
摘要: 一种二分查找树 大多数操作有O(logN)的时间复杂度,但有时很慢 // O(N) 可以快速访问最近访问过的元素(这个结构的核心就是缓存) 每次查找之后将已找到的元素旋到树根部,旋转情况分为Zig-zag(3弯)、Zig-zig(3直)、Zig(2) 阅读全文
posted @ 2019-08-29 16:47 Hanasaki 阅读(113) 评论(0) 推荐(0) 编辑
摘要: 在后缀数组sa的基础上,还需要rank(sa的反数组,表示后缀i的排名)和height(表示sa[i-1]和sa[i]的最大公共前缀)两个数组。对于满足rank[j]<rank[k]的后缀j和k,LCP(j,k)=RMQ(heght,rank[j]+1,rank[k])。最关键的地方在于优化heig 阅读全文
posted @ 2019-07-26 23:14 Hanasaki 阅读(664) 评论(0) 推荐(0) 编辑
摘要: AVL树是一种自平衡二叉查找树。在AVL树中,任一节点对应的两棵子树的最大高度差为1。因此,插入、查找和删除在平均和最坏情况下的时间复杂度都是O(logn)。 这四个图分别对应AVL树的右旋,左旋,先右再左旋,先左再右旋。 struct node{ int key,height; node *lef 阅读全文
posted @ 2019-07-25 10:47 Hanasaki 阅读(201) 评论(0) 推荐(0) 编辑
摘要: 后缀数组用来解决无法事先知道查询时的多模板匹配问题代码部分主要是要搞懂各种数组的意义sa是后缀排名到位置的映射x是第一关键字位置到排名的映射y是第二关键字排名到位置的映射 阅读全文
posted @ 2019-07-20 23:43 Hanasaki 阅读(170) 评论(0) 推荐(0) 编辑
摘要: AhoCorasick(AC)自动机相当于KMP的加强版,可用于多模板匹配。AC自动机是由Trie加上失配边组成的。 f代表失配边val用来标记终端结点由于同一个结点可能对应多个字符串的结尾,所以last用来表示此结点沿着失配边走的前一个终端结点,last也叫做后缀链接 刘汝佳大神的模板代码: 当然 阅读全文
posted @ 2019-07-16 23:00 Hanasaki 阅读(242) 评论(0) 推荐(0) 编辑
摘要: 阅读全文
posted @ 2019-07-12 23:10 Hanasaki 阅读(112) 评论(0) 推荐(0) 编辑
摘要: 贪心+并查集 阅读全文
posted @ 2019-07-08 23:04 Hanasaki 阅读(94) 评论(0) 推荐(0) 编辑
摘要: 阅读全文
posted @ 2019-07-06 23:23 Hanasaki 阅读(117) 评论(0) 推荐(0) 编辑