gpt4 book ai didi

algorithm - 将数组拆分为具有相似权重的子数组

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:53:29 25 4
gpt4 key购买 nike

我有一个 n 正数数组。我需要将它拆分成 N 个连续的子数组; n > N.

我需要最小化[max S(j) over j] - [min S(j) over j],其中S(j)表示j-th子数组中元素的总和,(j = 1,...,N)

即,所有子数组的元素总和应该“相同”。

我确定这个问题是已知的。有人可以向我指出算法、实现或出版物吗?

最佳答案

这个问题等同于在所有 j 上找到 max S(j) 的最小值

直觉:

  • 假设所有可能的 max S(j) over all j 的最小值是 xmax,所以结果将是 xmax - xmin.

  • 假设,另一个可以为我们提供更好结果的 ymax > xmax,这意味着 ymax - ymin <xmax - xmin -> ymin > xmin -> min S(j) - ymax > min S(j) - xmax,这是不应该发生的。

因此,问题归结为在所有 j 上找到 max S(j) 的最小值

这可以通过使用二分查找来解决。假设整个数组的总和是X,那么我们有我们的算法:

int start = 0;
int end = X;
int result = 0;
while(start <= end){
int mid = (start + end)/2;
for(int i = 0; i < n; i++){
if sum of current segment > mid
split

}
if total segment > N
start = mid + 1;
else
update result;
end = mid - 1;
}

关于algorithm - 将数组拆分为具有相似权重的子数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52960062/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com