【发布时间】:2018-10-29 09:28:26
【问题描述】:
我一直在研究一个优化问题,这需要我找到一个文本的宽度,它给了我最长的河流。河流被定义为在不同行中仅由 1 个或更少字符分隔的空格序列。例如,我有以下文字:
这是图片,红色的“x”表示河流。
-> 河流是不同行中的一系列空格,它们由一个字符分隔,向左、向右或无。我们想要最长的。
文字要左对齐,不能右对齐,不合适的词不能分割。
我一直在尝试使用每个单词的长度,而不是所有字符序列,以便更好地执行,但我无法以这种方式解决问题。我只能想到测试所有的可能性(最小宽度是最长单词的长度),并得到更好的,但我认为这在时间和空间上都不是有效的。
我不想让你解决这个问题,我只是想知道你是否认为它可以用另一种方式解决。谢谢!
【问题讨论】:
-
当我们想不出任何聪明和确定性(除了蛮力)的方法时,总是有可能尝试启发式算法(如“遗传算法”或“模拟退火”),或一些共轭梯度的味道。
-
很抱歉,我无法从该描述中弄清楚“河流”是什么。 --- “空格序列”?你所有的空间都是单一的,所以没有“序列”。 --- “仅由 1 个或更少的元素分隔” 什么是“元素”?一个词,即一系列非空格?现在所有的空格都被一个“单词”隔开,所以所有的空格都“被1个元素隔开”,那为什么不都是“河流”呢? --- 他们怎么可能被“少于”一个元素分开?小于 1 表示 0,如果某物被 0 个元素分隔,即没有元素,则它们根本没有分隔。
-
@Andreas 我同意这个问题并不完全清楚,但根据图片我相信“河流”必须垂直观察,无论是正下方/正上方还是对角线。 “1 或更少”的分隔代表下一行的水平移位……这是我的理解。
-
(我的解释尝试可能并不比 OP 更清楚 :))
-
对于其他对“河流”定义有疑问的人,请参阅Wikipedia。它是关于通过段落垂直彼此靠近对齐的空间。因此,我们可以想知道为什么,例如第 1 行的第 3 个空格和第 2 行的第 3 个空格不是河流。
标签: java algorithm performance matrix optimization