2012-03-01 55 views
2

有一个线性时间算法(或二次时间算法由Knuth的&赛普拉斯)。它采用SMAWK和“均匀”是指:
http://en.wikipedia.org/wiki/Word_wrap#Minimum_raggedness打破文本均匀成最大宽度的线均匀地打破文本到一定数目的行

是否有一个算法或算法上方将考虑我想文打入的行数凹成本函数,而不是最大线宽度?

换句话说,我正在寻找一个线断裂(或段的形成,或换行)算法,其中所述输入是线的所希望的数量,而不是所期望的线宽度。

只是为了描述实际上不可用的方法:每个字对之间有N个字和N-1个空格,M是所需的行数(M < = N)。每个空间之后可能最多只有一个(可能为零)换行符。现在,算法会尝试在每个可能的组合中放置中断,计算“粗糙”并返回最好的一个。如何更快地做到这一点?

+0

你能对“毛糙”解释一下吗?你如何确定哪个结果比另一个更好?没有评估 - 你可能只是返回一个随机插入的换行符,但我认为情况并非如此。 – amit 2012-03-01 18:53:03

+0

文本左对齐 - 也就是说,右边可能有剩余的空白,我们称之为废物。换句话说,浪费是最大(最佳,理想)线宽与实际线宽之间的差异。现在我们计算废物的平方根,所以我们惩罚真正错误的东西,将所有废物平方相加在一起,这就是“粗糙”。我们只是尽量避免差距,即我们希望线条尽可能具有相似的宽度。顺便说一句,这一切都在上面的维基百科链接。 – 2012-03-01 19:02:21

回答

0

你可以简单地实现降低线的给定数量通过计算最大长度由您想要的行数除以该字符串的总长度的最大长度后断裂线的问题的问题。由于在许多情况下线的实际长度将小于最大长度,因此您可能需要从所需线数中减去1。

+0

问题是,这样的方法保证不会少于行的商,即它可能发生在那里将会多一些。例如:我想6线和文字是一个'AAAAA AAAAAA AAAAA AAAAAAAAA AAAAAAA AAAAAAAAAAA AA A A A A○○○○○○○○AAAAAAA aaaaaaa'但它创建8行。 – 2012-03-01 23:40:03

+0

是的,因此我的建议是减去1.除非你有很短的文字(或很长的单词),否则在实践中你可能会很好。 – 2012-03-02 08:51:00

+0

我的观点是,减法显得相当随意:它并不适用于3行工作,'AAAAA AAAAA AAAAAAAAA AAAAAAAAA AAAAAAAAA一个一个AAAA AAAAAAAAA AAA aaaaaa' – 2012-03-02 14:07:45