数学建模十大经典算法( 数学建模必备资料)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
建模十大经典算法
1、蒙特卡罗算法。
该算法又称随机性模拟算法,是通过计算机仿真来解决问题的算法,同时通过模拟可以来检验自己模型的正确性。
2、数据拟合、参数估计、插值等数据处理算法。
比赛中通常会遇到大量的数据需要处理,而处理数据的关键就在于这些算法,通常使用Matlab作为工具。
3、线性规划、整数规划、多元规划、二次规划等规划类问题。
建模竞赛大多数问题属于最优化问题,很多时候这些问题可以用数学规划算法来描述,通常使用Lindo、Lingo、MATLAB软件实现。
4、图论算法。
这类算法可以分为很多种,包括最短路、网络流、二分图等算法,涉及到图论的问题可以用这些方法解决,需要认真准备。
5、动态规划、回溯搜索、分治算法、分支定界等计算机算法。
这些算法是算法设计中比较常用的方法,很多场合可以用到竞赛中。
6、最优化理论的三大非经典算法:模拟退火法、神经网络、遗传算法。
这些问题是用来解决一些较困难的最优化问题的算法,对于有些问题非常有帮助,但是算法的实现比较困难,需慎重使用。
7、网格算法和穷举法。
网格算法和穷举法都是暴力搜索最优点的算法,在很多竞赛题中有应用,当重点讨论模型本身而轻视算法的时候,可以使用这种暴力方案,最好使用一些高级语言作为编程工具。
8、一些连续离散化方法。
很多问题都是实际来的,数据可以是连续的,而计算机只认的是离散的数据,因此将其离散化后进行差分代替微分、求和代替积分等思想是非常重要的。
9、数值分析算法。
如果在比赛中采用高级语言进行编程的话,那一些数值分析中常用的算法比如方程组求解、矩阵运算、函数积分等算法就需要额外编写库函数进行调用。
10、图象处理算法。
赛题中有一类问题与图形有关,即使与图形无关,论文中也应该要不乏图片的,这些图
形如何展示以及如何处理就是需要解决的问题,通常使用Matlab进行处理。
历年全国数学建模试题及解法
赛题解法
93A非线性交调的频率设计拟合、规划
93B足球队排名图论、层次分析、整数规划
94A逢山开路图论、插值、动态规划
94B锁具装箱问题图论、组合数学
95A飞行管理问题非线性规划、线性规划
95B天车与冶炼炉的作业调度动态规划、排队论、图论
96A最优捕鱼策略微分方程、优化
96B节水洗衣机非线性规划
97A零件的参数设计非线性规划
97B截断切割的最优排列随机模拟、图论
98A一类投资组合问题多目标优化、非线性规划
98B灾情巡视的最佳路线图论、组合优化
99A自动化车床管理随机优化、计算机模拟
99B钻井布局0-1规划、图论
00A DNA序列分类模式识别、Fisher判别、人工神经网络00B钢管订购和运输组合优化、运输问题
01A血管三维重建曲线拟合、曲面重建
01B 公交车调度问题多目标规划
02A车灯线光源的优化非线性规划
02B彩票问题单目标决策
03A SARS的传播微分方程、差分方程
03B 露天矿生产的车辆安排整数规划、运输问题
04A奥运会临时超市网点设计统计分析、数据处理、优化
04B电力市场的输电阻塞管理数据拟合、优化
05A长江水质的评价和预测预测评价、数据处理
05B DVD在线租赁随机规划、整数规划
06A 出版资源配置
06B 艾滋病疗法的评价及疗效的预测 07A 中国人口增长预测 07B 乘公交,看奥运 多目标规划 数据处理 图论 08A 数码相机定位 08B 高等教育学费标准探讨
09A 制动器试验台的控制方法分析 09B 眼科病床的合理安排 动态规划 10A 10B
赛题发展的特点:
1.对选手的计算机能力提出了更高的要求:赛题的解决依赖计算机,题目的数据较多,手工计算不能完成,如03B ,某些问题需要使用计算机软件,01A 。
问题的数据读取需要计算机技术,如00A (大数据),01A (图象数据,图象处理的方法获得),04A (数据库数据,数据库方法,统计软件包)。
计算机模拟和以算法形式给出最终结果。
2.赛题的开放性增大 解法的多样性,一道赛题可用多种解法。
开放性还表现在对模型假设和对数据处理上。
3.试题向大规模数据处理方向发展
4.求解算法和各类现代算法的融合
从历年竞赛题来看,常用的方法:
线性规划 整数规划 非线性规划 动态规划 层次分析法 图论方法 拟合方法 插值方法 随机方法 微分方程方法
各种算法的详解
一、蒙特卡洛算法
1、含义的理解
以概率和统计理论方法为基础的一种计算方法。
也称统计模拟方法,是指使用随机数(或更常见的伪随机数)来解决很多计算问题的方法,它是将所求解的问题同一定的概率模型相联系,用计算机实现统计模拟或抽样,以获得问题的近似解。
2、算法实例(有很多相似的例题,包括平行线等)
在数值积分法中,利用求单位圆的1/4的面积来求得Pi/4从而得到Pi 。
单位圆的1/4面积是一个扇形,它是边长为1单位正方形的一部分。
只要能求出扇形面积S1在正方形面积S 中占的比例K=S1/S 就立即能得到S1,从而得到Pi 的值。
怎样求出扇形面积在正方形面积中占的比例K 呢?一个办法是在正方形中随机投入很多点,使所投的点落在正方形中每一个位置的机会相等看其中有多少个点落在扇形内。
将落在扇形内的点数m 与所投点的总数n 的比m/n 作为k 的近似值。
P 落在扇形内的充要条件是 2
2
1x y +≤ 。
已知:K=
1s s ,K ≈m n ,s=1,s1=4
Pi ,求Pi 。
由1s m s n ≈,知s1≈*m s n =m n , 而s1=4
Pi ,则Pi=*4m n
程序:(该算法可以修改后用Mathematica 计算或者Matlab )
/* 利用蒙特卡洛算法近似求圆周率Pi*/ /*程序使用:VC++6.0 */ #include<stdio.h> #include<math.h> #include<stdlib.h>
#define COUNT 800 /*循环取样次数,每次取样范围依次变大*/ void main() {
double x,y; int num=0; int i;
for(i=0;i<COUNT;i++) {
x =rand()*1.0/RAND_MAX;/*RAND_MAX=32767,包含在<stdio.h>中*/ y =rand()*1.0/RAND_MAX; i f((x*x+y*y)<=1)
num++; /*统计落在四分之一圆之内的点数*/ }
printf("Pi 值等于:%f\n",num*4.0/COUNT); }
结果:
循环取样次数 求得的Pi 值 800 3.085000 8000 3.110000 80000 3.135200 800000 3.139150 8000000
3.141393
如果加入程序:srand(time(NULL)); ,同时循环取样次数一定,让取样结果随时间变化,当取样次数为80000000时,可得6次的结果显示:
3.141290 3.141400 3.141268 3.141484 3.141358 3.141462 3、应用的范围
蒙特·卡罗方法在金融工程学,宏观经济学,计算物理学(如粒子输运 计算、量子热力学计算、空气动力学计算)等领域应用广泛。
4、参考书籍
[1]蒙特卡罗方法及其在粒子输运问题中的应用 [2]蒙特卡罗方法引论
二、数据拟合、参数估计、插值等数据处理算法
(1)数据拟合
在Mathematica 中,用Fit 对数据进行最小二乘拟合:Fit[data ,funs ,vars ] 在Matlab 中,工具箱(toolboxes )中有曲线拟合工具(curve Fitting )。
实例:
2010年苏北赛B 题 温室中的绿色生态臭氧病虫害防治 中关于中华稻蝗密度与水稻减产率之间的关系可以通过数据拟合来观察(简单举例,没有考虑全部数据)
程序(Mathematica ):
data={{3,2.4},{10,12.9},{20,16.3},{30,20.1},{40,26.8}}; a1=Fit[data,{1,x,x^2,x^3},x]
Show[ListPlot[data,Filling->Axis],Plot[{a1},{x,0,60}]] 结果:
-3.68428+2.38529 x-0.0934637 x 2+0.00132433 x 3
(2)参数估计(参考书:概率论与数理统计)
参数估计为统计推断的基本问题,分为点估计和区间估计。
点估计: ①矩估计法
X 连续型随机变量,概率密度12
(;,,)n f x θθθ
X 为离散型随机变量 分布律12{}(;,,
,)k P X x p x θθθ==
12,,,k θθθ为待估参数,12,,n X X X 是来自X 的样本,假设总体X 的前k 阶矩存在,为
12
()(;,,)l
l l n E X x f x dx μθθθ∞
-∞
==⎰(X 连续型)
或1
2
()(;,,
,)X
l
l
l k x R E X x p x μθθθ∈==
∑(X 离散型)1,2,,l k =(其中X R 是X 可能取
值的范围)。
一般来说,它们是12,,,k θθθ的函数。
基于样本矩1
1n l
l i i A X n ==∑依概率收敛
于相应的总体矩(1,2,
)l l k μ=,样本矩的连续函数依概率收敛于相应的总体矩的连续函
数,我们就用样本矩作为相应的总体矩的估计量,而以样本矩的连续函数作为相应的总体矩的连续函数的估计量。
这种估计方法成为矩估计法。
②最大似然估计法
X 连续型随机变量 似然函数 121
()(,,,;)(;)n n i i L L x x x f x θθθ===∏ 其中1
(;)
n
i i f x θ=∏是来自X 的样本12,,
n X X X 的联合密度。
X 为离散型随机变量 似然函数121
()(,,
,;)(;),n
n i i L L x x x p x θθθθ===∈Θ∏ 其中
1
(;)n
i
i p x θ=∏是来自X 的样本1
2
,,
n X X
X 的联合分布律。
若1212
ˆ()(,,
,;)max (,,,;)n n L L x x x L x x x θθθθ∈Θ
==
则称12ˆ(,,,)n x x x θ为θ的最大似然估计值,称12
ˆ(,,,)n X X X θ为θ的最大似然估计量。
这样,确定最大似然估计量的问题就归结为微分学中的求最大值的问题了。
估计量的评选标准为:(1)无偏性(2)有效性(3)相合性 区间估计:
对于一个未知量,人们在测量或计算时,常不以得到近似值为满足,还需要估计误差,即要求知道近似值的精确程度(亦即所求真值所在的范围)。
这样的范围常以区间的形式给出,同时还给出此区间包含参数真值的可信度,这种形式的估计称为区间估计,这样的区间即所谓置信区间。
正态总体均值、方差的置信区间与单侧置信限(置信水平为1-α)
(0,1)N
(1)t n -
2
2(1)S n χ-另外还包括两个正态总体的情况, 其他区间估计:(0-1)分布参数的区间估计 (3)插值 1、含义的理解
在离散数据的基础上补插连续函数,使得这条连续曲线通过全部给定的离散数据点。
插值是离散函数逼近的重要方法,利用它可通过函数在有限个点处的取值状况,估算出函数在其他点处的近似值(与拟合的不同点在于拟合的函数不需通过每一个离散点)。
插值问题的提法是:假定区间[a ,b ]上的实值函数f (x )在该区间上 n +1个互不相同点x0,x1…xn 处的值是f [x0],…f (xn ),要求估算f (x )在[a ,b ]中某点的值。
其做法是:在事先选定的一个由简单函数构成的有n +1个参数C0,C1,…Cn 的函数类Φ(C0,C1,…Cn)中求出满足条件P (xi )=f (xi )(i =0,1,… n )的函数P(x),并以P()作为f()的估值。
此处f (x )称为被插值函数,x0,x1,…xn 称为插值结(节)点,Φ(C0,C1,…Cn)称为插值函数类,上面等式称为插值条件,Φ(C0,…Cn )中满足上式的函数称为插值函数,R (x )= f (x )-P (x )称为插值余项。
当估算点属于包含x0,x1…xn 的最小闭区间时,相应的插值称为内插,否则称为外插。
2、基本类型 多项式插值
在一般插值问题中,若选取Φ为n 次多项式类,由插值条件可以唯一确定一个n 次插值多项式满足上述条件。
拉格朗日插值和牛顿插值都属于多项式插值。
拉格朗日插值:
设连续函数y = f (x )在[a, b]上对给定n + 1 个不同结点:
01,,,n x x x 分别取函数值01,,,n y y y
其中 ()i i y f x = 0,1,
,i n = (1)
试构造一个次数不超过 n 的插值多项式
2012()n n n P x a a x a x a x =++++ (2)
使之满足条件 ()n i i P x y = 0,1,2,,i n = (3)
构造n 次多项式()k l x 0,1,,k n = 使
()k l x =1, k=i
0, k i ⎧⎨
≠⎩
(4)
由 1
()()n
n i k k
i
i
k P x y l x y ==
=∑ 0,1,2,
,i n = (5)
即 ()n P x 满足插值条件,于是问题归结为具体求出基本插值多项式()k l x 。
根据(4)式()k l x 以外所有的节点都是()k l x 的根,因此令
0111()()()
()()()k k k n l x x x x x x x x x x x λ-+=-----
0()n
j
j j k
x x λ
=≠=-∏
又由()k l x =1,得: 01111
()()
()()
()
k k k k k k k n x x x x x x x x x x λ-+=
-----
所以有01110111()()()()()
()()()()()()
k k n k k k k k k k k n x x x x x x x x x x l x x x x x x x x x x x -+-+-----=
-----
0n
j
j k
j
j k
x x x
x =≠-=
-∏
代入(5)得 拉格朗日插值多项式为:
000()()n
n
n j
n k k k k k j k j j k
x x P x l x y y x x ===≠⎛⎫- ⎪== ⎪- ⎪⎝⎭
∑∑∏ 牛顿插值:
(拉格朗日插值的缺点)拉格朗日插值公式的形式虽然有一定的规律, 但是当增加一个节点时,不仅要增加项数,而且以前各项也必须重新全部计算,不能利用已有的结果。
为克服这一缺点,我们取用另一种形式――牛顿插值公式。
牛顿插值公式中用到了差商。
一般称:
01112010[,,
,][,,,]
[,,
,]n n n n
f x x x f x x x f x x x x x --=
-
为()f x 在01,,
,n x x x 处的n 阶差商。
差商可列表计算:
xi yi 一阶差商 二阶差商 三阶差商 四阶差商 x0 f (x0)
x1 f (x1) f [x0, x1]
x2 f (x2) f [x1, x2] f [x0, x1, x2]
x3 f (x3) f [x2, x3] f [x1, x2, x3] f [x0, x1, x2, x3]
x4 f (x4) f [x 3, x4] f [x2, x3, x4] f [x1, x2, x3, x4] f [x0,…, x4] 由差商定义可知
2001001201P ()()[,]()[,,]()()x f x f x x x x f x x x x x x x =+-+--
由差商定义可求得
000101012011010101()()()[,]()()[,,]()()()[,,,]
()()()[,,,,]
n n n n f x f x x x f x x x x x x f x x x x x x x x x f x x x x x x x x x f x x x x -=+-+--+
+---+---
记
00010101201101()()()[,]()()[,,]()()
()[,,
,]
n n n N x f x x x f x x x x x x f x x x x x x x x x f x x x -=+-+--+
+---
0101()()()()[,,,
,]n n n R x x x x x x x f x x x x =---
则
()()()n n n f x N x R x =+
其中()n N x 称为n 次牛顿插值多项式,()n R x 是截断误差。
最终我们可以证明()n N x 满足插值条件 ()()n i n i N x f x = 0,1,2,,i n =
因此有 ()()n n n n N x f x =
牛顿插值公式的优点是:当增加一个节点时,只要再增加一项就行了,即有递推式
101011()()()()()[,,,,]k k k k k N x N x x x x x x x f x x x x ++=+---
当然,与拉格朗日插值相比它还有节省运算次数的优点(尤其是节省乘法运算次数)。
分段插值与样条插值
为了避免高次插值可能出现的大幅度波动现象,在实际应用中通常采用分段低次插值来提高近似程度 埃尔米特插值
许多实际插值问题中,为使插值函数能更好地和原来的函数重合,不但要求二者在节点上函数值相等,而且还要求相切,对应的导数值也相等,甚至要求高阶导数也相等。
这类插值称作切触插值,或埃尔米特(Hermite)插值。
满足这种要求的插值多项式就是埃尔米特插值多项式 三角函数插值
当被插函数是以2π为周期的函数时,通常用n 阶三角多项式作为插值函数,并通过高斯三角插值表出。
三、线性规划、整数规划、多元规划、二次规划
(1)线性规划
1、含义的理解
线性规划是运筹学中研究较早、发展较快、应用广泛、方法较成熟的一个重要分支,它是辅
助人们进行科学管理的一种数学方法.研究线性约束条件下线性目标函数的极值问题的数学
理论和方法,英文缩写LP。
它是运筹学的一个重要分支。
在经济管理、交通运输、工农业生产等经济活动中,提高经济效果是人们不可缺少的要求,而提高经济效果一般通过两种途径:一是技术方面的改进,例如改善生产工艺,使用新设备和新型原材料.二是生产组织与计划的改进,即合理安排人力物力资源.线性规划所研究的是:在一定条件下,合理安排人力物力等资源,使经济效果达到最好.一般地,求线性目标函数在线性约束条件下的最大值或最小值的问题,统称为线性规划问题。
满足线性约束条件的解叫做可行解,由所有可行解组成的集合叫做可行域。
决策变量、约束条件、目标函数是线性规划的三要素。
2、线性规划问题的数学模型的一般形式和模型建立
(1)列出约束条件及目标函数(2)画出约束条件所表示的可行域(3)在可行域内求目标函数的最优解及最优值(实际问题中建立数学模型一般有以下三个步骤:根据影响所要达到目的的因素找到决策变量;2.由决策变量和所在达到目的之间的函数关系确定目标函数;
3.由决策变量所受的限制条件确定决策变量所要满足的约束条件。
)
所建立的数学模型具有以下特点:
(1)、每个模型都有若干个决策变量(x1,x2,x3……,xn),其中n为决策变量个数。
决策变量的一组值表示一种方案,同时决策变量一般是非负的。
(2)、目标函数是决策变量的线性函数,根据具体问题可以是最大化(max)或最小化(min),二者统称为最优化(opt)。
(3)、约束条件也是决策变量的线性函数。
当我们得到的数学模型的目标函数为线性函数,约束条件为线性等式或不等式时称此数学模型为线性规划模型。
3、实例
生产计划问题
问题:
某企业要在计划期内安排生产甲、乙两种产品,这个企业现有的生产资料是:设备18台时,原材料A :4吨,原材料B:12吨;已知单位产品所需消耗生产资料及利润如下表。
问应如何确定生产计划使企业获利最多?
条件限制为:
3*x1+2*x2≤18
1*x1+0*x2≤4
0*x1+2*x2≤12
x1≥0,x2≥0
求max z=3*x1+5*x2
用lingo编程,程序如下:
max=3*x1+5*x2;
3*x1+2*x2<=18;
x1<=4;
x2<=6;
x1>=0;
x2>=0;
结果为:
Global optimal solution found.
Objective value: 36.00000
Total solver iterations: 1
Variable Value Reduced Cost
X1 2.000000 0.000000
X2 6.000000 0.000000
Row Slack or Surplus Dual Price
1 36.00000 1.000000
2 0.000000 1.000000
3 2.000000 0.000000
4 0.000000 3.000000
5 2.000000 0.000000
6 6.000000 0.000000
即在x1=2,x2=6时,企业获利最多,为36万元。
4、线性规划的应用
在企业的各项管理活动中,例如计划、生产、运输、技术等问题,线性规划是指从各种限制条件的组合中,选择出最为合理的计算方法,建立线性规划模型从而求得最佳结果.广泛应用于军事作战、经济分析、经营管理和工程技术等方面。
为合理地利用有限的人力、物力、财力等资源作出的最优决策,提供科学的依据。
(2)整数规划
一类要求问题的解中的全部或一部分变量为整数的数学规划。
从约束条件的构成又可细分为线性,二次和非线性的整数规划。
在线性规划问题中,有些最优解可能是分数或小数,但对于某些具体问题,常要求某些变量的解必须是整数。
例如,当变量代表的是机器的台数,工作的人数或装货的车数等。
为了满足整数的要求,初看起来似乎只要把已得的非整数解舍入化整就可以了。
实际上化整后的数不见得是可行解和最优解,所以应该有特殊的方法来求解整数规划。
在整数规划中,如果所有变量都限制为整数,则称为纯整数规划;如果仅一部分变量限制为整数,则称为混合整数规划。
整数规划的一种特殊情形是0-1规划,它的变数仅限于0或1。
不同于线性规划问题,整数和0-1规划问题至今尚未找到一般的多项式解法。
组合最优化通常都可表述为整数规划问题。
两者都是在有限个可供选择的方案中,寻找满足一定约束的最好方案。
有许多典型的问题反映整数规划的广泛背景。
例如,背袋(或装载)问题、固定费用问题、和睦探险队问题(组合学的对集问题)、有效探险队问题(组合学的覆盖问题)、旅行推销员问题, 车辆路径问题等。
因此整数规划的应用范围也是极其广泛的。
它不仅在工业和工程设计和科学研究方面有许多应用,而且在计算机设计、系统可靠性、编码和经济分析等方面也有新的应用。
整数规划是从1958年由R.E.戈莫里提出割平面法之后形成独立分支的。
解整数规划最典型的做法是逐步生成一个相关的问题,称它是原问题的衍生问题。
对每个衍生问题又伴随一个比它更易于求解的松弛问题(衍生问题称为松弛问题的源问题)。
通过松弛问题的解来确定它的源问题的归宿,即源问题应被舍弃,还是再生成一个或多个它本身的衍生问题来替代它。
随即再选择一个尚未被舍弃的或替代的原问题的衍生问题,重复以上步骤直至不再剩有未解决的衍生问题为止。
目前比较成功又流行的方法是分枝定界法和割平面法,它们都是在上述框架下形成的。
0-1规划在整数规划中占有重要地位,一方面因为许多实际问题,例如指派问题、选地问题、送货问题都可归结为此类规划,另一方面任何有界变量的整数规划都与0-1规划等价,用0-1规划方法还可以把多种非线性规划问题表示成整数规划问题,所以不少人致力于这个方向的研究。
求解0-1规划的常用方法是分枝定界法,对各种特殊问题还有一些特殊方法,例如求解指派问题用匈牙利方法就比较方便。
(4)二次规划
二次规划是非线形规划中一类特殊的数学规划问题,它的解是可以通过求解得到的。
通常通过解其库恩—塔克条件(KT条件),获取一个KT条件的解称为KT对,其中与原问题的变量对应的部分称为KT点。
二次规划分为凸二次规划与非凸二次规划,前者的KT点便是其全局极小值点,而后者的KT点可能连局部极小值点都不是。
若它的目标函数是二次函数,则约束条件是线性的。
由于求解二次规划的方法很多,所以较为复杂;其较简便易行的是沃尔夫法,它是依据库恩-塔克条件,在线性规划单纯形法的基础上加以修正而成的。
此外还有莱姆基法、毕尔法、凯勒法等。
四、图论:(参考资料:建模教程(图与网络))
(1)含义的理解
图论是专门研究图的理论的一门数学分支,属于离散数学范畴,与运筹学有交叉。
图论中常用点和点之间的线所构成的图,反映实际生产和生活中的某些特定对象之间的特定关系。
一般来说,通常用点表示研究对象、用点与点之间的线表示研究对象之间的特定关系。
在一般情况下,图中的相对位置如何,点与点之间线的长短曲直,对于反映研究对象之间的关系,显的并不重要。
因此,图论中的图与几何图,工程图等本质上是不同的。
(2)历史(包括应用范围)
它有200多年历史,大体可划分为三个阶段:
第一阶段是从十八世纪中叶到十九世纪中叶,处于萌芽阶段,多数问题围游戏而产生,最有代表性的工作是所谓的Euler七桥问题,即一笔画问题。
第二阶段是从十九世纪中叶到二十世纪中叶,这时,图论问题大量出现,如Hamilton问题,地图染色的四色问题以及可平面性问题等,这时,也出现用图解决实际问题,如Cayley把树应用于化学领域,Kirchhoff用树去研究电网络等.
第三阶段是二十世纪中叶以后,由生产管理、军事、交通、运输、计算机网络等方面提出实际问题,以及大型计算机使大规模问题的求解成为可能,特别是以Ford和Fulkerson建立的网络流理论,与线性规划、动态规划等优化理论和方法相互渗透,促进了图论对实际问题的应用。
算法
1、求有向图的强连通分支 (Strongerst Connected Component) (1)Kosaraju 算法 (2)Gabow 算法 (3)Tarjan 算法
2、求最小生成树 (Minimal Spanning Trees) (1)Kruskal 算法 (2)Prim 算法
3、最小树形图
(1)朱永津刘振宏算法 4、最短路径问题
(1)SSSP(Single-source Shortest Paths) ①Dijkstra 算法
②Bellman-Ford 算法(SPFA 算法)
(2)APSP(All-pairs Shortest Paths) ①Floyd-Warshall 算法 ②Johnson 算法 5、网络流问题 (1)最大网络流 ①增广路算法
⒈Ford-Fulkerson 算法 ⒉Edmonds-Karp 算法
⒊最短路径增殖EK-2(MPLA ) ⒋Dinic
②预流推进算法 (2)最小费用流 6、图匹配问题 (1)匈牙利算法
(2)Hopcroft Karp 算法 (3)Kuhn-Munkres 算法
(4)Edmonds' blossom-contraction 算法
(有关资料网址:/index.php/%E5%9B%BE%E8%AE%BA ) (1)基本概念
无向图
一个无向图(undirected graph)G 是由一个非空有限集合)(G V 和)(G V 中某些元素的无序对集合)(G E 构成的二元组,记为))(),((G E G V G =。
其中},,,{)(21n v v v G V =称为图G 的顶点集(vertex set )或节点集(node set ), )(G V 中的每一个元素
),,2,1(n i v i =称为该图的一个顶点(vertex )或节点(node );},,,{)(21m e e e G E =称
为图G 的边集(edge set ),)(G E 中的每一个元素k e (即)(G V 中某两个元素j i v v ,的无序
对) 记为),(j i k v v e =或i j j i k v v v v e == ),,2,1(m k =,被称为该图的一条从i v 到j v 的边(edge )。
当边j i k v v e =时,称j i v v ,为边k e 的端点,并称j v 与i v 相邻(adjacent );边k e 称为与顶点j i v v ,关联(incident )。
如果某两条边至少有一个公共端点,则称这两条边在图G 中相邻。
边上赋权的无向图称为赋权无向图或无向网络(undirected network )。
我们对图和网络不作严格区分,因为任何图总是可以赋权的
有向图 一个有向图(directed graph 或 digraph )G 是由一个非空有限集合V 和V 中某些元素的有序对集合A 构成的二元组,记为),(A V G =。
其中},,,{21n v v v V =称为图G 的顶点集或节点集, V 中的每一个元素),,2,1(n i v i =称为该图的一个顶点或节点;
},,,{21m a a a A =称为图G 的弧集(arc set ),A 中的每一个元素k a (即V 中某两个元素j i v v ,的有序对) 记为),(j i k v v a =或),,2,1(n k v v a j i k ==,被称为该图的一条从i v 到j
v 的弧(arc )。
当弧j i k v v a =时,称i v 为k a 的尾(tail ),j v 为k a 的头(head ),并称弧k a 为i v 的出弧(outgoing arc ),为j v 的入弧(incoming arc )。
对应于每个有向图D ,可以在相同顶点集上作一个图G ,使得对于D 的每条弧,G 有一条有相同端点的边与之相对应。
这个图称为D 的基础图。
反之,给定任意图G ,对于它的每个边,给其端点指定一个顺序,从而确定一条弧,由此得到一个有向图,这样的有向图称为G 的一个定向图。
完全图、二分图
每一对不同的顶点都有一条边相连的简单图称为完全图(complete graph)。
n 个顶点的完全图记为n K 。
若Y X G V =)(,Φ=Y X ,0||||≠Y X (这里||X 表示集合X 中的元素个数),X 中无相邻顶点对,Y 中亦然,则称G 为二分图(bipartite graph);特别地,若Y y X x ∈∀∈∀,,则)(G E xy ∈,则称G 为完全二分图,记成|||,|Y X K 。
最短路、网络流、二分图
1、 最短路问题(SPP -shortest path problem )
最短路径问题是图论中十分重要的最优化问题之一,它作为一个经常被用到的基本工具,可以解决生产实际中的许多问题,比如城市中的管道铺设,线路安排,工厂布局,设备更新等
等。
也可以用于解决其它的最优化问题。
若网络中的每条边都有一个数值(长度、成本、时间等),则找出两节点(通常是源节点和阱节点)之间总权和最小的路径就是最短路问题。
最短路问题是网络理论解决的典型问题之一,可用来解决管路铺设、线路安装、厂区布局和设备更新等实际问题。
最短路问题,我们通常归属为三类
单源最短路径问题
包括起点的最短路径问题,确定终点的最短路径问题(与确定起点的问题相反,该问题是已知终结结点,求最短路径的问题。
在无向图中该问题与确定起点的问题完全相同,在有向图中该问题等同于把所有路径方向反转的确定起点的问题。
)
确定起点终点的最短路径问题
即已知起点和终点,求两点之间的最短路径。
全局最短路径问题
求图中所有的最短路径。
算法只要采用Floyed-Warshall算法(这是弗洛伊德利用动态规划(dynamic programming)的原理设计的一个高效算法)。
Floyed-Warshall 算法用来找出每对点之间的最短距离。
它需要用邻接矩阵来储存边,这个算法通过考虑最佳子路径来得到最佳路径。
注意单独一条边的路径也不一定是最佳路径。
从任意一条单边路径开始。
所有两点之间的距离是边的权,或者无穷大,如果两点之间没有边相连。
对于每一对顶点 u 和 v,看看是否存在一个顶点 w 使得从 u 到 w 再到 v 比己知的路径更短。
如果是更新它。
不可思议的是,只要按排适当,就能得到结果。
最短路算法:
Dijkstra算法
Dijkstra复杂度是O(N^2),如果用binary heap优化可以达到O((E+N)logN),用fibonacci heap可以优化到O(NlogN+E)
其基本思想是采用贪心法,对于每个节点v[i],维护估计最短路长度最大值,每次取出一个使得该估计值最小的t,并采用与t相连的边对其余点的估计值进行更新,更新后不再考虑t。
在此过程中,估计值单调递减,所以可以得到确切的最短路。
Dijkstra 程序:。