【发布时间】:2021-11-11 06:24:47
【问题描述】:
我有一个带有正数的多集 S,我想将它划分为 K 个子集,以便最小化分区总和之间的差异。解决上述问题的一种简单启发式方法是贪心算法,它遍历按降序排序的数字集,将它们中的每一个分配给具有较小数字总和的子集。我的问题是为什么这个贪心算法的时间复杂度是 O(nlog(n))?
【问题讨论】:
-
O(n log n) 是对数字列表进行排序的成本。
-
谢谢。这种排序看起来像合并排序吗?我在排序列表上有一个 for 循环,所以它是 log(n) 复杂度。但我不明白为什么找到最小的数字总和具有 O(logn) 复杂度。
-
你使用什么排序算法并不重要。最好的采用 O(n log n)。找到最小的数字总和需要 O(log K),但你必须这样做 n 次,所以 O(n log K) 一起。查看@trincot 的回答