算法
THE___BEST
这个作者很懒,什么都没留下…
展开
-
字典树(Tire树)
引:假如有n(n很大)个字符串,有q个查询,每个查询表示在这n个串里面是否存在这个要查询的串。一种方法就是直接暴力查找,但是复杂度很高,稍微优化一点的方法是先把n个串排序,然后二分查找,但复杂度仍可以优化,hash或者字典树都可以,这里介绍字典树。字典树是一颗树,每个节点都有多个子节点,子节点的数量取决于字符的范围,比如如果只有小写字母子节点就有26个就足够了,例如对于这六个字符串:ab, ada,原创 2016-08-30 17:45:33 · 587 阅读 · 1 评论 -
AC自动机
问题:有多个单词,然后给出一个较长的字符串,问有多少个单词出现在这个字符串里面。这里要用到的就是AC自动机,AC自动机需要KMP和字典树知识,最好把这两样都弄懂了。 AC自动机其实就是字典树里面再加一个fail指针,这个fail指针的用处就是当当前字符无法被匹配时所要进行的转移,很想KMP算法里面的next数组,比如对于单词:qwert, wert, ert所构成的字典树如下:(世上最丑作图。。丑原创 2016-09-25 23:13:31 · 597 阅读 · 0 评论 -
AVL树(平衡二叉树)
AVL树是排序二叉树的优化版,多了个调整操作,排序二叉树在某些情况下可能会变的跟链表差不多,比如连续插入多个非递减的数: 这就会使得各种操作非常费时间,几乎和链表一样。但是AVL树避免了这一点,保证了任意一个节点的左右儿子节点的高度差不会超过1,这就使得AVL树的复杂度很平衡(插入删除查找log(n))。 这里的调整操作是基于两个旋转操作来进行的,即左旋和右旋: 右旋: 左旋(实际上原创 2016-09-29 23:33:56 · 484 阅读 · 0 评论