johnson 演算法 貪心

2021-10-07 04:44:17 字數 1322 閱讀 9822

題目

有n個作業要在兩台機器m1和m2組成的流水線上完成加工。每個作業i都必須先花時間ai在m1上加工,然後花時間bi在m2上加工。

確定n個作業的加工順序,使得從作業1在機器m1上加工開始到作業n在機器m2上加工為止的總時間最短。

思路假設a1=1,b1=3,a2=2,b2=4;

如果先加工a1,b1,那麼需要時間1+3+4,如果先加工a2,b2,那麼需要時間2+4+3,這兩者之間的差異**於3-2=1,等待時間為1,4-1=3,等待時間為3,等待時間少的花費時間少,如何減少等待時間呢?不難看出b2-a1,與b1-a2的差異來,也就是說要用a1,b1較小的那個數來減a2,b2中較大的那個數,但是a1,與b1不能交換順序,那麼怎麼實現呢?

可看成兩部分,一部分是a1b1的那部分,a1b1的那部分倒過來看,就是前小後大,那麼就可以看成乙個序列,從兩頭看向中間,都是ai,bi前小後大。

到這裡實際上就可以了,但是,如何證明他的正確性呢?

數學歸納法。

數學歸納法(mathematical induction, mi)是一種數學證明方法,通常被用於證明某個給定命題在整個(或者區域性)自然數範圍內成立。除了自然數以外,廣義上的數學歸納法也可以用於證明一般良基結構,例如:集合論中的樹。這種廣義的數學歸納法應用於數學邏輯和電腦科學領域,稱作結構歸納法。

在數論中,數學歸納法是以一種不同的方式來證明任意乙個給定的情形都是正確的(第乙個,第二個,第三個,一直下去概不例外)的數學定理。 [1]

雖然數學歸納法名字中有「歸納」,但是數學歸納法並非不嚴謹的歸納推理法,它屬於完全嚴謹的演繹推理法。事實上,所有數學證明都是演繹法。

最簡單和常見的數學歸納法是證明當n等於任意乙個自然數時某命題成立。證明分下面兩步:

證明當n= 1時命題成立。

假設n=m時命題成立,那麼可以推導出在n=m+1時命題也成立。(m代表任意自然數)

這種方法的原理在於:首先證明在某個起點值時命題成立,然後證明從乙個值到下乙個值的過程有效。當這兩點都已經證明,那麼任意值都可以通過反覆使用這個方法推導出來。把這個方法想成多公尺諾效應也許更容易理解一些。

按照假設,由2個推向3個,也就是從n個推向n+1個,不難發現上述的解決問題辦法是正確的,

數學歸納法最大的好處是可以由簡單派生,2到3,3到4,只要符合數學歸納法這種證明方法的條件,那麼他就是正確的,***dp問題,層層遞進的問題***用數學歸納法來標尺一下所猜想的方法的正確性,很有效。

最好的一點在於從最簡單的開始出發,使得看上去眼花繚亂的問題安靜了下來,問題最開始的時候,往往是比較簡潔的

最短路 Johnson 演算法

這個演算法可以用於處理稀疏圖,帶有負權的任意兩點間的最短路問題 如果點數 但是dij中不能存在負的邊權,所以我們要考慮一種轉化邊權的方法 可以通過類似差分約束的方法來重構邊權 對一條邊 u,v 他們的權值為e dis i 表示1 i的最短路 我們可以得到dis v dis u e 因此就可以把變成d...

Johnson演算法 多源最短路演算法

請不要輕易點選標題 乙個適用於求可含負邊權的稀疏圖的多源最短路演算法 時間複雜度 o n cdot m cdot log m n cdot m 空間複雜度 o n m 該演算法綜合利用了dijkstra演算法和bellman ford演算法 不要慌,雖然有負邊但dijkstra可以跑 在開始講解之前...

流水作業排程的Johnson 演算法

如果作業i和j滿足,則稱作業i和j滿足johnson不等式。如果作業i和j不滿足johnson不等式,則交換作業i和j的加工次序後,作業i和j滿足johnson不等式。流水作業排程的johnson 演算法 bool compare jobtype a,jobtype b sort使用 按照johns...