1. 程式人生 > >差分約束演算法總結

差分約束演算法總結

差分約束系統

一、概念

                  如果一個系統由n個變數和m個約束條件組成,形成m個形如ai-aj≤k的不等式(i,j∈[1,n],k為常數),則稱其為差分約束系統。

二、引例

給定n個變數和m個不等式,每個不等式的形式為 x[i] - x[j] <= a[k] (0 <= i, j < n, 0 <= k < m, a[k]已知),求 x[i] - x[j] 的最大值 例如當n = 4,m = 5,給出如下圖所示的不等式組,求x3 - x0的最大值。                                               
一般思路:我們可以嘗試把幾個不等式組合得到最後我們要求的式子,於是這些式子裡最小的那個就是答案。 比如,在這個例子中: (3) ==》  x3 - x0<=4; (1)、(4)、(5) ==》 x3 - x0<=5; (2)、(5) ==》 x3 - x0<=3; 所以最後結果就是3. 在這個過程中,我們是否想到這種方法與我們已經學的一種演算法有所聯絡,是的,就是最短路演算法。

三、差分約束與最短路模型

1、與最短路模型的聯絡

先給出結論:求解差分約束系統,都可以轉化成圖論的單源最短路徑(或最長路徑)問題。

我們觀察上面例子中的不等式,都是x[i] - x[j] <= a[k],可以進行移項,成為x[i] <= x[j] + a[k],我們令a[k] = w(j, i),dis[i]=x[i],並使i=v,j=u,那麼原始就變為:dis[u]+w(u,v)>=dis[v],於是可以聯想到最短路模型中的一部分程式碼

if(dis[u]+w(u,v)<=dis[v])
{
    dis[v]=dis[u]+w(u,v);
}

這不正與鬆弛操作相似嗎?

但是好像不等號方向剛好相反,但其實這並不矛盾

上面的程式碼要實現的是使dis[u]+w(u,v)>dis[v],而對於不等式,我們進行建邊的操作:對於每個不等式 x[i] - x[j] <= a[k],對結點 j 和 i 建立一條 j -> i的有向邊,邊權為a[k],求x[n-1] - x[0] 的最大值就是求 0 到n-1的最短路,兩者剛好吻合。所以求解差分約束問題就轉化為了最短路問題。

2.問題解的存在性

    由於在求解最短路時會出現存在負環或者終點根本不可達的情況,在求解差分約束問題時同樣存在

    (1)、存在負環

如果路徑中出現負環,就表示最短路可以無限小,即不存在最短路,那麼在不等式上的表現即X[n-1] - X[0] <= T中的T無限小,得出的結論就是 X[n-1] - X[0]的最大值不存在。在SPFA實現過程中體現為某一點的入隊次數大於節點數。(貌似可以用sqrt(num_node)來代替減少執行時間)

     (2)、終點不可達

這種情況表明X[n-1]和X[0]之間沒有約束關係,X[n-1] - X[0]的最大值無限大,即X[n-1]和X[0]的取值有無限多種。在程式碼實現過程中體現為dis[n-1]=INF。

3、不等式組的轉化

做題時可能會遇到不等式中的符號不相同的情況,但我們可以對它們進行適當的轉化

(1)方程給出:X[n-1]-X[0]>=T ,可以進行移項轉化為: X[0]-X[n-1]<=-T。

(2)方程給出:X[n-1]-X[0]<T, 可以轉化為X[n-1]-X[0]<=T-1。

(3)方程給出:X[n-1]-X[0]=T,可以轉化為X[n-1]-X[0]<=T&&X[n-1]-X[0]>=T,再利用(1)進行轉化即可

4、應用

對於不同的題目,給出的條件都不一樣,我們首先需要關注問題是什麼,如果需要求的是兩個變數差的最大值,那麼需要將所有不等式轉變成"<="的形式,建圖後求最短路;相反,如果需要求的是兩個變數差的最小值,那麼需要將所有不等式轉化成">=",建圖後求最長路。

5、相關題目連結

相關推薦

約束演算法總結

差分約束系統 一、概念                   如果一個系統由n個變數和m個約束條件組成,形成m個形如ai-aj≤k的不等式(i,j∈[1,n],k為常數),則稱其為差分約束系統。 二

約束入門+總結

給定一串序列,長度為n。a1,a2,a3......ana_1,a_2,a_3......a_na1​,a2​,a3​......an​ 並給定m的限制條件,條件的格式為 ai−aj&lt;=ca_i-a_j&lt;=cai​−aj​<=c

(uva11671)約束問題總結

11671 - Sign of Matrix Time limit: 1.000 seconds 這個問題是個差分約束的問題,但是一開始看這個問題的時候沒有發現是個差分約束的題,而且這個題我想

進化演算法總結

基本介紹 DE(Differential Evolution)演算法於1997年由Rainer Storn和Kenneth Price在遺傳演算法等進化思想的基礎上提出的,本質是一種多目標(連續變數)優化演算法,用於求解多維空間中整體最優解。其基本思想即是來源於

遺傳演算法進化演算法總結比較

遺傳演算法 遺傳演算法的基本原理: 遺傳演算法是一種基於生物進化原理構想出來的搜尋最優解的仿生演算法,它是模擬基因重 組與進化的自然過程,把待解決問題的引數編成二進位制碼或十進位制碼(也可編成其他進

總結約束模型的要點

cio 一個點 ros 最短路 所有 運行時間 16px net 不同   只是一些自己想到的東西,記下來以防忘記。   1. 求解一系列的 f[b] - f[a] <= x 不等式組時,由a向b建權值為x的邊,求最短路。有負環時無解,體現為在SPFA中一個點入隊

最短路和約束(三種演算法實現)( Til the Cows Come Home )

題目訓練連結(密碼hpuacm): https://vjudge.net/contest/246705 我會分別用 迪傑斯特拉  優先佇列和鏈式前向星優化過的迪傑斯特拉  SPFA演算法 三種方法講一下例題。 此外上述三種演算法是求單源最短路問題, 這裡還會

MIT演算法導論公開課之第18課 最短路徑演算法、Bellman和約束系統

Bellman-Ford 演算法 圖G=(V,E),選取s∈V作為圖的原點,此演算法可計算最短路徑δ(s,v)(v∈V)或報告出圖中存在負權值的環路。 Exercise 在路徑中存在負權值的環路時,將δ(s,v)設定為-∞。 Bellman-F

numba版 自適應進化演算法 速度超快 可以求解約束問題

import numpy as np from numba import njit from math import cos,pi random=np.random.random randint=np.random.randint @njit def fitn

ZOJ 2770 約束+SPFA

最大值 multiple sample mea tro output problem igp data Burn the Linked CampTime Limit: 2 Seconds Memory Limit: 65536 KB It is well know

ZOJ 2770 Burn the Linked Camp 約束 (轉)

最小 差分約束 ast divide sam ges format gen period It is well known that, in the period of The Three Empires, Liu Bei, the emperor of the Shu

HDOJ題目3440 House Man(約束

etop log help crazy code sizeof inpu field empty House Man Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/

約束系統】【最短路】【spfa】CDOJ1646 窮且益堅, 不墜青雲之誌。

put pac 時間復雜度 edge 系列 string pri class emp 求一個有n個元素的數列,滿足任意連續p個數的和不小於s, 任意連續q個數的和不大於t。 令sum[i]表示前i項的和(0<=i<=n,sum[0]=0) 那麽題目的條件可轉化為

[luoguP3275] [SCOI2011]糖果(約束

cli open inline none long cst aps ret 糖果 傳送門 差分約束裸題 但是坑! 有一個點是長為10W的鏈,需要逆序加邊才能過(真是玄學) 還有各種坑爹數據 開longlong ——代碼

51nod 1340 約束

archive typedef sign php http pre .net ++ while 思路: 帶未知量的Floyd 很強 http://yousiki.net/index.php/archives/87/ //By SiriusRen #includ

【POJ 1201】 Intervals(約束系統)

sub 代碼 idt ear ces oid std one space 【POJ 1201】 Intervals(差分約束系統) 11 1716的升級版 把原本固定的邊權改為不固定。 Intervals Time Limit: 2000MS Memor

約束系統

如果 三角形 最長 問題 [] 原理 不等式 個數 單源最短路 差分約束系統就是給出一些形如x-y<=b不等式的約束,問你是否有滿足問題的解,或者求最小,最大解。 (以下(a,b,c)表示從a向b連一條權值為c的邊 一.原理 對於圖論的最短路徑,有:d(v) <

【POJ2983】Is the Information Reliable? ——約束

存在 tail src init lose ati family fin turn 題目大意:一天南北線上有n個防禦站,給出他們之間的位置關系,問有沒有可能存在這樣一種位置布置符合所給的位置關系。關系有兩種,一種是 P A B X,表示A在B北邊X光年的位置,V A B表示

約束系統簡單介紹(入門)

難點 兩個 技術 最短 短路徑 裏的 http 最大值 image 一直不知道差分約束是什麽類型題目,最近在寫最短路問題就順帶看了下,原來就是給出一些形如x-y<=b不等式的約束,問你是否滿足有解的問題 好神奇的是這類問題竟然可以轉換成圖論裏的最短路徑問題,下面開始詳

POJ 2101 Intervals 約束

sub points struct pop lan number 其中 emp following Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 27746 Accepted: 10