簡體   English   中英

動態編程問題

[英]Dynamic programming question

我陷入了算法作業問題之一。 誰能給我一些解決的提示? 這是問題:

考慮由加權圖G =(V; E)表示的鏈結構計算,其中V = {v1; v2; ...; vn}和E = {(vi; vi + 1)使得1 <= i <= n-1。 我們還給出了m個相同處理器的鏈結構P = {P1; ...; Pm}(即,在Pk和Pk + 1之間存在1 <= k <= m-1的通信鏈路)。

頂點集合V表示計算模塊,而邊緣集合E表示兩個模塊之間的通信。 每個節點vi被分配一個權重wi,該權重wi表示模塊在單個處理器上的執行時間。 為每個邊緣(vi; vi + 1)分配一個權重ci,表示兩個模塊(如果分配了兩個不同的處理器)之間的通信時間。 如果將多個模塊分配給同一處理器,則分配給同一處理器的模塊必須是連續的。 假設模塊va; va + 1; ..; vb被分配給處理器Pk。 然后,Pk花費的時間(用Tk表示)是計算分配模塊的時間加上在相鄰處理器之間進行通信的時間。 因此,Tk = wa + ... + wb + ca-1 + cb。 請注意,如果a = 1,則ca-1 = 0;如果b = n,則cb = 0。

該問題的目的是找到對P的賦值V,以使max1 <= k <= m Tk最小,其中我們假設每個處理器必須至少采用一個模塊。 (可以通過在計算和通信時間上添加m個權重為零的虛擬模塊來放松這一假設。)開發一種動態編程算法來解決多項式時間(即O(mn))中的這一問題。

我試圖找到每個Pk的最小執行時間,然后找到最大值,但是我懷疑我的解決方案是動態編程,因為沒有遞歸公式。 請給我一些提示! 謝謝!

我認為您也許可以修改Viterbi算法來解決此問題。

好的。 這很容易。 將問題分解為需要最小化的函數,例如F(n,k)。 這導致前n個節點對k個第一處理器的最小分配。 然后像這樣導出您的公式,收集第k個處理器上的節點數。

F(n,k) = min[i=0..n]( max(F(i,k-1), w[i]+...+w[n]+c[i-1]+c[n]) )
c[0] = 0
F(*,0) = inf
F(0,*) = inf

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM