簡體   English   中英

動態編程最佳廣播

[英]Dynamic Programming optimal broadcast

我知道如何以通常的方式解決此問題,而不使用動態編程。 如果您足夠友好地向我解釋解決方案,請給我一個一般的想法/偽代碼。 謝謝你

輸入由序列R = hR0,組成。 ,Rni為非負整數,以及整數k。 Ri代表在時間i(例如從www服務器)請求某些特定信息的用戶數量。

如果服務器在某個時間t廣播此信息,則嚴格滿足在時間t之前請求該信息的所有用戶的請求。 服務器最多可以廣播此信息k次。 目標是選擇k次廣播,以最小化請求/用戶為了滿足其請求而必須等待的總時間(針對所有請求)。

例如,假設輸入為R = 3、4、0、5、2、7(所以n = 6)且k =3。那么一個可能的解決方案(沒有人斷言這是最佳解決方案)將將在時間2、4和7進行廣播(注意,很明顯,如果Rn 6 = 0,則在每個最佳時間表中,在時間n + 1都有廣播)。 那么在時間1的3個請求將不得不等待1個時間單位。 那么,在時間2的4個請求將不得不等待2個時間單位。 那么在時間4的5個請求將不得不等待3個時間單位。 然后,在時間5的2個請求將不得不等待2個時間單位。 那么在時間6的7個請求將不得不等待1個時間單位。 因此,此解決方案的總等待時間為3×1 + 4×2 + 5×3 + 2×2 + 7×1。

I / O描述。 輸入:n和k,在第一行中以一個空格分隔,然后在第二行中以R分隔。 輸出:k次的序列。

  1. 在時間i設置第一個廣播。
  2. 解決R'= {Rj | j> = i}且k'= k-1

當然,您將需要存儲所有子解決方案以使其成為動態編程算法,而不是簡單的遞歸。

請注意,您必須以k-1個廣播時間開始,因為第k個廣播將始終在上次使用非零用戶的時間之后。

問題出在步驟1。您可以嘗試所有可能的位置(最壞的情況是時間復雜度為n * ki認為)。 我建議您首先嘗試這種簡單的方法,在一些數據上對其進行測試,然后看看是否可以找到一種更好的方法來查找第一個廣播的位置。

暫無
暫無

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

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