假设我们有一个int数组:a = {2,4,3,5},并且k = 3。
我们可以将数组a分成k(3)个子数组,其中数组的顺序不能改变。每个子数组的总和必须尽可能地低,以便所有子数组中的最大总和尽可能低。
对于上面的解决方案,这将给出{2,4}、{3}、{5},其最大总和为6(4 + 2)。
错误的答案是{2}、{4,3}、{5},因为在这种情况下,最大总和为7(4 + 3)。
我试图创建一种贪心算法,它通过将所有整数相加并将其除以子数组的数量来计算整个数组的平均值。因此,在上面的示例中,这意味着14 / 3 = 4(整数除法)。然后,它将数字添加到计数器中,只要它小于平均数即可。然后,它将重新计算剩余的子数组。
我的解决方案提供了一个很好的近似值,并可用作启发式方法,但不总是会给出正确答案。
有人能帮我设计一种算法,它可以为所有情况提供最优解,并且比O(N²)更好吗?我正在寻找一种时间复杂度约为O(n log n)的算法。
提前感谢!
我们可以将数组a分成k(3)个子数组,其中数组的顺序不能改变。每个子数组的总和必须尽可能地低,以便所有子数组中的最大总和尽可能低。
对于上面的解决方案,这将给出{2,4}、{3}、{5},其最大总和为6(4 + 2)。
错误的答案是{2}、{4,3}、{5},因为在这种情况下,最大总和为7(4 + 3)。
我试图创建一种贪心算法,它通过将所有整数相加并将其除以子数组的数量来计算整个数组的平均值。因此,在上面的示例中,这意味着14 / 3 = 4(整数除法)。然后,它将数字添加到计数器中,只要它小于平均数即可。然后,它将重新计算剩余的子数组。
我的解决方案提供了一个很好的近似值,并可用作启发式方法,但不总是会给出正确答案。
有人能帮我设计一种算法,它可以为所有情况提供最优解,并且比O(N²)更好吗?我正在寻找一种时间复杂度约为O(n log n)的算法。
提前感谢!