最小化总和的元素?

时间:2013-07-10 09:00:43

标签: algorithm dynamic-programming

我发现了一个问题:

Let's consider a vector x = (x1, x2 ... xn) with real elements. 
1). Sort the vector  -- easy
2). Find a real number a so that sum ( abs (xi - a) ) is minim

我不知道对数组进行排序是否有帮助,但是对于2).我认为我可以对向量中的所有元素进行aritmetic sum并说avg是我们正在寻找的那个。

但这不正确。例如:

x = (1, 10, 10)
avg = [ 21/3 ] = 7 = a
sum = |1 - 7| + |10 - 7| + |10 - 7| = 6 + 3 + 3 = 12

但如果我们考虑a = 10,我们得到

sum = |1 - 10| + |10 - 10| + |10 - 10| = 9 < 12

我能想到的另一种解决方案是从最小元素到最高元素的蛮力,步长为i += 0.1

1 个答案:

答案 0 :(得分:4)

您正在寻找median - 而不是平均值。

这是因为您正在寻找的实际上是geometric median - 如果您只有一个维度(并且您确实如此),则恰好是标准中位数。

可以使用Selection AlgorithmO(n)中找到中位数 - 因此排序是多余的。