【问题标题】:Finding the width of a text depending on spaces between words (JAVA)根据单词之间的空格查找文本的宽度(JAVA)
【发布时间】: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


【解决方案1】:

好吧,我认为在没有提示的情况下说 是的,你可以,所以在这里你有......

我认为你应该首先定义你所知道的从基本问题衍生的规则:

假设:

  1. 字符串中的任何位置都不会有两个或多个连续的空格,
  2. 不会有自动换行,因此最小宽度将由最长单词的长度决定,
  3. 线末端的空白不被视为河流的一部分(我不确定这是否是正确的规则,因为您可以想象您有 6 条河流和其中一条线的情况6 恰好因为下一个单词太长而提前结束)。

您仍然需要找到最长单词的长度,但这只是为了设置最小宽度开始。

所以,你确实知道:

  1. 您有一个长字符串,需要包装到至少三个记录中,这样第三条记录至少有两个单词(您需要这个来启用潜在创建 3 行河流,这是最小的,对吗?),
  2. 因此,您可以计算任何行的最大长度,即length of the whole string - length of the last two words - 11 是最后两个单词之间的空格)除以2

有了这些假设和事实,您可以简单地将文本循环部署到一个矩阵中(每个单元格包含一个字符)并逐行检查您发现遵守规则的河流。

【讨论】:

    【解决方案2】:

    你不能让这个算法更有效,因为我没有看到任何可以用来“我不必尝试这个线宽,它不会给我比这个线宽更好的结果”的模式。

    所以基本上你必须尝试找到所有线宽的所有解决方案并采取最好的办法。唯一的优化是当您从最小的线宽开始到更大的线宽并且您发现河流的长度超过了将要出现的行数时 - 然后您不必继续。

    例如 - 如果您找到最长的河流,值为 4 并且您的线宽达到 4 行,您可以停止它,因为您找不到更长的河流。

    【讨论】:

    • "You can't make ... as I do not see" 这有点明确,也许你看不到,但有办法。根据数据的大小,暴力算法可能不是一种选择。正如我在上面评论的那样,有一大堆启发式算法可用于任何优化问题。
    猜你喜欢
    • 2013-04-04
    • 1970-01-01
    • 1970-01-01
    • 2014-11-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-12
    • 2011-05-06
    相关资源
    最近更新 更多