簡體   English   中英

我們可以使用貪心算法而不是動態編程來解決“打印整齊”問題嗎?

[英]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.

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