我们可以使用贪心算法而不是动态编程来解决“打印整齐”问题吗?

时间:2011-08-08 01:06:54

标签: algorithm

“算法介绍”一书中的“打印整齐”问题通过动态编程解决。这是问题5.3,找到解决方案here

我认为这个问题可以通过贪婪的算法简单地解决。只要尽可能多地在每一行中添加单词,否则你无法适应下一个单词,所以移动到一个新行。

有人可以帮我理解这个解决方案是否足够? (贪婪的算法)

问题在于:打印整齐

考虑在打印机上整齐打印段落的问题。输入文本是n个单词的序列,长度为l1,l2,...,ln,以字符为单位。我们希望将这一段整齐地打印在多行中,每行最多包含M个字符。我们的“整洁”标准如下。如果给定的行包含单词i到j,并且我们在单词之间只留下一个空格,则行尾的额外空格字符数是M与单词中的字符总数加上它们之间的空格之间的差。我们希望最小化除了最后一行之外的所有行的总和,在行的末尾添加额外空格字符的数量。提供动态编程算法,在打印机上整齐地打印n个单词的段落。分析算法的运行时间和空间要求。

1 个答案:

答案 0 :(得分:13)

不,因为贪婪算法经常出现这种情况,现在短视的决定(决定当前行的多少字)最终会导致成本增加。例如,假设我们每行可以有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)

贪婪的解决方案在第一行包含更多单词,但实际上会产生更高的总解决方案成本。