有一个线性时间算法可以将文本均匀地分成最大宽度的行。它使用SMAWK(或Knuth&Plass),“ evenly”的意思是:http : //en.wikipedia.org/wiki/Word_wrap#Minimum_raggedness
是否有一种算法或该算法的凹成本函数可以在其中考虑我希望文本插入的行数,而不是最大行宽?也是线性时间?
换句话说,我正在寻找一种换行(或段落形成或自动换行)算法,其中输入是所需的行数,而不是所需的行宽。
仅描述一种实际上不可用的方法:每个单词对之间有N个单词和N-1个空格,M是所需的行数(M <= N)。每个空格之后最多可能有一个(可能为零)换行符。现在,该算法将尝试将中断放置在每个可能的组合中,计算“参差不齐”并返回最佳组合。如何更快地做到呢?
另外,这样的问题有名字吗?问题属于什么“家庭”?(例如“装箱”)如果我不需要一个完美的最佳解决方案,那只是一个非常好的解决方案,是否可以更快地解决呢?(如果对于给定的输入总是有相同的,可能不是最优的解决方案,则可以使用某种形式的试探法)。
更新资料
钱德拉·切库里(Chandra Chekuri)提出了“在动态编程的Kleinberg和Tardos一章中的一个问题”。这是一本不错的书,但它基于宽度而不是行数来处理换行。我现在正在尝试解决这个问题,它可能适用于此问题。这是解决方案的一个很好的链接,他们甚至声称可以在线性时间内解决它:http : //web.media.mit.edu/~dlanman/courses/cs157/HW5.pdf
而且,Skiena的《算法设计手册》中有一章“ 8.5分区问题”,这似乎正好是主题,我仍然很难读。(不幸的是,据我了解,它具有二次时间复杂度)