-
关于图和树的概念
最小支撑树
-
寻找支撑树的两种方法:破圈法 避圈法
Dijkstra算法(贪心策略)
-
使用:用于解决边权权为正的单源最短路问题
算法思路
Step 1:初始化距离
初始化距离,1号点到起点的距离为0,其他店到起点的距离无穷大
Step 2:迭代
循环n次,找到没有确定最短距离且距离起点最近的点,用这个点更新其他点的距离,这个点同时也确定了最短距离。循环n次就可以确定n个点到起点的距离了
-
如何解决Dijkstra算法权重不能为负数的问题?Bellman——Ford算法
-
如何优化?堆优化(用优先队列priority_queue)
Bellman-Ford算法
-
解决负权图
-
判断有无负权回路的单源最短路径问题(迭代超过V-1次,就说明存在负权回路)
算法思路
-
当赋权有向图有负权时,求最短路的办法
利用如下递推公式:
对于t =2, ........., 3,
若进行到某一步, 对于所有点j, 有
-
缺点:时间复杂度高
Floyd算法(求所有顶点之间的最短路径)
一求最短路径步骤
-
初始时设置一个n阶方阵, 令其对角线元素为 0 , 若存在弧 < V i, V j>, 则对应元素为权值; 否则 为 无穷大
-
逐步试着在原直接路径中增加中间顶点, 若加 入中间点后路径变短, 则修改之; 否则, 维持 原值
-
所有顶点试探完毕, 算法结束
网络最大流问题
-
什么是最大流问题?
-
最小费用最大流问题的一般提法是:在一个给定的 网络 D=(V, A, C, B) 的每一条弧上, 除了给出容量 c_{i j} 之外, 还给出了每一弧上单位流量的费用 b_{i j}, 求一 个最大流 f, 使流 f 的总费用
达到最小。
-
寻求最大流的算法
⚫ Ford- Fulkerson 算法(FF算法)(深度优先搜索)
⚫ Edmonds -Karp算法(广度优先搜索)
⚫ Dinic算法(结合广度优先搜索和深度优先搜索)
旅行商问题
一个商人欲到n个城市推销商品, 每两个城市 i和j之间的距离为 d_ij, 如何迭择一条道路使得 商人每个城市正好走一遇后回到起点且所走路 线最短。
图论模型
构造一个图G =(V, E), 顶点表示城市, 边 表示连接两城市的路, 边上的权W (e) 表示距离(或时间或费用)。旅行推销员问题就成为在加权图中寻找一条经过每个顶点正好一 次的取短圈的问题, 即求最佳Hamilton 圈的 问题。
基本概念
1)哈米尔顿路径 (H路径):经过图G每个顶点正好一次的路径;
2)哈米尔顿圈 (H圈);经过 \mathrm{G} 的每个顶点正好一次的圈;
3)哈米尔顿图 (H图):含H圈的图。
4)最佳 H 圈:在加权图 G=(V, E) 中, 权最小的H圈;
5)最佳推销员回路:经过每个 顶点一次的权最小闭通路;
6)TSP问题:在加权图中求最佳H圈的问题。
旅行商问题的数学规划模型
设 d_{i j} 是 i 与 j 之间的距离, x_{i j}=0 或 1 (1表示连线, 0 表示不连线). 则有:
旅行商问题的数学规划模型二
用 n 个顶点的排列i_1, ........, i_n 表示旅行商的解, 则
旅行商问题的求解算法
-
解法一:根据整数规划模型(模型一),可以利用优化软件 (Lingo等) 进行求解;
-
解法二: 根据模型二, 可以利用智能优化算法进行求解 (禁忌搜 索算法、蚁群算法等)
车辆路径问题(VRP)
车辆路线问题(VRP)最早是由Dantzig和Ramser于1959年首次提出,它是指一定数量的客户,各自有不同数量的货物需求,配送中心向客户提供货物,由一个车队负责分送货物,组织适当的行车路线,目标是使得客户的需求得到满足,并能在一定的约束下,达到诸如路程最短、成本最小、耗费时间最少等目的。
问题描述
设有一场站(depot),共有M 辆货车,车辆容量为Q,有N位顾客(customer),每位顾客有其需求量D。车辆从场站出发对客户进行配送服务最后返回场站,要求所有顾客都被配送,每位顾客一次配送完成,且不能违反车辆容量的限制,目的是所有车辆路线的总距离最小。
算法类型
精确解法
-
分枝定界法 (Branch and Bound Approach)
-
割平面法 (Cutting Planes Approach)
-
网络流算法 (Network Flow Approach)
-
动态规划算法 (Dynamic Programming
-
Approach)
启发式算法
构造算法 (Constructive Algorithm )
两阶段算法 (Two Phase Algorithm)
元启发式算法 (Metaheuristics Algorithm)