ACMer需要掌握的算法讲解
数据产品必备技术知识:机器学习及常见算法-看这一篇就够了

数据产品必备技术知识:机器学习及常见算法,看这一篇就够了大家都知道,产品经理需要懂技术,很多面试官都偏好有技术背景的同学,毕竟产品经理经常要和开发同学相爱相杀。
当然也不是一定要求能够精通,但是至少不要让这块成为沟通的障碍,懂点技术,实际工作中也能少被开发同学“忽悠”,讲道理时不会畏手畏脚,更有底气。
对于数据产品,不仅要懂技术,还要懂更多的技术。
比如说产品都要懂:什么是程序?程序如何组装成功能?服务端客户端数据交互是咋样的?数据库是啥?里面的表、关系结构、字段、字段类型是啥?常见的技术名词如接口、同步异步、重构等等又是指啥?除了这些,数据产品还要懂数据相关的技术,比如说数据仓库,机器学习数据挖掘,大数据框架或者常用的数据开发工具hadoop、hive、spark等等这些。
所以,从某些角度而言,数据产品比其他产品门槛要更高点。
数据仓库已经写了一篇(虽然还没写完),数据产品必备技术知识:数据仓库入门,看这一篇就就够了,后面会写个进阶版。
这一篇主要梳理机器学习及常见算法。
一、什么是机器学习机器学习有下面几种定义:机器学习是一门人工智能的科学,该领域的主要研究对象是人工智能,特别是如何在经验学习中改善具体算法的性能。
机器学习是对能通过经验自动改进的计算机算法的研究。
机器学习是用数据或以往的经验,以此优化计算机程序的性能标准。
上述来自维基百科,有点晦涩。
机器学习是一种通过利用数据,训练出模型,然后使用模型预测的一种方法。
其实这个过程,一个成语就可概括:举一反三。
此处以高考为例,高考的题目在上考场前我们未必做过,但在高中三年我们做过很多很多题目,懂解题方法,因此考场上面对陌生问题也可以算出答案。
机器学习的思路也类似:我们能不能利用一些训练数据(已经做过的题),使机器能够利用它们(解题方法)分析未知数据(高考的题目)?事实上,机器学习的一个主要目的,就是把人类思考归纳经验的过程,转化为计算机通过对数据的处理计算得出模型的过程。
全国计算机等级考试二级公共基础知识课件

二级ACCESS培训讲义
顺序存储结构,将逻辑上相邻的数据元素存储在物理上相邻的存储单元里 ,具有以下特点: (1)随机存取。 (2)作插入或删除操作时,需移动大量元素。 (3)长度变化较大时,需按最大空间分配。 (4)表的容量难以扩充。
通常定义一个一维数组来表示线性表的顺序存储空间。
二级ACCESS培训讲义
二级ACCESS培训讲义
例:计算机文件管理系统也是典型的树形结构
二级ACCESS培训讲义
②图形结构——结点间的连结是任意的
例:数据结构B(D,R)
1
D={ 1 , 2 , 3 , 4}
R={(1,2) , (1,3) , (1,4) , 2
(2,3), (3,4) , (2,4) }
4 3
例:数据结构C(D,R)
二级ACCESS培训讲义 例如,同样是一年四季的数据结构,若用图形方法表示则如图所示。
春
夏
秋
冬
数据的逻辑结构一般分为两种:线性结构和非线性结构。
线性结构:有且只有一个根结点;每一个结点最多有一个前件,也最多有
一个后件。如:一年四季。
非线性结构:线性以外的数据结构。如:反映家庭成员间辈分关系的数据
二级ACCESS培训讲义
A.二元关系表示方法:一个数据结构可以表示为B=(D、R),其中R用二 元组来表示(a、b)。 a表示前件, b表示后件。 例如,一年四季的数据结构可以表示成: B=(D、R) D={春,夏,秋,冬} R={(春,夏),(夏,秋),(秋,冬)}
B.在图形表示方法中,用中间标有元素值的方框来表示数据元素,称为数据 结点,简称为结点;用一条有向线段从前件结点指向后件结点(注意:有 时可以省略箭头)来表示元素之间的前后关系。
ICPC介绍

28
ACMer —— 图算法
(1)图的深度优先遍历和广度优先遍历. (2)最短路径算法 poj1860,poj3259,poj1062,poj2253,poj1125, poj2240 (3)最小生成树算法 poj1789,poj2485,poj1258,poj3026 (4)拓扑排序 poj1094
合肥工业大学 计算机与信息学院
10
合肥工业大学 计算机与信息学院
11
ACM-ICPC比赛形式 比赛形式
组队参赛的形式,由三名队员组成一支队伍参赛。 组队参赛的形式,由三名队员组成一支队伍参赛。比赛 时三名队员只使用一台电脑
比赛时间为5个小时。比赛题目为8~12道不等, 比赛时间为5个小时。比赛题目为8~12道不等,全英文 8~12道不等 可以带纸质资料。 可以带纸质资料。 选手们必须根据题目内容设计算法, 选手们必须根据题目内容设计算法,并完成相应的功能 要求,要么全对,要么不对, 要求,要么全对,要么不对,没有中间结果
ACM/ICPC介绍及队员选拔培 介绍及队员选拔培 训机制
徐本柱 2011年 2011年5月
合肥工业大学 计算机与信息学院
1
内容提要
一、ICPC介绍 介绍 二、ICPC队员选拔和培训机制 队员选拔和培训机制 三、ACMer基础知识 基础知识
合肥工业大学 计算机与信息学院
2
内容提要
一、ICPC介绍 介绍 二、ICPC队员选拔和培训机制 队员选拔和培训机制 三、ACMer基础知识 基础知识
合肥工业大学 计算机与信息学院
16
ICPC比赛环境
OS:Linux(常用Ubuntu), 偶见Windows Judge:PC^2 /pc2/ Program:C++,C,Java
AC算法学习笔记

AC算法学习笔记1、算法流程图(1) void Init()此函数是初始化函数,⽤来给fail数组和goto数组初始化值。
(2) void GotoFunction(string x)这个函数的作⽤是⽣成有限⾃动机状态转移图。
(3) void FailFunction(int target,int k)这是fail函数,核⼼内容是求出每个状态的fail值。
(4) void UpdateOutput()这是update输出函数。
其作⽤是更新每个状态的输出值。
(5)void Check(string x)这个是check函数,其作⽤是判断改状态下output函数是否有输出,如果有输出就输出相应状态下的字符串。
并且决定该状态接受输⼊之后的去向,如果fail,则调⽤该状态的fail 函数来决定去向。
(6)int main()主函数,整个过程的⼊⼝。
2、⾃动机所定义的数据结构及其功能(1) int Goto[M][26];goto数组是状态机状态的载体,内部存储着本次实验的全部状态。
起始状态为0,之后每获得⼀个有效输⼊就⽣成⼀个新的状态。
但是在⽣成状态之前要进⾏检验,看是否已经存在本次状态。
(2) int Fail[M];fail数组存储的是该状态获得输⼊后,如果结果为fail之后的转向状态。
(3) string Output[M];output数组是⼀个字符串数组,存储的是以该状态为终结状态的字符串。
当然,字符串不唯⼀,AC算法的核⼼任务之⼀就是找到每个状态为终结状态时候的全部输出字符串。
(4) string Depth[M];depth数组⽤来标⽰该状态在第⼏层。
我们在此次实验中将goto函数创建的状态看作⼀个树,因此必然需要⼀个数组来指明树中的节点所在的层数。
3、转向函数、失效函数、输出函数的构建过程(1)转向函数我们⾸先来看其伪代码:结合伪代码和刚才的函数流程图,我们可以看出转向函数⾸先对数组进⾏初始化。
ACM超级经典算法大集合

超级经典算法大集合:老掉牙河内塔费式数列巴斯卡三角形三色棋老鼠走迷官(一)老鼠走迷官(二)骑士走棋盘八个皇后八枚银币生命游戏字串核对双色、三色河内塔背包问题(KnapsackProblem)数、运算蒙地卡罗法求PI Eratosthenes筛选求质数超长整数运算(大数运算)长PI最大公因数、最小公倍数、因式分解完美数阿姆斯壮数最大访客数中序式转后序式(前序式)后序式的运算关于赌博洗扑克牌(乱数排列)Craps赌博游戏约瑟夫问题(JosephusProblem)集合问题排列组合格雷码(GrayCode)产生可能的集合m元素集合的n个元素子集数字拆解排序得分排行选择、插入、气泡排序Shell 排序法- 改良的插入排序Shaker 排序法-改良的气泡排序Heap 排序法- 改良的选择排序快速排序法(一)快速排序法(二)快速排序法(三)合并排序法基数排序法搜寻循序搜寻法(使用卫兵)二分搜寻法(搜寻原则的代表)插补搜寻法费氏搜寻法矩阵稀疏矩阵多维矩阵转一维矩阵上三角、下三角、对称矩阵奇数魔方阵4N 魔方阵2(2N+1) 魔方阵1.河内之塔说明河内之塔(Towers of Hanoi)是法国人M.Claus(Lucas)于1883年从泰国带至法国的,河内为越战时北越的首都,即现在的胡志明市;1883年法国数学家Edouard Lucas曾提及这个故事,据说创世纪时Benares有一座波罗教塔,是由三支钻石棒(Pag)所支撑,开始时神在第一根棒上放置64个由上至下依由小至大排列的金盘(Disc),并命令僧侣将所有的金盘从第一根石棒移至第三根石棒,且搬运过程中遵守大盘子在小盘子之下的原则,若每日仅搬一个盘子,则当盘子全数搬运完毕之时,此塔将毁损,而也就是世界末日来临之时。
解法如果柱子标为ABC,要由A搬至C,在只有一个盘子时,就将它直接搬至C,当有两个盘子,就将B当作辅助柱。
如果盘数超过2个,将第三个以下的盘子遮起来,就很简单了,每次处理两个盘子,也就是:A->B、A ->C、B->C这三个步骤,而被遮住的部份,其实就是进入程式的递回处理。
acm中dp问题简单入门讲解

ACM暑期集训报告院系:专业:年级:学号:姓名:日期:西南交通大学目录目录.................................................. 错误!未定义书签。
第1章动态计划(dp) ............................ 错误!未定义书签。
简介.................................................... 错误!未定义书签。
教师内容................................................ 错误!未定义书签。
大体dp——背包问题..................................... 错误!未定义书签。
假设干经典dp及常见优化.................................. 错误!未定义书签。
类似题目................................................. 错误!未定义书签。
参考文献........................................... 错误!未定义书签。
附录1 暑期集训心得体会............................. 错误!未定义书签。
第1章动态计划(dp)(题目采纳2号黑体居中,下空1行)简介(题目采纳四号黑体,正文内容采纳小四号字体,倍行距)在解决问题的时候咱们常常碰到这种问题:在多种方式的操作下咱们如何取得一个最优的方式让咱们取得中意的结果。
这时咱们大多人的思想确实是贪婪。
不错贪婪确实是一个不错的算法,第一他简单容易想到,咱们在操作起来也比较容易。
此刻我推荐几道咱们oj上的贪婪算法的题:soj1562药品运输 soj1585 Climbing mountain。
为了引入动归算法我先拿药品运输这道题简单说一下贪婪算法。
例如1:药品运输(题目采纳小四号Times New Roman字体)Description大地震后,某灾区急需一批药品,此刻有N种药品需要运往灾区,而咱们的运输能力有限,此刻仅有M辆运输车用来运输这批药品,已知不同的药品对灾区具有不同的作用(“作用”用一个整数表示其大小),不同的药品需要的运输力(必要的车辆运载力)不同,而不同的车辆也具有不同的运输力。
也能做精算actuar

用R也能做精算—actuar包学习笔记(三)李皞(中国人民大学统计学院风险管理与精算)3 风险理论本部分主要介绍风险理论中的聚合风险模型。
在机动车保险中,对于一辆或一批机动车,其每年发生的事故次数服从一个离散分布,每次事故的损失金额服从一个离连续分布。
那么,这一年总的损失额可以表示为:(1)可以看出是一个随机和,我们把事故次数的分布称作索赔频率分布(frequencydistribution),每次损失额的分布称作索赔强度分布(severity distribution),的分布称为复合分布(compound distribution)。
上一小节讲如何估计分布的参数,假设我们已经将频率分布和强度分布的参数估计出来了,那么现在的问题就是如何得到总损失额的分布,事实上,就保险公司的整体运营来讲,精算师可能更关心这个分布。
对于的分布,我们有:(2)其中,是频率分布,是强度分布,是强度分布的n重卷积。
如果随机变量仅在0,1,2…取值,那么n重卷积的计算方法如下:(3)3.1 连续分布的离散化为什么要对连续分布进行离散化?通常我们假设索赔强度分布是连续分布,虽然理论上可以这么讲,但是实际操作中通常会采用一些数值计算方法来计算复合分布,这些方法要求索赔强度具有离散的分布,因此需要对现有的连续分布进行离散化处理。
在某种程度上,离散化更加接近实际,比如损失额通常是整数倍的货币单位。
所谓离散化就是将连续分布的支集区域划分为若干小区域,然后以这个区域中的某一个点代替原来连续分布在这片区域的取值概率。
这个“代表点”可以是这个区域的左右端点,也可以是区域中点。
此外,通常只对分布的“主体”进行离散化,什么叫做分布的“主体”?以正态分布为例,其分布的支集为,显然不可能对其所有取值范围进行离散化,由于正态分布在两侧的取值概率很小,可以忽略不计,我们于是可以以均值为中心,以若干倍标准差为半径划定一个区域,在这个区域上进行离散化,这个区域上的分布函数就是该分布的“主体”,区域的大小则依赖于研究的精确程度。
AC算法详解

一、概述AC算法是一个经典的多模式匹配算法,可以保证对于给定的长度为n的文本,和模式集合P{p1,p2,...pm},在O(n)时间复杂度内,找到文本中的所有目标模式,而与模式集合的规模m无关。
要理解AC算法,仍然需要对KMP算法的透彻理解。
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自动机的失败指针具有同样的功能,也就是说当我们的模式串在Tire上进行匹配时,如果与当前节点的关键字不能继续匹配的时候,就应该去当前节点的失败指针所指向的节点继续进行匹配。
算法就是这样应用有限自动机巧妙地将字符比较转化为了状态转移。
此算法有两个特点,一个是扫描文本时完全不需要回溯,另一个是时间复杂度为O(n),时间复杂度与关键字的数目和长度无关,但所需时间和文本长度以及所有关键字的总长度成正比。
AC算法有三个主要步骤,一个是字典树tire的构造(即构造转向函数),一个是搜索路径的确定(即构造失败函数),还有就是模式匹配过程。
二、AC算法思想算法的基本思想是这样的:●在预处理阶段,AC自动机算法建立了三个函数,转向函数goto,失效函数failure和输出函数output,由此构造了一个树型有限自动机。
●在搜索查找阶段,则通过这三个函数的交叉使用扫描文本,定位出关键字在文本中的所有出现位置。
下图是多模式{he, she, his ,hers}构成的一个确定性有限状态机,做几点说明:图 2.11、该状态机优先按照实线标注的状态转换路径进行转换,当所有实线标注的状态转换路径条件不能满足时,按照虚线的状态转换路径进行状态转换。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
ACM主要算法介绍初期篇一、基本算法(1)枚举(poj1753, poj2965)(2)贪心(poj1328, poj2109, poj2586)(3)递归和分治法(4)递推(5)构造法(poj3295)(6)模拟法(poj1068, poj2632, poj1573, poj2993, poj2996)二、图算法(1)图的深度优先遍历和广度优先遍历(2)最短路径算法(dijkstra, bellman-ford, floyd, heap+dijkstra)(poj1860, poj3259, poj1062, poj2253, poj1125, poj2240)(3)最小生成树算法(prim, kruskal)(poj1789, poj2485, poj1258, poj3026)(4)拓扑排序(poj1094)(5)二分图的最大匹配(匈牙利算法)(poj3041, poj3020)(6)最大流的增广路算法(KM算法)(poj1459, poj3436)三、数据结构(1)串(poj1035, poj3080, poj1936)(2)排序(快排、归并排(与逆序数有关)、堆排)(poj2388, poj2299)(3)简单并查集的应用(4)哈希表和二分查找等高效查找法(数的Hash, 串的Hash)(poj3349, poj3274, POJ2151, poj1840, poj2002, poj2503)(5)哈夫曼树(poj3253)(6)堆(7)trie树(静态建树、动态建树)(poj2513)四、简单搜索(1)深度优先搜索(poj2488, poj3083, poj3009, poj1321, poj2251)(2)广度优先搜索(poj3278, poj1426, poj3126, poj3087, poj3414)(3)简单搜索技巧和剪枝(poj2531, poj1416, poj2676, 1129)五、动态规划(1)背包问题(poj1837, poj1276)(2)型如下表的简单DP(可参考lrj的书page149):1.E[j]=opt{D+w(i,j)} (poj3267, poj1836, poj1260, poj2533)2.E[i,j]=opt{D[i-1,j]+xi,D[i,j-1]+yj,D[i-1][j-1]+zij} (最长公共子序列)(poj3176, poj1080, poj1159)3.C[i,j]=w[i,j]+opt{C[i,k-1]+C[k,j]} (最优二分检索树问题)六、数学(1)组合数学1.加法原理和乘法原理2.排列组合3.递推关系(poj3252, poj1850, poj1019, poj1942)(2)数论1.素数与整除问题2.进制位3.同余模运算(poj2635, poj3292, poj1845, poj2115)(3)计算方法1.二分法求解单调函数相关知识(poj3273, poj3258, poj1905, poj3122)七、计算几何学(1)几何公式(2)叉积和点积的运用(如线段相交的判定,点到线段的距离等)(poj2031, poj1039)(3)多边型的简单算法(求面积)和相关判定(点在多边型内,多边型是否相交)(poj1408, poj1584)(4)凸包(poj2187, poj1113)中级篇一、基本算法(1)C++的标准模版库的应用(poj3096, poj3007)(2)较为复杂的模拟题的训练(poj3393, poj1472, poj3371, poj1027,poj2706)二、图算法(1)差分约束系统的建立和求解(poj1201, poj2983)(2)最小费用最大流(poj2516, poj2195)(3)双连通分量(poj2942)(4)强连通分支及其缩点(poj2186)(5)图的割边和割点(poj3352)(6)最小割模型、网络流规约(poj3308)三、数据结构(1)线段树(poj2528, poj2828, poj2777, poj2886, poj2750)(2)静态二叉检索树(poj2482, poj2352)(3)树状树组(poj1195, poj3321)(4)RMQ(poj3264, poj3368)(5)并查集的高级应用(poj1703, 2492)(6)KMP算法(poj1961, poj2406)四、搜索(1)最优化剪枝和可行性剪枝(2)搜索的技巧和优化(poj3411, poj1724)(3)记忆化搜索(poj3373, poj1691)五、动态规划(1)较为复杂的动态规划(如动态规划解特别的施行商问题等)(poj1191, poj1054, poj3280, poj2029, poj2948, poj1925, poj3034)(2)记录状态的动态规划(poj3254, poj2411, poj1185)(3)树型动态规划(poj2057, poj1947, poj2486, poj3140)六、数学(1)组合数学1.容斥原理2.抽屉原理3.置换群与Polya定理(poj1286, poj2409, poj3270, poj1026)4.递推关系和母函数(2)数学1.高斯消元法(poj2947, poj1487, poj2065, poj1166, poj1222)2.概率问题(poj3071, poj3440)3.GCD、扩展的欧几里德(中国剩余定理)(poj3101)(3)计算方法1.0/1分数规划(poj2976)2.三分法求解单峰(单谷)的极值3.矩阵法(poj3150, poj3422, poj3070)4.迭代逼近(poj3301)(4)随机化算法(poj3318, poj2454)(5)杂题(poj1870, poj3296, poj3286, poj1095)七、计算几何学(1)坐标离散化(2)扫描线算法(例如求矩形的面积和周长,并常和线段树或堆一起使用)(poj1765, poj1177, poj1151, poj3277, poj2280, poj3004)(3)多边形的内核(半平面交)(poj3130, poj3335)(4)几何工具的综合应用(poj1819, poj1066, poj2043, poj3227, poj2165, poj3429)高级篇一、基本算法要求(1)代码快速写成,精简但不失风格(poj2525, poj1684, poj1421,poj1048, poj2050, poj3306)(2)保证正确性和高效性(poj3434)二、图算法(1)度限制最小生成树和第K最短路(poj1639)(2)最短路,最小生成树,二分图,最大流问题的相关理论(主要是模型建立和求解)(poj3155, poj2112, poj1966, poj3281, poj1087, poj2289, poj3216, poj2446)(3)最优比率生成树(poj2728)(4)最小树形图(poj3164)(5)次小生成树(6)无向图、有向图的最小环三、数据结构(1)trie图的建立和应用(poj2778)(2)LCA和RMQ问题(LCA(最近公共祖先问题),有离线算法(并查集+dfs)和在线算法(RMQ+dfs))(poj1330)(3)双端队列和它的应用(维护一个单调的队列,常常在动态规划中起到优化状态转移的目的)(poj2823)(4)左偏树(可合并堆)(5)后缀树(非常有用的数据结构,也是赛区考题的热点)(poj3415,poj3294)四、搜索(1)较麻烦的搜索题目训练(poj1069, poj3322, poj1475, poj1924,poj2049, poj3426)(2)广搜的状态优化:利用M进制数存储状态、转化为串用hash表判重、按位压缩存储状态、双向广搜、A*算法(poj1768, poj1184, poj1872, poj1324, poj2046, poj1482)(3)深搜的优化:尽量用位运算、一定要加剪枝、函数参数尽可能少、层数不易过大、可以考虑双向搜索或者是轮换搜索、IDA*算法(poj3131, poj2870, poj2286)五、动态规划(1)需要用数据结构优化的动态规划(poj2754, poj3378, poj3017)(2)四边形不等式理论(3)较难的状态DP(poj3133)六、数学(1)组合数学1.MoBius反演(poj2888, poj2154)2.偏序关系理论(2)博奕论1.极大极小过程(poj3317, poj1085)2.Nim问题七、计算几何学(1)半平面求交(poj3384, poj2540)(2)可视图的建立(poj2966)(3)点集最小圆覆盖(4)对踵点(poj2079)八、综合题(poj3109, poj1478, poj1462, poj2729, poj2048, poj3336, poj3315, poj2148, poj1263)附录:POJ是“北京大学程序在线评测系统”(Peking University Online Judge)的缩写,是个提供编程题目的网站,兼容Pascal、C、C++、Java、Fortran等多种语言。
“北京大学程序在线评测系统”是一个免费的公益性网上程序设计题库,网址为/及/JudgeOnline,它包含2000多道饶有趣味的程序设计题,题目大部分来自ACM国际大学生程序设计竞赛,很多题目就反映工作和生活中的实际问题。
用户可以针对某个题目编写程序并提交,让POJ自动判定程序的对错,几秒之内即可知道对还是错。
ACM算法列表ACM所有算法数据结构∙栈,队列,链表∙哈希表,哈希数组∙堆,优先队列双端队列可并堆左偏堆∙二叉查找树Treap伸展树∙并查集集合计数问题二分图的识别∙平衡二叉树∙二叉排序树∙线段树一维线段树二维线段树∙树状数组一维树状数组N维树状数组∙字典树∙后缀数组,后缀树∙块状链表∙哈夫曼树∙桶,跳跃表∙Trie树(静态建树、动态建树)∙AC自动机∙LCA和RMQ问题KMP算法图论∙基本图算法图广度优先遍历深度优先遍历拓扑排序割边割点强连通分量Tarjan算法双连通分量强连通分支及其缩点图的割边和割点最小割模型、网络流规约2-SAT问题欧拉回路哈密顿回路最小生成树Prim算法Kruskal算法(稀疏图) Sollin算法次小生成树第k小生成树最优比例生成树最小树形图最小度限制生成树平面点的欧几里德最小生成树平面点的曼哈顿最小生成树最小平衡生成树∙最短路径有向无环图的最短路径->拓扑排序非负权值加权图的最短路径->Dijkstra算法(可使用二叉堆优化)含负权值加权图的最短路径->Bellmanford算法含负权值加权图的最短路径->Spfa算法(稠密带负权图中SPFA的效率并不如Bellman-Ford高)全源最短路弗洛伊德算法Floyd全源最短路Johnson算法次短路径第k短路径差分约束系统平面点对的最短路径(优化)双标准限制最短路径∙最大流增广路->Ford-Fulkerson算法预推流Dinic算法有上下界限制的最大流节点有限制的网络流无向图最小割->Stoer-Wagner算法有向图和无向图的边不交路径Ford-Fulkerson迭加算法含负费用的最小费用最大流∙匹配Hungary算法最小点覆盖最小路径覆盖最大独立集问题二分图最优完备匹配Kuhn-Munkras算法不带权二分匹配:匈牙利算法带权二分匹配:KM算法一般图的最大基数匹配一般图的赋权匹配问题∙拓扑排序∙弦图稳定婚姻问题搜索∙广搜的状态优化利用M进制数存储状态转化为串用hash表判重按位压缩存储状态双向广搜A*算法∙深搜的优化位运算剪枝函数参数尽可能少层数不易过大双向搜索或者是轮换搜索IDA*算法记忆化搜索动态规划∙四边形不等式理论∙不完全状态记录青蛙过河问题利用区间dp∙背包类问题0-1背包,经典问题无限背包,经典问题判定性背包问题带附属关系的背包问题+ -1背包问题双背包求最优值构造三角形问题带上下界限制的背包问题(012背包)线性的动态规划问题积木游戏问题决斗(判定性问题)圆的最大多边形问题统计单词个数问题棋盘分割日程安排问题最小逼近问题(求出两数之比最接近某数/两数之和等于某数等等)方块消除游戏(某区间可以连续消去求最大效益)资源分配问题数字三角形问题漂亮的打印邮局问题与构造答案最高积木问题两段连续和最大2次幂和问题N个数的最大M段子段和交叉最大数问题∙判定性问题的dp(如判定整除、判定可达性等)模K问题的dp特殊的模K问题,求最大(最小)模K的数变换数问题∙单调性优化的动态规划1-SUM问题2-SUM问题序列划分问题(单调队列优化)∙剖分问题(多边形剖分/石子合并/圆的剖分/乘积最大)凸多边形的三角剖分问题乘积最大问题多边形游戏(多边形边上是操作符,顶点有权值)石子合并(N^3/N^2/NLogN各种优化)∙贪心的动态规划最优装载问题部分背包问题乘船问题贪心策略双机调度问题Johnson算法∙状态dp牛仔射击问题(博弈类)哈密顿路径的状态dp两支点天平平衡问题一个有向图的最接近二部图树型dp完美服务器问题(每个节点有3种状态)小胖守皇宫问题网络收费问题树中漫游问题树上的博弈树的最大独立集问题树的最大平衡值问题构造树的最小环数学数论∙中国剩余定理∙欧拉函数∙欧几里得定理∙欧几里德辗转相除法求GCD(最大公约数)∙扩展欧几里得∙大数分解与素数判定∙佩尔方程∙同余定理(大数求余)∙素数测试一千万以内:筛选法一千万以外:米勒测试法∙连分数逼近∙因式分解∙循环群生成元∙素数与整除问题∙进制位.同余模运算组合数学∙排列组合∙容斥原理∙递推关系和生成函数∙Polya计数法Polya计数公式Burnside定理∙N皇后构造解∙幻方的构造∙满足一定条件的hamilton圈的构造∙Catalan数∙Stirling数∙斐波拉契数∙调和数∙连分数∙MoBius反演∙偏序关系理论加法原理和乘法原理计算几何∙基本公式叉乘点乘常见形状的面积、周长、体积公式坐标离散化∙线段判断两线段(一直线、一线段)是否相交求两线段的交点∙多边形判定凸多边形,顶点按顺时针或逆时针给出,(不)允许相邻边共线判点在凸多边形内或多边形边上,顶点按顺时针或逆时针给出判点在凸多边形内,顶点按顺时针或逆时针给出,在多边形边上返回0判点在任意多边形内,顶点按顺时针或逆时针给出判线段在任意多边形内,顶点按顺时针或逆时针给出,与边界相交返回1多边形重心多边形切割(半平面交)扫描线算法多边形的内核∙三角形内心外心重心垂心费马点∙圆判直线和圆相交,包括相切判线段和圆相交,包括端点和相切判圆和圆相交,包括相切计算圆上到点p最近点,如p与圆心重合,返回p本身计算直线与圆的交点,保证直线与圆有交点计算线段与圆的交点可用这个函数后判点是否在线段上计算圆与圆的交点,保证圆与圆有交点,圆心不重合计算两圆的内外公切线计算线段到圆的切点点集最小圆覆盖∙可视图的建立∙对踵点经典问题平面凸包三维凸包Delaunay剖分和Voronoi图计算方法∙二分法二分法求解单调函数相关知识用矩阵加速的计算∙迭代法∙三分法∙解线性方程组LUP分解高斯消元∙解模线性方程组∙定积分计算∙多项式求根∙周期性方程∙线性规划∙快速傅立叶变换∙随机算法∙0/1分数规划∙三分法求解单峰(单谷)的极值∙迭代逼近矩阵法博弈论极大极小过程Nim问题。