首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >最小最大邻接k划分的快速算法

最小最大邻接k划分的快速算法
EN

Stack Overflow用户
提问于 2013-02-02 06:59:27
回答 1查看 1.1K关注 0票数 1

我正在阅读这个http://www.cas.mcmaster.ca/~terlaky/4-6TD3/slides/DP/DP.pdf,并想知道是否存在一个解决分区问题时间复杂度更高的解决方案。

从链接中:

假设给定的非负数排列S {s1,.,sn}和整数k。如何将S切成k或更小的范围,从而使所有范围内的最大和最小?

例如:

S=1,2,3,4,5,6,7,8 9 k=3 通过将S切成这三个区间,最大范围之和(8,9)为17,这是可能的最小值。 1,2,3,4,5-6,7-8,9

链接中提出的算法在O(kn^2)中运行,并使用O(kn)空间。有没有更有效的算法?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-02-07 07:21:21

好吧,很显然这是因为“离题”而关闭的!?但是现在它又恢复了,所以无论如何,我找到了一个二进制搜索答案的解决方案。对不起,我忘记了其中一个约束,即所有整数的和不会超过2^64。所以让C=所有整数的累积和。然后,我们可以使用

bool isPossible(int x)

如果可以将S划分为最大分区和小于X的k个分区,则返回true函数。isPossible(int )可以在O(n)中完成(从左到右添加所有内容,如果它超过x,则创建一个新分区)。因此,总的运行时间是O(n*log)。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14659543

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档