任務0 - 按照非遞減順序對象的位置
讓我們定義'center'
爲對象的位置,在其shifted to.
現在我們有兩點看法;
For N positions the 'center' would be the position which is nearest to the mean of these N positions.
例如,讓1,3,6,10爲位置。然後mean = 5.最近的位置是6.因此,這些元素的中心是6.當所有元素需要分組到1組時,這給我們移動成本最小的位置。
設N個位置分組爲K個「最佳」組。 When N+1 th object is added
,那麼它會擾亂僅第K個組,即,first K-1 groups will remain unchanged.
從這些觀察,我們建立了一個動態規劃方法。
Let Cost[i][k] and Center[i][k] be two 2D arrays.
Cost[i][k] = minimum cost when first 'i' objects are partitioned into 'k' groups
Center[i][k] stores the center of the 'i-th' object when Cost[i][k] is computed.
Let {L} be the elements from i-L,i-L+1,..i-1 which have the same center.
(Center[i-L][k] = Center[i-L+1][k] = ... = Center[i-1][k])
這些都是需要在計算被考慮第i個元素(從觀察2)現在
Cost[i][k] will be
min(Cost[i-1][k-1] , Cost[i-L-1][k-1] + computecost(i-L, i-L+1, ... ,i))
Update Center[i-L ... i][k]
computecost唯一對象()可以通過找到中心而輕鬆找到(來自觀察1)
時間複雜度:
Sorting O(NlogN)
Total Cost Computation Matrix = Total elements * Computecost = O(NK * N)
Total = O(NlogN + N*NK) = O(N*NK)
是不是:Set :: [1,2,5,9] --->分成2組::: Min Moves = 1 + 3 = 4? –
不是,在位置2會有2個元素.....所以Moves = 1 + 3 * 2 = 7 – Leopard
爲什麼你不能移動5和1到2? –