根据单词之间的空格查找文本的宽度(JAVA)
我一直在研究一个优化问题,这需要我找到一条最长河流的文本宽度。河流被定义为在不同行中仅由1个或更少字符分隔的空间序列。例如,我有以下文本: 这是图片,红色的“x”表示河流 ->河流是不同行中的空间序列,由一个字符向左、向右或无字符分隔。我们想要最长的 文本必须向左对齐,但不能向右对齐,如果不合适,则无法分割单词 为了获得更好的执行效果,我一直在尝试处理每个单词的长度,而不是所有字符的序列,但我无法以这种方式解决问题。我只能考虑测试所有的可能性(最小宽度是最长单词的长度),然后得到更好的,但我认为这在时间和空间上都不有效 我不想让你解决这个问题,我只是想知道你是否认为它可以用另一种方式解决。谢谢 编辑:例如,给定一个文本,我想返回河流的宽度和长度。根据单词之间的空格查找文本的宽度(JAVA),java,algorithm,performance,matrix,optimization,Java,Algorithm,Performance,Matrix,Optimization,我一直在研究一个优化问题,这需要我找到一条最长河流的文本宽度。河流被定义为在不同行中仅由1个或更少字符分隔的空间序列。例如,我有以下文本: 这是图片,红色的“x”表示河流 ->河流是不同行中的空间序列,由一个字符向左、向右或无字符分隔。我们想要最长的 文本必须向左对齐,但不能向右对齐,如果不合适,则无法分割单词 为了获得更好的执行效果,我一直在尝试处理每个单词的长度,而不是所有字符的序列,但我无法以这种方式解决问题。我只能考虑测试所有的可能性(最小宽度是最长单词的长度),然后得到更好的,但我认
您无法使此alghoritm更有效,因为我看不到任何模式可以用于“我不必尝试此线宽,它不会给我比此线宽更好的结果” 所以,基本上你必须找到所有线宽的所有解决方案,并采取最好的。唯一的优化是当你从最小的行宽度开始到更大的行宽度,你发现河流的长度超过了将要出现的行数,那么你就不必继续了
例如,如果您找到了最长的河流,其值为4,且线宽达到了4行,您可以停止它,因为您找不到更长的河流。好吧,我认为没有必要说是,您可以在没有一些提示的情况下,,所以这里您有 我认为你应该从定义你所知道的源于基本问题的规则开始: 假设:
有了这些假设和事实,您可以简单地将文本循环部署到矩阵中(每个单元格包含一个字符),然后逐行检查您发现符合规则的河流。当我们无法想出任何聪明和确定的(暴力除外)方法时,总是有可能尝试使用启发式算法(如“遗传算法”或“模拟退火”),或某种共轭梯度。对不起,我无法从描述中理解“河流”是什么“空间序列”?您的所有空间都是单个的,因此没有“序列”。——“仅由1个或更少的元素分隔”什么是“元素”?一个单词,即一系列非空格?现在所有的空间都被一个“单词”隔开,所以所有的空间都是“被一个元素隔开”的,为什么它们不都是“河流”?--它们怎么能被少于1个元素分开呢?小于1意味着0,如果某个东西被0个元素隔开,即没有元素,那么它们就根本不分开。@安德烈亚斯我同意这个问题并不完全清楚,但根据图片,我相信“河流”必须垂直观察,无论是正下方/正上方还是对角。“1或更小”分隔符表示下面一行上的水平移动。。。这就是我的理解。(我试图解释的内容可能并不比作品一更清楚:))对于其他对“河”的定义有疑问的人,请参见。这是关于通过一个段落,在垂直方向上相互靠近的空间。因此,我们可能想知道为什么第1行的第3个空间和第2行的第3个空间不是河流。“你不能制造……因为我看不到”这有点明确,也许你看不到,但有一种方法。根据数据的大小,暴力算法不能作为一种选择。正如我在上面所评论的,有一整套启发式算法可以用于任何优化问题。