2.1 图论应用
2.1.1 最小生成树(★★)
所有顶点接入、没有回路、权值之和最小
(1)普里姆算法
当前形成的集合T始终是一棵树,每次添加的边是使树中的权尽可能小,是一种贪心的策略。
实践复杂度为O(n²),与图中的边数无关,适合于稠密图(边数远远大于顶点数的图)
(2)克鲁斯卡尔算法
考虑最短的边,由短到长组成一棵树。
时间复杂度为O(elog2e),与图中顶点数无关,较适用于稀疏图(边数远小于顶点数的图)
2.1.2 最短路径(★★)
带权图的最短路径问题即求两个顶点间长度最短的路径。
其中路径长度不是指路径上边数的总和,而是指路径上各边的权值之和。
(1)单源最短路径
单源最短路径(Single Source Shortest Path)是指给定一个起点节点,求从该起点节点到图中其他所有节点的最短路径长度。
单源最短路径问题可以使用Dijkstra算法来求解。Dijkstra算法是一种贪心算法,它的基本思想是:对于图中的每个节点,计算从起点到该节点的最短路径长度,并将该节点加入到已访问过的节点集合中。重复上述过程,直到找到目标节点为止。
Dijkstra算法的时间复杂度为O(ElogV),其中E表示图中的边数,V表示图中的节点数。因此,当图的规模较小,边权信息易于查找时,Dijkstra算法是一种高效的单源最短路径求解方法。
除了Dijkstra算法,还有其他一些算法可以用于求解单源最短路径问题,例如Floyd-Warshall算法和A*算法。这些算法的时间复杂度也都比较高,但在某些特殊情况下可能更加高效。
(2)每一对顶点之间的最短路径
弗洛伊德算法(Floyd algorithm)是一种用于求解加权图中多源点之间最短路径的算法,与Dijkstra算法类似。它的基本思想是:对于图中的每个节点,计算从当前节点到其他所有节点的最短路径长度,并将该节点加入到已访问过的节点集合中。重复上述过程,直到找到目标节点为止。
弗洛伊德算法的时间复杂度为O(E^2),其中E表示图中的边数。因此,当图的规模较小时,弗洛伊德算法是一种高效的多源点最短路径求解方法。但是,当图的规模较大时,弗洛伊德算法的时间复杂度会变得非常高,难以在实时性要求较高的应用中使用。
弗洛伊德算法的实现步骤如下:
(1)初始化:将图中所有节点加入到已访问过的节点集合中,同时记录每个节点到当前节点的最短路径长度。
(2)遍历:从当前节点开始,依次遍历图中的每个节点。
(3)计算:对于每个未访问过的节点,计算从当前节点到该节点的最短路径长度,并更新该节点在已访问过的节点集合中的最短路径长度。
(4)更新:将计算出的最短路径长度更新到已访问过的节点集合中。
(5)重复:重复步骤2-4,直到找到目标节点为止。
需要注意的是,在弗洛伊德算法中,需要使用一个数组来记录每个节点到当前节点的最短路径长度。如果图中有负权边,则需要将该数组中的负数转换为正数,否则无法得到正确的最短路径长度。
总之,弗洛伊德算法是一种常用的多源点最短路径求解算法,适用于规模较小的图。但是,当图的规模较大时,弗洛伊德算法的时间复杂度会变得非常高,无法满足实时性要求较高的应用需求。
2.1.3 网络与最大流量(★)
最大流量以最小瓶颈为准。
网络与最大流量问题是计算机网络中的一个经典问题,它的目标是在给定的网络中,确定一个最大的流量值,使得网络中的流量不超过该最大值。
解题思路如下:
(1)确定网络拓扑:首先需要确定网络的拓扑结构,即网络中各个节点之间的连接方式和连接顺序。
(2)确定流量模型:根据实际情况,确定流量模型,即网络中的流量如何分布和传输。
(3)确定最大流量:根据网络拓扑和流量模型,确定最大流量值,即网络中可以传输的最大流量值。
(4)优化流量分配:根据最大流量值,对网络中的流量进行优化分配,以最大化传输的流量值。
在实际应用中,网络与最大流量问题通常可以使用各种优化算法来解决,如贪心算法、动态规划算法、遗传算法等。这些算法的核心思想是根据网络拓扑和流量模型,寻找最优的流量分配方案,以最大化传输的流量值。
需要注意的是,网络与最大流量问题的解决方案需要考虑多种因素,如网络拓扑、流量模型、最大流量值等,因此需要综合考虑多种因素,以得出最优的解决方案。
2.2 运筹方法
2.2.1 关键路径法(★★★)
关键路径法(Critical Path Method,CPM)是一种常用的项目管理技术,用于估算项目的最短工期和进度灵活性大小。它的核心思想是:将项目分解成一系列的工作任务,将这些任务以流程图的形式展示出来,然后根据每个任务的预估时间框架来计算项目的关键路径和工期。
关键路径法的具体步骤如下:
(1)确定工作任务:将项目分解成一系列的工作任务,并确定每个任务的开始和结束时间。
(2)计算最早开始时间和最晚开始时间:对于每个任务,计算它的最早开始时间和最晚开始时间。最早开始时间是指任务可以开始的最早时间,最晚开始时间是指任务必须开始的最晚时间。
(3)计算最短工期:对于每个任务,计算它的最短工期。最短工期是指任务必须完成的最短时间,它等于任务的持续时间加上其前置任务的最早开始时间和最晚开始时间的最小值。
(4)计算关键路径:对于每个任务,计算它的最早完成时间和最晚完成时间。关键路径是指项目中最长的路径,它包含所有关键任务,并且在任务的最早完成时间和最晚完成时间之间,因此关键路径上的任务必须在规定的时间内完成。
(5)计算工期和进度:根据关键路径计算项目的最短工期,以及项目的进度和灵活性大小。进度是指项目完成的时间与计划完成时间之间的差异,灵活性是指项目在关键路径之外的任务可以推迟或提前的程度。
总之,关键路径法是一种常用的项目管理技术,可以帮助项目经理估算项目的最短工期和进度灵活性大小,从而更好地控制项目进度和质量。
2.2.2 线性规划(★★★)
线性规划(Linear Programming)是一种数学优化技术,用于在一组线性约束条件下,最大化或最小化一个线性目标函数。它的应用非常广泛,包括生产计划、资源分配、运输规划、财务管理、市场营销等领域。
线性规划的基本思想是:在给定的一组约束条件下,寻找一组线性目标函数的取值,使得这个取值最大化或最小化。线性规划的约束条件通常是一组不等式或等式,而目标函数和约束条件都可以表示为线性函数。
线性规划的具体步骤如下:
(1)确定问题:将问题转化为线性规划模型,包括目标函数和约束条件。
(2)建立线性规划模型:将问题转化为标准形式,即线性规划的标准形式,其中目标函数和约束条件都是线性函数。
(3)求解模型:使用线性规划求解器,例如单纯形法、牛顿-拉夫逊法、内点法等,求解模型得到最优解。
(4)分析结果:根据模型的最优解,分析问题的最优解和优化效果。
线性规划的优点是可以找到最优解,而且求解速度较快。但它也有一些局限性,例如模型的规模和复杂性可能会限制其应用范围和效果。此外,线性规划只能处理线性关系,对于非线性关系的问题可能需要使用其他优化技术。
2.2.3 动态规则(★★)
动态规则是计算机科学中的一个概念,用于描述系统中状态和行为的变化。它是一种形式化的描述方法,通常用于设计和实现实时系统、嵌入式系统、机器人等领域。
动态规则通常由两部分组成:状态变量和状态变化规则。状态变量描述系统的当前状态,例如一个机器人的位置、速度、电量等;状态变化规则描述状态的变化,例如机器人的运动、充电、故障等。
状态变量通常是系统中的一些变量,例如机器人的位置、速度、电量等,可以通过传感器等设备获取。状态变化规则通常是一些规则,例如当机器人电量不足时,机器人需要充电;当机器人遇到障碍物时,机器人需要停止前进等。
动态规则可以用于设计和实现实时系统、嵌入式系统、机器人等领域,例如设计一个自动驾驶汽车的控制系统,可以使用动态规则来描述车辆的状态和行为,例如车辆的速度、位置、方向等,以及车辆的行为规则,例如加速、减速、转弯等。通过使用动态规则,可以实现系统的自动控制和决策,提高系统的效率和可靠性。
2.2.4 预测与决策(★★★)
(1)暴力求解法
将所有可能的可选方案列出来,比较结果
(2)贪心策略分析
总是选择当前状态下最优解的策略
2.2.5 排队论
2.2.6 博弈论
2.3 数学建模(★)
数学建模是利用数学方法和工具对现实问题进行建模、分析和求解的过程。数学建模是一种重要的科学研究方法,广泛应用于自然科学、社会科学、工程技术等领域。
数学建模通常包括以下几个步骤:
(1)问题定义:明确研究的问题和目标,确定需要解决的问题的范围和限制条件。
(2)建立数学模型:根据问题的特点和数据,建立数学模型。数学模型可以是代数方程、微分方程、概率统计模型等。
(3)求解数学模型:利用数学方法和工具,求解数学模型,得到问题的解或最优解。
(4)结果分析:对得到的结果进行分析和评估,验证模型的正确性和有效性。
数学建模的优点是可以将复杂的现实问题抽象化,将其转化为数学问题进行求解,从而得到问题的解或最优解。同时,数学建模还可以提供定量的分析结果,帮助人们更好地理解和解决现实问题。
数学建模的应用范围非常广泛,例如在工程技术中,可以用于优化设计、控制系统、预测分析等方面;在社会科学中,可以用于人口统计学、市场分析、社会政策等方面;在自然科学中,可以用于物理、化学、生物等领域的研究。