acm学习

————————个人初步————————
1.搜索:IDA*、哈希;
2.思路构造:、三分、归并排序
3.数学:扩展欧几里得、素数、欧拉函数、矩阵快速幂、高斯消元;
4.数据结构:STL(优先队列、map、multiset)、单调结构(队列、栈、滑动窗口)、并查集;
5.动态规划:经典问题、树形dp、状压dp;
6.数学:博弈(巴什、nim、斐波那契、威左夫)、容斥原理、逆元、组合递推;
7.图论:最小生成树、最大匹配、最短路(floyd、dijkstra、bellman-ford、SPFA);
8.计算几何:线段相交、叉积运用、多边形面积;
9.数据结构:线段树、树状数组、KMP、Trie;
10. 图论:网络流(最大流、最小费用流)、强连通分量
————————组队必须————————
1.数据结构:伸展树、AC自动机、后缀数组、树链剖分、平衡树(treap)、主席树、分块、RMQ、LCA;
2.动态规划:数位dp、区间dp、数据结构优化dp(斜率优化、单调队列、四边形不等式、二进制);
3.计算几何:凸包、半平面交、圆的面积并;
4.数学:SG函数、矩阵、费马小定理、中国剩余定理、pick定理、概率和期望(概率dp);
5.数学:FFT、辛普森积分、置换(polya定理、Burnside引理)组合数学(区间计数、卡特兰数、斯特灵数、计数序列)
6.图论:连通分量(割点、桥、双连通)、2SAT、差分约束、最小割、欧拉回路;
7.图论:网络流(有上下界的网络流、最大密度子图、最大闭合子图)、最大完美匹配
————————组队强化————————
1.杂项:模拟退火、插头dp、DLX、树分治;
2.数据结构:动态树、kd树、后缀自动机、莫队算法、可持久化数据结构;
3.数学:生成函数、线性规划、莫比乌斯反演、快速数论变换;
4.图论:稳定婚姻、第k短路、次小生成树、最大团、哈密顿回路、最小有向生成树;

5.计算几何:旋转卡壳、三维凸包、最小外接圆、仿射变换与矩阵、运动规划;




——————————数据结构——————————
伸展树:伸展树(Splay Tree),也叫分裂树,是一种二叉排序树,它能在O(log n)内完成插入、查找和删除操作。它由丹尼尔·斯立特Daniel Sleator和罗伯特·恩卓·塔扬Robert Endre Tarjan在1985年发明的。
在伸展树上的一般操作都基于伸展操作:假设想要对一个二叉查找树执行一系列的查找操作,为了使整个查找时间更小,被查频率高的那些条目就应当经常处于靠近树根的位置。于是想到设计一个简单方法, 在每次查找之后对树进行重构,把被查找的条目搬移到离树根近一些的地方。伸展树应运而生。伸展树是一种自调整形式的二叉查找树,它会沿着从某个节点到树根之间的路径,通过一系列的旋转把这个节点搬移到树根去。
它的优势在于不需要记录用于平衡树的冗余信息。
——————————AC自动机
一个常见的例子就是给出n个单词,再给出一段包含m个字符的文章,让你找出有多少个单词在文章里出现过。
要搞懂AC自动机,先得有模式树(字典树)Trie和KMP模式匹配算法的基础知识。AC自动机算法分为3步:构造一棵Trie树,构造失败指针和模式匹配过程。
如果你对KMP算法了解的话,应该知道KMP算法中的next函数(shift函数或者fail函数)是干什么用的。KMP中我们用两个指针i和j分别表示,A[i-j+ 1..i]与B[1..j]完全相等。
也就是说,i是不断增加的,随着i的增加j相应地变化,且j满足以A[i]结尾的长度为j的字符串正好匹配B串的前 j个字符,
当A[i+1]≠B[j+1],KMP的策略是调整j的位置(减小j值)使得A[i-j+1..i]与B[1..j]保持匹配且新的B[j+1]恰好与A[i+1]匹配,
而next函数恰恰记录了这个j应该调整到的位置。同样AC自动机的失败指针具有同样的功能,
也就是说当我们的模式串在Trie上进行匹配时,如果与当前节点的关键字不能继续匹配,
就应该去当前节点的失败指针所指向的节点继续进行匹配。
——————————后缀数组
后缀数组是处理字符串的有力工具。后缀数组是后缀树的一个非常精巧的替代品,它比后缀树容易编程实现,
能够实现后缀树的很多功能而时间复杂度也并不逊色,而且它比后缀树所占用的内存空间小很多。
——————————树链剖分
树链剖分,计算机术语,指一种对树进行划分的算法,它先通过轻重边剖分将树分为多条链,
保证每个点属于且只属于一条链,然后再通过数据结构(树状数组、SBT、SPLAY、线段树等)来维护每一条链。
——————————平衡树
平衡二叉树(Balanced Binary Tree)具有以下性质:它是一 棵空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树。
平衡二叉树的常用实现方法有红黑树、AVL、替罪羊树、Treap、伸展树等。 
最小二叉平衡树的节点的公式如下 F(n)=F(n-1)+F(n-2)+1 这个类似于一个递归的数列,可以参考Fibonacci数列,1是根节点,
F(n-1)是左子树的节点数量,F(n-2)是右子树的节点数量。
Treap:树堆,在数据结构中也称Treap,是指有一个随机附加域满足堆的性质的二叉搜索树,
其结构相当于以随机数据插入的二叉搜索树。其基本操作的期望时间复杂度为O(logn)。相对于其他的平衡二叉搜索树,
Treap的特点是实现简单,且能基本实现随机平衡的结构。
——————————主席树
主席树又称函数式线段树,顾名思义,也就是通过函数来实现的线段树,至于为什么叫主席树,那是因为是fotile主席创建出来的这个数据结构(其实貌似是当初主席不会划分树而自己想出来的另一个处理方式。。。。是不是很吊呢? ORZ...)不扯了,切入正题。
主席树就是利用函数式编程的思想来使线段树支持询问历史版本、同时充分利用它们之间的共同数据来减少时间和空间消耗的增强版的线段树。
很多问题如果用线段树处理的话需要采用离线思想,若用主席树则可直接在线处理。故很多时候离线线段树求解可以转化为在线主席树求解。
注意,主席树本质就是线段树,变化就在其实现可持久化,后一刻可以参考前一刻的状态,二者共同部分很多。
一颗线段树的节点维护的是当前节点对应区间的信息,倘若每次区间都不一样,就会给处理带来一些困难。
有时可以直接细分区间然后合并,此种情况线段树可以直接搞定;但有时无法通过直接划分区间来求解,
如频繁询问区间第k小元素,当然,此问题有比较特殊的数据结构-划分树。
其实还有一个叫做归并树,是根据归并排序实现的,每个节点保存的是该区间归并排序后的序列,
因此,时间、空间复杂度都及其高, 所以一般不推荐去用。当然,主席树也是可以解决的。
——————————分块
先简单介绍一下分块算法。 
分块算法是一种很常见的根号算法,一般它的时间复杂度会带根号。 
分块和线段树的区别在于,分块算法可以维护一些线段树维护不了的东西,例如单调队列等,线段树能维护的东西必须能够进行信息合并,而分块则不需要。不过,它们也有共同点,分块和线段树一样,分块需要支持类似标记合并的东西。 
简单来说,分块算法就是优化过后的暴力。
——————————LCA、RMQ
LCA(Least Common Ancestors),即最近公共祖先,是指这样一个问题:
在有根树中,找出某两个结点u和v最近的公共祖先(另一种说法,离树根最远的公共祖先)。 
RMQ(Range Minimum/Maximum Query),即区间最值查询,是指这样一个问题:对于长度为n的数列A,
回答若干询问RMQ(A,i,j)(i,j<=n),返回数列A中下标在i,j之间的最小/大值。这两个问题是在实际应用中经常遇到的问题,
——————————动态树
现在我们需要一个数据结构满足支持以下的操作:
两个节点连接(保证不出现环)
两个节点断开
求任意两个节点之间的区间和
这样是不是很像树链剖分? 但是因为是动态的所以我们采用动态树来进行维护。
——————————kd树
k-d树[1]  (k-dimensional树的简称),是一种分割k维数据空间的数据结构。主要应用于多维空间关键数据的搜索(如:范围搜索和最近邻搜索)。K-D树是二进制空间分割树的特殊的情况。
——————————后缀自动机
后缀自动机(单词的有向无环图)——是一种强有力的数据结构,让你能够解决许多字符串问题。
例如,使用后缀自动机可以在某一字符串中搜索另一字符串的所有出现位置,或者计算不同子串的个数——这都能在线性
时间内解决。
   直觉上,后缀自动机可以被理解为所有子串的简明信息。一个重要的事实是,后缀自动机以压缩后的形式包含了一个长度
为n的字符串的所有信息,仅需要O(n)的空间。并且,它能在O(n)时间内被构造(如果我们将字母表的大小k视作常数,否则就
是O(n*logk))。
   历史上,Blumer等人于1983年首次提出了后缀自动机的线性规模,然后在1985-1986年,人们提出了首个线性时间内构建
后缀自动机的算法(Crochemore,Blumer等)。在文末链接处查看更多细节。
   后缀自动机在英文中被称作“suffix automaton”(复数形式:suffix automata),单词的有向无环图——"direcged acyclic
word graph"(简写为“DAWG”)。
——————————莫队算法
莫队算法是一个对于区间、树或其他结构离线(在线)维护的算法,此算法基于一些基本算法,例如暴力维护,树状数组,分块,最小曼哈顿距离生成树,对其进行揉合从而产生的一个简单易懂且短小好写的算法。此算法在很多情况下可以很轻松的切掉一些复杂而且难写的数据结构问题。
——————————可持久化数据结构
可持久数据结构主要指的是我们可以查询历史版本的情况并支持插入,利用使用之前历史版本的数据结构来减少对空间的消耗(能够对历史进行修改的是函数式)。










——————————图论——————————
——————————最大匹配
定义:在一个无向图中,定义一条边覆盖的点为这条边的两个端点。
找到一个边集S包含最多的边,使得这个边集覆盖到的所有顶点中的每个顶点只被一条边覆盖。S的大小叫做图的最大匹配。
——————————网络流
网络流(network-flows)是一种类比水流的解决问题方法,与线性规划密切相关。网络流的理论和应用在不断发展,出现了具有增益的流、多终端流、多商品流以及网络流的分解与合成等新课题。网络流的应用已遍及通讯、运输、电力、工程规划、任务分派、设备更新以及计算机辅助设计等众多领域。
——————————强连通分量
有向图强连通分量:在有向图G中,如果两个顶点vi,vj间(vi>vj)有一条从vi到vj的有向路径,同时还有一条从vj到vi的有向路径,则称两个顶点强连通(strongly connected)。如果有向图G的每两个顶点都强连通,称G是一个强连通图。
有向图的极大强连通子图,称为强连通分量(strongly connected components)。
——————————连通分量
强连通图的连通分量为其本身。如果为非连通图,则连通分量为该图的最大连通子图。
——————————2SAT
要知道2-sat是什么,我们先要知道什么是适定性(Satisfiability)问题,适,就是合适,定,就是确定,适定性问题通俗的说就是确定是否可以满足所有的条件?或者说就是确定一个满足所有条件的方案。取英文的前三个字母,简称sat问题。
通俗的sat问题表述一般是这样的:有很多个集合,每个集合里面有若干元素,现给出一些取元素的规则,要你判断是否可行,可行则给出一个可行方案。如果所有集合中,元素个数最多的集合有k个,那么我们就说这是一个k-sat问题,同理,2-sat问题就是k=2时的情况。
为什么研究2-sat呢?无可置疑的是它很有用。为什么不研究3-sat乃至k更大的情况呢,因为它们已经被证明为是 NP完全问题了,在更多的情况下,2-sat不仅仅是元素个数最多的集合含有2个元素,而是每个集合都含有2个元素,且这2个元素不允许同时取出,这篇文章主要讨论的就是这样一种特殊的模型。
——————————差分约束
如果一个系统由n个变量和m个约束条件组成,形成m个形如ai-aj≤k的不等式(i,j∈[1,n],k为常数),则称其为差分约束系统(system of difference constraints)。亦即,差分约束系统是求解关于一组变量的特殊不等式组的方法。
——————————最小割
最小割,图中所有的割中,边权值和最小的割为最小割。
割:设Ci为网络N中一些弧的集合,若从N中删去Ci中的所有弧能使得从源点Vs到汇点Vt的路集为空集时,称Ci为Vs和Vt间的一个割。通俗理解,一个图或网络的割,表示一个切面或切线,将图或网络分为分别包含源点和漏点的两个子集,该切线或切面与网络相交的楞或边的集合,称为图像的割。
——————————欧拉回路
若图G中存在这样一条路径,使得它恰通过G中每条边一次,则称该路径为欧拉路径。若该路径是一个圈,则称为欧拉(Euler)回路。
具有欧拉回路的图称为欧拉图(简称E图)。具有欧拉路径但不具有欧拉回路的图称为半欧拉图。
——————————最大密度子图
给定一个无向图,要求它的一个子图,使得子图中边数 |E| 与点数 |V| 的比值最大,即最大化:


|E||V|
——————————最大权闭子图
给定一个点带权的有向图,求这个图的最大权闭合图? 
* 闭合图含义:图中任意的出边所指的点都在图中的点集内。
——————————最大完美匹配
二分图如果是没有权值的,求最大匹配。则是用匈牙利算法求最大匹配。如果带了权值,求最大或者最小权匹配,则必须用KM算法。
其实最大和最小权匹配都是一样的问题。只要会求最大匹配,如果要求最小权匹配,则将权值取相反数,再把结果取相反数,那么最小权匹配就求出来了。
——————————稳定婚姻
问题来自于一场“3分钟相亲”活动,参加活动的有n位男士和n位女士。要求每位男士都要和所有的女士进行短暂的单独交流,并为她们打分,然后按照喜欢程度,对每一位女士进行排序;同样的,每位女士也要对所有男士进行打分和排序。
对于典型“稳定婚姻问题”,借助矩阵(二维数组)给出了一种简明的实现方法。在本算法中,所采用的存储结构和实现方法灵活巧妙,通俗易懂,方便实现;而且用于存储所要处理数据的内存空间相对于其它一些算法节省了一半,空间复杂度为O(1);由于存储结构的巧妙性,算法的时间复杂度在最好的情况下为线性时间N,在最坏的情况下为O(N2)。
这个是数学界切切实实研究过的问题。对于以前没有接触过这个问题的人,这个理论最出人意外的结论是:传统的求爱,结婚过程是male-optimal的,也就是说,男性能够得到尽可能好的心上人,女性却不然。这就是所谓的稳定匹配问题(StableMarriageProblem,也叫稳定婚姻问题)。
——————————k短路
A star
——————————次小生成树
次小生成树,就是求除了最小生成树之外最小的那个生成树。
——————————最大团
给定无向图G=(V,E),其中V是非空集合,称为顶点集;E是V中元素构成的无序二元组的集合,称为边集,无向图中的边均是顶点的无序对,无序对常用圆括号“( )”表示。如果U  V,且对任意两个顶点u,v∈U有(u,v)∈E,则称U是G的完全子图。G的完全子图U是G的团当且仅当U不包含在G的更大的完全子图中。G的最大团是指G中所含顶点数最多的团。
如果UíV且对任意u,v∈U有(u,v)不属于E,则称U是G的空子图。G的空子图U是G的独立集当且仅当U不包含在G的更大的空子图中。G的最大独立集是G中所含顶点数最多的独立集。
对于任一无向图G=(V,E),其补图G'=(V',E')定义为:V'=V,且(u,v)∈E'当且仅当(u,v)?E。
如果U是G的完全子图,则它也是G'的空子图,反之亦然。因此,G的团与G'的独立集之间存在一一对应的关系。特殊地,U是G的最大团当且仅当U是G'的最大独立集。
通俗点讲就是在一个无向图中找出一个点数最多的完全图。
——————————哈密顿回路
哈密顿图(哈密尔顿图)(英语:Hamiltonian path,或Traceable path)是一个无向图,由天文学家哈密顿提出,由指定的起点前往指定的终点,途中经过所有其他节点且只经过一次。在图论中是指含有哈密顿回路的图,闭合的哈密顿路径称作哈密顿回路(Hamiltonian cycle),含有图中所有顶点的路径称作哈密顿路径。
——————————最小有向生成树
在一给定的无向图G = (V, E) 中,(u, v) 代表连接顶点 u 与顶点 v 的边(即),而 w(u, v) 代表此边的权重,若存在 T 为 E 的子集(即)且为无循环图,使得
的 w(T) 最小,则此 T 为 G 的最小生成树。
 
最小生成树其实是最小权重生成树的简称。










——————————数学——————————
——————————欧拉函数
在数论,对正整数n,欧拉函数是小于n的正整数中与n互质的数的数目(φ(1)=1)。此函数以其首名研究者欧拉命名(Euler'so totient function),它又称为Euler's totient function、φ函数、欧拉商数等。 例如φ(8)=4,因为1,3,5,7均和8互质。 从欧拉函数引伸出来在环论方面的事实和拉格朗日定理构成了欧拉定理的证明。
——————————高斯消元
数学上,高斯消元法(或译:高斯消去法),是线性代数规划中的一个算法,可用来为线性方程组求解。
但其算法十分复杂,不常用于加减消元法,求出矩阵的秩,以及求出可逆方阵的逆矩阵。
不过,如果有过百万条等式时,这个算法会十分省时。一些极大的方程组通常会用迭代法以及花式消元来解决。
当用于一个矩阵时,高斯消元法会产生出一个“行梯阵式”。高斯消元法可以用在电脑中来解决数千条等式及未知数。
亦有一些方法特地用来解决一些有特别排列的系数的方程组。
——————————博弈
巴什博奕:巴什博弈:只有一堆n个物品,两个人轮流从这堆物品中取物, 规定每次至少取一个,最多取m个。最后取光者得胜。
nim博弈:满足以下条件的游戏是ICG(可能不太严谨):1、有两名选手;2、两名选手交替对游戏进行移动(move),每次一步,选手可以在(一般而言)有限的合法移动集合中任选一种进行移动;3、对于游戏的任何一种可能的局面,合法的移动集合只取决于这个局面本身,不取决于轮到哪名选手操作、以前的任何操作、骰子的点数或者其它什么因素; 4、如果轮到某名选手移动,且这个局面的合法的移动集合为空(也就是说此时无法进行移动),则这名选手负。根据这个定义,很多日常的游戏并非ICG。例如象棋就不满足条件3,因为红方只能移动红子,黑方只能移动黑子,合法的移动集合取决于轮到哪名选手操作。
斐波那契:有一堆个数为n的石子,游戏双方轮流取石子,满足:


1)先手不能在第一次把所有的石子取完;


2)之后每次可以取的石子数介于1到对手刚取的石子数的2倍之间(包含1和对手刚取的石子数的2倍)。


约定取走最后一个石子的人为赢家,求必败态。
威左夫:威佐夫博弈(Wythoff Game):有两堆各若干个物品,两个人轮流从某一堆或同时从两堆中取同样多的物品,规定每次至少取一个,多者不限,最后取光者得胜。
——————————容斥原理
在计数时,必须注意没有重复,没有遗漏。为了使重叠部分不被重复计算,人们研究出一种新的计数方法,这种方法的基本思想是:先不考虑重叠的情况,把包含于某内容中的所有对象的数目先计算出来,然后再把计数时重复计算的数目排斥出去,使得计算的结果既无遗漏又无重复,这种计数的方法称为容斥原理
——————————逆元
设S为一有二元运算 * 的集合。若e为(S,*)的单位元且a*b=e,则a称为b的左逆元素且b称为a的右逆元素。若一元素x同时是y的左逆元素和右逆元素时,x称为y的两面逆元素或简称为逆元素。S内的一有两面逆元素的元素被称为在S内为可逆的。
正如(S,*)可以有数个左单位元或右单位元一般,一元素同时有数个左逆元素或右逆元素也是有可能的。甚至有可能有数个左逆元素和右逆元素。
若其运算 * 具有结合律,则当一元素有一左逆元素和一右逆元素时,这两个会是相同且唯一的。在这一情形之下,可逆元素的集合会是个群,称为S的可逆元群,且标记为U(S)或S 。
——————————组合递推
公式递推代码
C(n, m)  = C(n -1, m - 1) + C(n - 1, m)


[cpp] view plain copy
C[1][0] = C[1][1] = 1;  
    for (int i = 2; i < N; i++){  
        C[i][0] = 1;  
        for (int j = 1; j < N; j++)  
            C[i][j] = (C[i - 1][j] + C[i - 1][j - 1]);  
    }  
——————————SG函数
给定一个有向无环图和一个起始顶点上的一枚棋子,两名选手交替的将这枚棋子沿有向边进行移动,无法移 动者判负。事实上,这个游戏可以认为是所有Impartial Combinatorial Games的抽象模型。
也就是说,任何一个ICG都可以通过把每个局面看成一个顶点,对每个局面和它的子局面连一条有向边来抽象成这个“有向图游戏”。下 面我们就在有向无环图的顶点上定义Sprague-Grundy函数。首先定义mex(minimal excludant)运算,这是施加于一个集合的运算,表示最小的不属于这个集合的非负整数。例如mex{0,1,2,4}=3、mex{1,3,5}=0、mex{}=0。
对于一个给定的有向无环图,定义关于图的每个顶点的Sprague-Grundy函数g如下:g(x)=mex{ g(y) | y是x的后继 }。
——————————费马小引理
费马小定理(Fermat's little theorem)是数论中的一个重要定理,在1636年提出,其内容为: 假如p是质数,且gcd(a,p)=1,那么 a(p-1)≡1(mod p),即:假如a是整数,p是质数,且a,p互质(即两者只有一个公约数1),那么a的(p-1)次方除以p的余数恒等于1。
——————————中国剩余定理
问题:今有物不知其数,三三数之剩二,五五数之剩三,七七数之剩二。问物几何?


说明白一点就是说,存在一个数x,除以3余2,除以5余三,除以7余二,然后求这个数。上面给出了解法。再明白这个解法的原理之前,需要先知道一下两个定理。


定理1:几个数相加,如果存在一个加数,不能被数a整除,那么它们的和,就不能被整数a整除。


定理2:两数不能整除,若除数扩大(或缩小)了几倍,而被除数不变,则其商和余数也同时扩大(或缩小)相同的倍数(余数必小于除数)。


——————————pick定理
皮克定理是指一个计算点阵中顶点在格点上的多边形面积公式,该公式可以表示为2S=2a+b-2,其中a表示多边形内部的点数,b表示多边形边界上的点数,s表示多边形的面积。
——————————FFT
FFT(Fast Fourier Transformation)是离散傅氏变换(DFT)的快速算法。即为快速傅氏变换。它是根据离散傅氏变换的奇、偶、虚、实等特性,对离散傅立叶变换的算法进行改进获得的。
——————————辛普森积分
辛普森(Simpson)公式是牛顿-科特斯公式当n=2时的情形,也称为三点公式。利用区间二等分的三个点来进行积分插值。其科特斯系数分别为1/6,4/6,1/6。
设拟柱体的高(两底面α,β间的距离)为H,如果用平行于底面的平面γ去截该图形,所得到的截面面积是平面γ与平面α之间距离h的不超过3次的函数,那么该拟柱体的体积V为
V = H (S_1 + 4S_0 + S_2) /6.
式中,S_1和S_2是两底面的面积,S_0是中截面的面积(即平面γ与平面α之间距离h=H/2时得到的截面的面积)。
事实上,不光是拟柱体,其他符合条件(所有顶点都在两个平行平面上、用平行于底面的平面去截该图形时所得到的截面面积是该平面与一底之间距离的不超过3次的函数)的立体图形也可以利用该公式求体积。
——————————polya定理 burnside引理
涉及到组合数学的问题,首先是群的概念:
设G是一个集合,*是G上的二元运算,如果(G,*)满足下面的条件:
封闭性:对于任何a,b∈G,有a*b∈G;
结合律:对任何a,b,c∈G有(a*b)*c=a*(b*c);
单位元:存在e∈G,使得对所有的a∈G,都有a*e=e*a=a;
逆元:对于每个元素a∈G,存在x∈G,使得a*x=x*a=e,这个时候记x为a-1,称为a的逆元,那么则称(G,*)为一个群。
例:G={0,1,2,3,4....n-1}那么它在mod n加法下是一个群。
群元素的个数有限,称为有限群,且其中元素的个数称为阶,记为|G|,群元素的个数无限,称为无限群。
若对于群元素中的任意两个元素a,b都有ab=ba那么称G为交换群,简称Abel群。
=============================================================================================
置换:设X为一个有限集,π是X到X的一个--变换,那么称π是X上的一个置换。
例:设X={1,2,3,4....n},设π是X的一个变换,满足π:1->a1,2->a2,......n->an,其中a1,a2...an是X的一个排列,则称π是X上的一个置换。
可将π记为   1     2   ......   n    
                  a1   a2   ......a n    
同一置换用这样的表示法有n!种,但其对应的关系不变。
假设循环π只这样一个置换,满足π:a1->a2,a2->a3,.............ak->a1,但是对于其他元素保持不变,即:a->a,
可将π记为   a1     a2   ......   ak    
                  a2   a3   ......  a1     
称为k阶循环,K为循环长度。
每个置换都可以写成若干个互不相交的循环的乘积,且表示是唯一的.
如   1   2  3   4  5  6    
       2   4   5  1  3  6    ,则可以表示为(124)(35)(6),置换的循环节数是上面的循环个数,上面的例题的循环节数为3.
=============================================================================================
定义:设G是有限集X上的置换群,点a,b∈X称为"等价"的,当且仅当,存在π∈G使得π(a)=b,记为a~b,这种等价条件下,X的元素形成的等价类称为G的轨道,它是集X的一个子集,G的任意两个不同的轨道之交是空集,所以置换群G的轨道全体是集合X的一个划分,构成若干个等价类,等价类的个数记为L。
Zk (K不动置换类):设G是1…n的置换群。若K是1…n中某个元素,G中使K保持不变的置换的全体,记以Zk,叫做G中使K保持不动的置换类,简称K不动置换类。
Ek(等价类):设G是1…n的置换群。若K是1…n中某个元素,K在G作用下的轨迹,记作Ek。即K在G的作用下所能变化成的所有元素的集合。.
这个时候有:|Ek|*|Zk|=|G|成立(k=1,2,.....n)。
C(π):对于一个置换π∈G,及a∈X,若π(a)=a,则称a为π的不动点。π的不动点的全体记为C(π)。例如π=(123)(3)(45)(6)(7),X={1,2,3,4,5,6,7};那么C(π)={3,6,7}共3个元素。
Burnside引理:L=1/|G|*(Z1+Z2+Z3+Z4+......Zk)=1/|G|*(C(π1)+C(π2)+C(π3)+.....+C(πn))(其中k∈X,π∈G)。
Polya定理:设G={π1,π2,π3........πn}是X={a1,a2,a3.......an}上一个置换群,用m中颜色对X中的元素进行涂色,那么不同的涂色方案数为:1/|G|*(mC(π1)+mC(π2)+mC(π3)+...+mC(πk)). 其中C(πk)为置换πk的循环节的个数。
——————————卡特兰数
Catalan数——卡特兰数 
今天阿里淘宝笔试中碰到两道组合数学题,感觉非常亲切,但是笔试中失踪推导不出来
后来查了下,原来是Catalan数。悲剧啊,现在整理一下


一、Catalan数的定义令h(1)=1,Catalan数满足递归式:h(n) = h(1)*h(n-1) + h(2)*h(n-2) + ... + h(n-1)h(1),n>=2该递推关系的解为:h(n) = C(2n-2,n-1)/n,n=1,2,3,...(其中C(2n-2,n-1)表示2n-2个中取n-1个的组合数)
——————————斯特灵数


斯特林数出现在许多组合枚举问题中. 对第一类斯特林数 StirlingS1[n,m], 给出恰包含 m 个圈的 n 个元素 的排列数目. 斯特林数满足母函数关系 . 注意某些 的定义与 Mathematica 中的不同,差别在于因子 . 第二类斯特林数 StirlingS2[n,m]给出把 n 个可区分小球分配到m个不可区分的的盒子,且盒子没有空盒子的方法的数量. 它们满足关系 . 划分函数 PartitionsP[n]给出把整数 n 写为正整数的和,不考虑顺序的方法的数目. PartitionsQ[n]给出把整数 n 写为正整数的和,并且和中的整数是互不相同的 写法的数目
设S(p,k)是斯特林数
S(p,k)的一个组合学解释是:将p个物体划分成k个非空的不可辨别的(可以理解为盒子没有编号)集合的方法数。
S(p,k)的递推公式是:
 S(p,k) = k*S(p-1,k) + S(p-1,k-1) ,1<= k <=p-1
边界条件:
S(p,p) = 1 ,p>=0
S(p,0) = 0 ,p>=1
————————生成函数
考虑这样一个问题求解 
e1+e2+...+ek=n 
的非负整数解的总数 
单独考虑选择e1的种类数


11?x=∑∝i=0xi
xi的系数表示选择e1=i的种类数 
同理对于任意的ei
11?x=∑∝i=0xi
那么e1+e2+...+ek=n的种类数就等于


(∑∝i=0xi)?...?(∑∝i=0xi) 
=(11?x)k 
=∑(k+n?1n)xn
其中xn的系数就表示的是e1+e2+...+ek=n 
的非负整数解的总数。 
你也可以不用这种方式而用纯理论的方式来推出这个方程的非负整数解总数为


(k+n?1n)
这种生成函数多用在组合计数问题上,让我们拓展一下解决下面这个问题 
3e1+4e2+2e3=n 
的非负整数解


f(x)=(∑x3i)?∑x4i?∑x2i
因为每一个e1贡献的是3个值! 
同理如果对ei有限制的话就需要限制x的最高次幂
——————————线性规划
数学模型
(1)列出约束条件及目标函数
线性规划步骤
线性规划步骤
(2)画出约束条件所表示的可行域
(3)在可行域内求目标函数的最优解及最优值


——————————莫比乌斯反演
一:什么是莫比乌斯反演


简单点的说,就是先给出一个函数 F(n) ,然后再由 F(n)定义一个新函数 G(n)


其中   G(n) = sigma(F(d)) (其中d被“包含”于n)  


然后 现在我们不知道 F(n)的值 , 却知道 G(n), 接着我们就可以通过 反演由G(n)反向得到F(n)
——————————快速数论变换
在学习NTT之前,应当先掌握FFT(快速傅立叶变换)的基本知识,并能动手完成代码实现。如果有时间(心情)我会写一篇FFT的算法介绍。


在FFT中起到相当重要的作用的就是那个主n次单位根wn=e2iπn,一切的一切都围绕这个神奇的复数展开。但是复数的运算设计到两个double变量,浮点数的计算不仅很慢,而且经常出现精度误差。


为此我们找到了NTT作为代替,其中NTT本身是在模一个费马素数P的意义下展开的,我们设G为P的原根,会发现GP?1n具有和wn=e2iπn相似的性质,可以代替wn作为单位根。这个就不写详细证明了,反正也没什么要紧,知道这个性质的存在就好。


所以,我们现在用GP?1n代替原来的wn,继续做原来的分治过程。原本的除法全部改成乘以逆元即可。










——————————计算几何——————————


——————————线段相交、叉积运用 略
——————————多边形面积
给定多边形的顶点坐标(有序),让你来求这个多边形的面积,你会怎么做?
我们知道,任意多边形都可以分割为N个三角形,所以,如果以这为突破点,那么我们第一步就是把给定的多边形,分割为数个三角形,分别求面积,最后累加就可以了,把多边形分割为三角形的方式多种多样,在这里,我们按照如下图的方法分割:




图1
S点作为起始点(点1),a->e依次作为点2,3……。
一个三角形的面积是怎样的呢?
根据线性代数的知识,我们有如下的三角形面积公式,称之为有向面积(signed area):


http://blog.csdn.net/sun_shine_/article/details/18799739
——————————凸包
⒈对于一个集合D,D中任意有限个点的线性组合的全体称为D的凸包。
⒉对于一个集合D,所有包含D的凸集之交称为D的凸包。
可以证明,上述两种定义是等价的
概念
1  点集Q的凸包(convex hull)是指一个最小凸多边形,满足Q中的点或者在多边形边上或者在其内。右图中由红色线段表示的多边形就是点集Q={p0,p1,...p12}的凸包。
2  一组平面上的点,求一个包含所有点的最小的凸多边形,这就是凸包问题了。这可以形象地想成这样:在地上放置一些不可移动的木桩,用一根绳子把他们尽量紧地圈起来,并且为凸边形,这就是凸包了。
——————————半平面交
首先解决问题:什么是半平面? 顾名思义,半平面就是指平面的一半,我们知道,一条直线可以将平面分为两个部分,那么这两个部分就叫做两个半平面。


然后,半平面怎么表示呢? 二维坐标系下,直线可以表示为ax + by + c = 0,那么两个半平面则可以表示为ax + by + c >= 0 和ax + by + c < 0,这就是半平面的表示方法。


还有,半平面的交是神马玩意? 其实就是一个方程组,让你画出满足若干个式子的坐标系上的区域(类似于线性规划的可行域),方程组就是由类似于上面的这些不等式组成的。


另外,半平面交可以干什么? 半平面交虽然说是半平面的问题,但它其实就是关于直线的问题。一个一个的半平面其实就是一个一个有方向的直线而已。


半平面交的一个重要应用就是求多边形的核 。 多边形的核又是神马玩意?  它是平面简单多边形的核是该多边形内部的一个点集,该点集中任意一点与多边形边界上一点的连线都处于这个多边形内部。就是一个在一个房子里面放一个摄像 头,能将所有的地方监视到的放摄像头的地点的集合即为多边形的核。经常会遇到让你判定一个多边形是否有核的问题。
——————————圆的面积并
希普森积分
——————————旋转卡壳
1978年, M.I. Shamos's Ph.D. 的论文"Computational Geometry"标志着计算机科学的这一领域的诞生。 当时他发表成果的是一个寻找凸多边形直径的一个非常简单的算法, 即根据多边形的一对点距离的最大值来确定。 
后来直径演化为由一对对踵点对来确定。 Shamos提出了一个简单的 O(n) 时间的算法来确定一个凸 n 角形的对踵点对。 因为他们最多只有 3n/2 对, 直径可以在 O(n) 时间内算出。 
如同Toussaint后来提出的, Shamos的算法就像绕着多边形旋转一对卡壳。 因此就有了术语“旋转卡壳”。 1983年, Toussaint发表了一篇论文, 其中用同样的技术来解决许多问题。 从此, 基于此模型的新算法就确立了, 解决了许多问题。 
他们包括: 
计算距离
凸多边形直径
凸多边形宽
凸多边形间最大距离
凸多边形间最小距离
外接矩形
最小面积外接矩形
最小周长外接矩形
三角剖分
洋葱三角剖分
螺旋三角剖分
四边形剖分
凸多边形属性
合并凸包
找共切线
凸多边形交
临界切线
凸多边形矢量和
最薄截面
最薄横截带
——————三维凸包
题意:求三维凸包中的点到凸包的最短距离
思路:利用增量算法求出三维凸包的每个面,再用点到面的距离,暴力找出最小的距离。
三维凸包的增量法:
初始时需要一个四面体。可以先找两个不同点P1,P2,寻找和它们不共线的第三个点P3,再找不共面的第四个点P4,。如果找不到,则调用二维凸包算法。


接下来计算剩下点的随机排列。每次加一个点,有两种情况:


情况1:新点在当前凸包内部,只需简单地忽略该点,如图1所示。


情况2:新点在当前凸包外部,需要计算并的凸包,在这种情况下,首先需要计算原凸包相对于Pr的水平面,即Pr可以看到的封闭区域,如图2所示。
http://www.cnblogs.com/-sunshine/archive/2012/08/25/2656794.html
——————————仿射变换与矩阵
仿射变换是在几何上定义为两个向量空间之间的一个仿射变换或者仿射映射(来自拉丁语,affine,“和…相关”)由一个非奇异的线性变换(运用一次函数进行的变换)接上一个平移变换组成。在有限维的情况,每个仿射变换可以由一个矩阵A和一个向量b给出,它可以写作A和一个附加的列b。一个仿射变换对应于一个矩阵和一个向量的乘法,而仿射变换的复合对应于普通的矩阵乘法,只要加入一个额外的行到矩阵的底下,这一行全部是0除了最右边是一个1,而列向量的底下要加上一个1。
——————————运动规划
运动规划(Motion Planning)就是在给定的位置A 与位置 B 之间为机器人找到一条符合约束条件的路径。这个约束可以是无碰撞、路径最短、机械功最小等。具体的案例可以是为移动机器人规划出到达指定地点的最短距离,或者是为机械臂规划出一条无碰撞的运动轨迹,从而实现物体抓取等。
在数学角度而言,运动规划(Motion Planning)与路径规划(Path Planning)属于同一问题,但路径规划一般用于平面无人车/机器人的规划,问题维度较低,常用的算法也不同,所以习惯上将两者区别称呼。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值