Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/360.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
根据单词之间的空格查找文本的宽度(JAVA)_Java_Algorithm_Performance_Matrix_Optimization - Fatal编程技术网

根据单词之间的空格查找文本的宽度(JAVA)

根据单词之间的空格查找文本的宽度(JAVA),java,algorithm,performance,matrix,optimization,Java,Algorithm,Performance,Matrix,Optimization,我一直在研究一个优化问题,这需要我找到一条最长河流的文本宽度。河流被定义为在不同行中仅由1个或更少字符分隔的空间序列。例如,我有以下文本: 这是图片,红色的“x”表示河流 ->河流是不同行中的空间序列,由一个字符向左、向右或无字符分隔。我们想要最长的 文本必须向左对齐,但不能向右对齐,如果不合适,则无法分割单词 为了获得更好的执行效果,我一直在尝试处理每个单词的长度,而不是所有字符的序列,但我无法以这种方式解决问题。我只能考虑测试所有的可能性(最小宽度是最长单词的长度),然后得到更好的,但我认

我一直在研究一个优化问题,这需要我找到一条最长河流的文本宽度。河流被定义为在不同行中仅由1个或更少字符分隔的空间序列。例如,我有以下文本:

这是图片,红色的“x”表示河流

->河流是不同行中的空间序列,由一个字符向左、向右或无字符分隔。我们想要最长的

文本必须向左对齐,但不能向右对齐,如果不合适,则无法分割单词

为了获得更好的执行效果,我一直在尝试处理每个单词的长度,而不是所有字符的序列,但我无法以这种方式解决问题。我只能考虑测试所有的可能性(最小宽度是最长单词的长度),然后得到更好的,但我认为这在时间和空间上都不有效

我不想让你解决这个问题,我只是想知道你是否认为它可以用另一种方式解决。谢谢

编辑:例如,给定一个文本,我想返回河流的宽度和长度。
您无法使此alghoritm更有效,因为我看不到任何模式可以用于“我不必尝试此线宽,它不会给我比此线宽更好的结果”

所以,基本上你必须找到所有线宽的所有解决方案,并采取最好的。唯一的优化是当你从最小的行宽度开始到更大的行宽度,你发现河流的长度超过了将要出现的行数,那么你就不必继续了


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

好吧,我认为没有必要说是,您可以在没有一些提示的情况下,,所以这里您有

我认为你应该从定义你所知道的源于基本问题的规则开始:

假设:

  • 字符串中的任何位置都不会有两个或多个连续空格
  • 不会有单词环绕,因此最小宽度将由最长单词的长度决定
  • 一行末尾的空格不应被视为河流的一部分(我不确定这是否是一条正确的规则,因为你可以想象这样的情况:你有一条6行的河流,而这6行中的一行恰好提前结束,因为下一个单词太长)
  • 您仍然需要找到最长单词的长度,但这仅仅是为了设置开始时的最小宽度

    所以,你知道:

  • 您有一个长字符串,需要包装到至少三条记录中,这样第三条记录至少有两个单词(您需要这样才能创建一条三行的河流,这是最小的,对吗?)
  • 因此,您可以计算任何行的最大长度,即整个字符串的长度-最后两个单词的长度-1 (<代码> 1代码/代码>是前两个单词之间的空白)除以<代码> 2 < /代码> .<
    有了这些假设和事实,您可以简单地将文本循环部署到矩阵中(每个单元格包含一个字符),然后逐行检查您发现符合规则的河流。

    当我们无法想出任何聪明和确定的(暴力除外)方法时,总是有可能尝试使用启发式算法(如“遗传算法”或“模拟退火”),或某种共轭梯度。对不起,我无法从描述中理解“河流”是什么“空间序列”?您的所有空间都是单个的,因此没有“序列”。——“仅由1个或更少的元素分隔”什么是“元素”?一个单词,即一系列非空格?现在所有的空间都被一个“单词”隔开,所以所有的空间都是“被一个元素隔开”的,为什么它们不都是“河流”?--它们怎么能被少于1个元素分开呢?小于1意味着0,如果某个东西被0个元素隔开,即没有元素,那么它们就根本不分开。@安德烈亚斯我同意这个问题并不完全清楚,但根据图片,我相信“河流”必须垂直观察,无论是正下方/正上方还是对角。“1或更小”分隔符表示下面一行上的水平移动。。。这就是我的理解。(我试图解释的内容可能并不比作品一更清楚:))对于其他对“河”的定义有疑问的人,请参见。这是关于通过一个段落,在垂直方向上相互靠近的空间。因此,我们可能想知道为什么第1行的第3个空间和第2行的第3个空间不是河流。“你不能制造……因为我看不到”这有点明确,也许你看不到,但有一种方法。根据数据的大小,暴力算法不能作为一种选择。正如我在上面所评论的,有一整套启发式算法可以用于任何优化问题。