Given a non-negative integer $n$ and a positive real weight vector $w$ with dimension $m$, partition $n$ into a length-$m$ non-negative integer vector that sums to $n$ (call it $v$) such that $w\cdot v$ is the smallest. There maybe several partitions, and we only want the value of $w\cdot v$.
Seems like this problem can use a greedy algorithm to solve. From a target vector for $n-1$, we add 1 to each entry, and find the minimum among those $m$ vectors. but I don't think it's correct. The intuition is that it might add "over" the minimum. That is, there exists another partition not yielded by the add 1 procedure that falls in between the "minimum" of $n-1$ produced by this greedy algorithm and that of $n$ produced by this greedy algorithm. Can anyone prove if this is correct or incorrect?
CodePudding user response:
Without loss of generality, assume that the elements of w
are non-decreasing. Let v
be a m
-vector whose values are non-negative integers that sum to n
. Then the smallest inner product of v
and w
is achieved by setting v[0] = n
and v[i] = 0
for i > 0
.
This is easy to prove. Suppose v
is any other vector with v[i] > 0
for some i > 0
. Then we can increase v[0]
by v[i]
and reduce v[i]
to zero. The elements of v
will still sum to n
and the inner product of v
and w
will be reduced by w[i] - w[0] >= 0
.