例如,我说过x1,x2..,xn.
我必须'k'
从这 n 个元素中选择元素,这样——让选定的元素成为y1,y2,y3,..yk
——总和|y1-y2| + |y2-y3| + |y3-y1| + ...
将是最小值。
换句话说,这些K
元素之间的相互差异的总和应该小于或等于任何其他K
元素的选择。
元素x1,x2..xn
未排序,可能包含重复项。
我对此有最基本的解决方案,即对数组进行排序——让排序后的数组为 z——并从 k 个元素的窗口中滑动i = 0 to i = n-k-1
,当它们被排序时,互差值的总和采用以下常见形式:
(k-1)*z[0] + (k-3)*z[1] + (k-5)*z[2] + ........ -(k-1)*z[k-1].
找到最小的相互差异给了我答案。
获得互差的最小总和就足够了,因为其余代码仅将其作为输入。
我需要优化或找到更好的算法来做到这一点。谢谢。