“算法介绍”一书中的“打印整齐”问题通过动态编程解决。这是问题5.3,找到解决方案here
我认为这个问题可以通过贪婪的算法简单地解决。只要尽可能多地在每一行中添加单词,否则你无法适应下一个单词,所以移动到一个新行。
有人可以帮我理解这个解决方案是否足够? (贪婪的算法)
问题在于:打印整齐
考虑在打印机上整齐打印段落的问题。输入文本是n个单词的序列,长度为l1,l2,...,ln,以字符为单位。我们希望将这一段整齐地打印在多行中,每行最多包含M个字符。我们的“整洁”标准如下。如果给定的行包含单词i到j,并且我们在单词之间只留下一个空格,则行尾的额外空格字符数是M与单词中的字符总数加上它们之间的空格之间的差。我们希望最小化除了最后一行之外的所有行的总和,在行的末尾添加额外空格字符的数量。提供动态编程算法,在打印机上整齐地打印n个单词的段落。分析算法的运行时间和空间要求。
答案 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)
贪婪的解决方案在第一行包含更多单词,但实际上会产生更高的总解决方案成本。