![](https://img-blog.csdnimg.cn/20181228215555460.gif?x-oss-process=image/resize,m_fixed,h_224,w_224)
专题学习成长
文章平均质量分 97
记录作者成长足迹的专栏
Chandery
人工智能是未来
展开
-
浅谈FFT
Fast Fourier Transportation·多项式的表达系数表达对于一个次数界为n的多项式A(x)=∑j=0n−1ajxjA(x)=\sum_{j=0}^{n-1}{a_jx^j}A(x)=∑j=0n−1ajxj而言,其系数表达是由一个系数组成的向量a=(a0,a1,...,an−1)a=(a_0,a_1,...,a_{n-1})a=(a0,a1,...,an−...原创 2019-03-08 12:24:09 · 401 阅读 · 2 评论 -
浅谈Suffix Automaton(后缀自动机)
这是一个强大的automaton——Suffix Automaton==>我学过最强大,最牛犇,最难理解的自动机现在给你一个问题: 给定一个字符串,要求这个字符串所有子串出现的次数分别是多少朴素算法①枚举左端点,枚举右端点,用hash记录一下,统计个数。(注意最好双hash,保证正确率) 预计时间复杂度:O(n2)O(n2)O(n^2) ②可以直接开...原创 2018-05-07 19:55:42 · 1389 阅读 · 0 评论 -
进化版数据结构(可持久化)
主席树和可持久化线段树有什么区别? 总之没什么区别!!主席树(可持久化线段树) 可持久化线段树(Persistent data structure)最主要的功能就是可以查询历史版本。那么presistent≈president(主席),得名主席树。给你个问题: 给你一段数列,要求查询一段区间的第k小数。(n&amp原创 2018-05-24 12:31:34 · 1088 阅读 · 0 评论 -
浅谈快速幂
定义:快速幂顾名思义,就是快速算某个数的多少次幂。其时间复杂度为 O(log2N), 与朴素的O(N)相比效率有了极大的提高。以下以求a的b次方来介绍原理:把b转换成2进制数该2进制数第i位的权为(2^(i-1))例如a^11=a^(2^0+2^1+2^3)11的二进制是1 0 1 111 = 2^3*1 + 2^2*0 + 2^1*1 + 2^0*1因此,...原创 2016-12-24 16:04:03 · 268 阅读 · 0 评论 -
浅谈线段树
首先,线段树是一棵“树”,而且是一棵完全二叉树。同时,“线段”两字反映出线段树的另一个特点:每个节点表示的是一个“线段”,或者说是一个区间。事实上,一棵线段树的根节点表示的是“整体”的区间,而它的左右子树也是一棵线段树,分别表示的是这个区间的左半边和右半边。 在此我们可以举一个例子来说明线段树通常的构造方法,以RMQ问题为例: 有N个数排成一排,每次询问某一段中的最小数。 ...原创 2017-01-17 15:31:13 · 497 阅读 · 0 评论 -
浅谈RMQ
RMQ是英文Range Maximum(Minimum) Query的缩写,顾名思义是用来求某个区间内的最大值或最小值,通常用在要多次询问一些区间的最值的问题中。 RMQ的原理实际上是动态规划,我们用A[1..N]表示一组数,用[Li,Ri]表示题目中所涉及到询问区间。设F[I,J]表示从A[I]到A[I+2j2j2^{j}-1]这个范围内的最大值,也就是以A[I]为起点连续2j2j2...原创 2017-01-17 15:34:43 · 1164 阅读 · 0 评论 -
浅谈最小生成树
简介 Kruskal(克鲁斯卡尔)算法是一种巧妙利用并查集来求最小生成树的方法。首先我们把无向图中互相连通的一些点成为处于同一连通块的。Kruskal算法将一个连通块仿作一个集合。Kruskal首先将所有的边按从小到大的顺序排序,并认为每一个点都是孤立的,分属于n个独立的集合。然后按顺序美剧每一条边。如果这条边链接着两个不同的集合,就把这两条边加入最小生成树,这两个不同的集合就合并了;如果...原创 2017-01-17 16:37:13 · 369 阅读 · 1 评论 -
浅谈归并排序
简介 归并排序是一种O(n log n)的排序方法,但是比快排要稳定一点,所以我们通常用它来解决更大数量的排序实际原理其实,归并排序是用dfs来排序的 工作原理如下: 采用递归实现二分的方式排逐个排序,到最终dfs返回的时候完成排序。var a,r1:array[0..200000]of longint; n,i:longint...原创 2017-07-09 20:00:23 · 366 阅读 · 0 评论 -
浅谈堆
简介 堆结构是一种数组对象,它可以被视为一颗完全二叉树(除了叶子节点别的节点都是满的)。树中结构与数组中存放该节点值得那个元素是对应相同的,见图:堆的性质设数组A的长度为len,二叉树的节点个数为size,size<=len,则A[i]存储二叉树中编号为i的节点值(1<=i<=size),而A[size]以后的元素并不属于相应的堆,树的根为A[1],...原创 2017-07-10 20:56:08 · 505 阅读 · 0 评论 -
浅谈权值线段树
简介 线段树大家都知道,不知道的话点这里。我们线段树是以标号为关键字的线段树,顾名思义,权值线段树就是以权值为关键字的一棵线段树。其实在实现的时候,比线段树还简单,如果你真正理解了线段树的话~~权值线段树一般是用来快速求一个区间的第k大(或小),如果你会splay的话请自动点×。工作原理权值线段树是用来求第k大(或小的)。假设我们由一串数:1,5,2,7,4,6。要你求每次按...原创 2017-08-08 21:31:08 · 2897 阅读 · 1 评论 -
浅谈LCA(最近公共祖先)
简介 首先是最近公共祖先的概念(什么是最近公共祖先?): 在一棵没有环的树上,每个节点肯定有其父亲节点和祖先节点,而最近公共祖先,就是两个节点在这棵树上深度最大的公共的祖先节点。 换句话说,就是两个点在这棵树上距离最近的公共祖先节点。 所以LCA主要是用来处理当两个点仅有唯一一条确定的最短路径时的路径。讲解我们今天介绍一种计算LCA的方法——Tarjan。 ...原创 2017-08-12 07:47:04 · 1013 阅读 · 0 评论 -
浅谈树上倍增
Tarjan LCAhttp://blog.csdn.net/cdy1206473601/article/details/77104910讲解上次写了Tarjan LCA,但是当这棵树是一条链的话,时间复杂度就很高啦!所以,我们可以用倍增来解决。但是,在随机数据下,Tarjan是快于倍增的! 好吧,倍增思想就是设一个fa[i][j]表示i结点的第2j2j2^j级祖先。然后就可以通...原创 2017-08-15 07:51:05 · 723 阅读 · 0 评论 -
浅谈二分图最大匹配(匈牙利算法)
讲解匈牙利算法,(俗称“找妹子算法”),是一种求二分图最大匹配的常用算法。 为什么叫“找妹子算法”呢? 这是因为它的实现原理很像在找妹子: 首先,我们把一堆点分成两边(这才是“二分”,不是真正的“二分”): 男女生两个点之间连一条线表示他们互相喜欢 现在我们要求尽量每个人都找到妹子的最大匹配。 我们首先看,Boy1(我们以后都这样称呼),首先看一下Girl5:“还是单身,不错不...原创 2017-08-18 21:03:36 · 888 阅读 · 0 评论 -
探究最长不下降子序列
简介 这是一个很初级的dp模型,最简单的是O(n2)O(n2)O(n^2)的,但是为了时间快,我们有出现了O(n log n)的算法。在这里予以讲解。讲解一、O(n2)O(n2)O(n^2)这个想必大家一定闭着眼睛都能打出来吧。 我们设f[i]表示取到第i个的最长子序列长度。 然后就可以N2N2N^2枚举,暴力转移:f[i]=max(f[i],f[j]+1);...原创 2017-09-25 16:30:57 · 475 阅读 · 0 评论 -
浅谈伸展树(Splay)
//本文是一个暂时的小记,有不对的请大佬们指出~ 真正大佬的在这http://blog.csdn.net/clove_unique/article/details/50630280 伸展树(Splay Tree),也叫分裂树,是一种二叉排序树,它能在O(log n)内完成插入、查找和删除操作。它由丹尼尔·斯立特Daniel Sleator和罗伯特·恩卓·塔扬Robert Endre Ta...原创 2018-01-17 20:43:42 · 370 阅读 · 0 评论 -
浅谈树链剖分
什么是树链剖分? 指一种对树进行划分的算法,它先通过轻重边剖分将树分为多条链,保证每个点属于且只属于一条链,然后再通过数据结构(树状数组、SBT、SPLAY、线段树等)来维护每一条链,主要用来维护树上每条链的极值或和之类的。类似首先把树上倍增摆在前面,如果不会树上倍增就不必来看树链剖分。为什么要学树链剖分?有的人说:“我会树上倍增,我怕谁?”,没错,你怕的就是树链...原创 2018-01-28 21:11:47 · 4380 阅读 · 4 评论