【问题标题】:Minimizing total empty space in a paragraph - algorithm最小化段落中的总空白空间 - 算法
【发布时间】:2018-11-08 22:08:59
【问题描述】:

对于一个应用程序,我想找到一种方法,通过惩罚来最小化段落每行末尾的总空白空间。我有一组单词W = [w1, w2, w3, ..., wn],它们构成了我希望段落包含的文本,并且每个单词wi都有对应的长度li。我也知道一行可以容纳的最大字符数,包括空格:m。我不能连词。

在这种情况下,我定义了一个关系,该关系描述了以单词i 开头并以单词j 结尾的行的空白空间成本由c(i, j) = (m - (j - i) - sum_{k=i}^{k = j}lk)^3 给出。所以c(i, j)必须是正数,否则我需要换行,如果j = n,我不罚最后一行的空格:c(i, n) = 0

有了这个参数,我找到了一种算法,可以在传递到下一行之前最小化每行的成本并计算总成本。但是,每条线的成本最小化并不一定意味着总成本也最小化。

我能想到的将总成本降至最低的任何过程都需要对每行中的单词数进行大量排列,因此无法实现。关于计算最小成本的可行算法的任何想法?

【问题讨论】:

标签: algorithm optimization pseudocode paragraph


【解决方案1】:

G为一个图,其中每个顶点V_x_y代表一个由y行组成的部分段落,总共使用了 x 个单词。如果 z > x 和单词 w_(x+1),则图具有从 V_x_yV_z_(y+1) 的边w_z 适合一行。每条这样的边都有成本c(x+1,z),即它所代表的附加线的成本。

现在,您的问题是找到从 V_0_0 到消耗所有单词的顶点 V_n_y 的成本最低的路径。

您可以使用 Dijkstra 算法在 O(n^2 log n) 时间或更短的时间内找到该路径,或者如果您制定了一个体面的可接受启发式算法,则可以更快地找到它。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-07-12
    • 2017-01-04
    • 1970-01-01
    • 2014-02-10
    • 1970-01-01
    • 1970-01-01
    • 2014-02-07
    • 2012-04-09
    相关资源
    最近更新 更多