[英]Can we solve this using a greedy strategy? If not how do we solve this using dynamic programming?
[英]Can we solve the “printing neatly” problem using a greedy algorithm rather than dynamic programming?
通過動態編程解決了“算法介紹”一書中的“打印整齊”問題。 這是問題5.3,解決方案在這里找到
我認為這個問題可以通過貪婪的算法簡單地解決。 只要盡可能多的單詞每行,你就不能適應下一個單詞,所以移動到一個新的行。
有人可以幫我理解這個解決方案是否足夠? (貪婪的算法)
問題在於:打印整齊
考慮在打印機上整齊地打印段落的問題。 輸入文本是n個單詞的序列,長度為l1,l2,...,ln,以字符為單位。 我們希望將這一段整齊地打印在多行中,每行最多包含M個字符。 我們的“整潔”標准如下。 如果給定的行包含單詞i到j,並且我們在單詞之間只留下一個空格,則行尾的額外空格字符數是M與單詞中的字符總數加上它們之間的空格之間的差。我們希望最小化除了最后一行之外的所有行的總和,在行的末尾添加額外空格字符的數量。 提供動態編程算法,在打印機上整齊地打印n個單詞的段落。 分析算法的運行時間和空間要求。
不,因為貪婪算法經常出現這種情況,現在短視的決定(決定當前行的單詞數量)最終會導致更高的成本。 例如,假設我們每行可以有10個字符。
貪心的解決方案
xx xxx xx cost = 1
xxxxx cost = 125
xxxxx cost = 0 (last line)
好的解決方案
xx xxx cost = 64
xx xxxxx cost = 8
xxxxx cost = 0 (last line)
貪婪的解決方案在第一行包含更多單詞,但實際上會產生更高的總解決方案成本。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.