差分约束系统

定义

在一个 差分约束系统(system of difference constraints)中,线性规划矩阵 A每一行包含一个1和一个-1,A的其他所有元素都为0。因此,由 Axb给出的约束条件是m个差分约束集合,其中包含n个未知量,对应的线性规划矩阵 A为m行n列。 每个约束条件为如下形式的简单线性不等式:xj-xi≤bk。其中1≤i,j≤n,1≤k≤m。

建立约束图:数与图的结合

可以发现约束条件这个不等式和图的单源最短路径算法中的松弛操作极为类似,这样, 上述问题可以转换成n个结点m条边的有向图(图不一定连通),其中n个结点分别为n个未知数,m条有向边分别代表m个约束条件,对于条件 xj - xi <= k; 对应着弧<xi,xj>的权值为k。 另外,为保证图的连通, 在图中引入附加节点vs使图中每个顶点vi都能从vs可达,并设弧<vs,vi>的权w<vs,vi>=0。Bellman-Ford可以不用,因为它本身就是对所有点都松弛。但SPFA必须要加。

差分约束问题的求解

【定理】若图中存在负权回路,则该差分约束系统不存在可行解。 【 求最优解】在差分约束系统中, 如果题目要求是求最小值,就将约束条件转化为">="形式,然后利用松弛不等式dist[v] >= dist[u] + w[u][v]建图,再用Bellman_Ford\SPFA算法求解约束图的最长路径;如果题目要求的是最大值,就将约束条件转化为"<="形式,然后利用松弛不等式dist[v] <= dist[u] + w[u][v]建图,再用Bellman_Ford\SPFA算法求解约束图的最短路径。 【时间复杂度】关于n个未知量m个约束条件的一个差分约束系统产生出一个具有n+1个顶点和n+m条边的约束图。因此采用Bellman-Ford算法,可以再O((n+1)(n+m))=O(n^2+nm)时间内将系统解决。此外,可以用SPFA算法进行优化,复杂度为O(km),其中k 为常数。

你可能感兴趣的:(差分约束)