解决k分区变化的算法

时间:2012-01-27 00:47:20

标签: algorithm

对于我的算法设计课程,家庭作业来自这个脑筋急转弯:

Given a list of N distinct positive integers, partition the list into two 
sublists of n/2 size such that the difference between sums of the sublists 
is maximized.
Assume that n is even and determine the time complexity.

乍一看,解决方案似乎是

  1. 通过mergesort对列表进行排序
  2. 选择n / 2位置
  3. 对于大于的所有元素,添加到高数组
  4. 对于低于的所有元素,添加到低数组
  5. 这将具有O((n log n)+ n)

    的时间复杂度

    这个问题有更好的算法选择吗?

2 个答案:

答案 0 :(得分:8)

由于你可以在O(n)时间内计算中位数,你也可以在O(n)时间内解决这个问题。计算中位数,并将其用作阈值,创建高数组和低数组。

关于计算O(n)时间中位数的http://en.wikipedia.org/wiki/Median_search

答案 1 :(得分:4)

尝试

http://en.wikipedia.org/wiki/Selection_algorithm#Linear_general_selection_algorithm_-_Median_of_Medians_algorithm

你正在做的是找到中位数。诀窍是,一旦找到了值,就不需要对前n / 2和最后n / 2进行排序。