2012-08-08 42 views
3

我的工作任務調度,面臨以下的問題(處理器之間的任務分配):調度:分區是一個整數集成K個子集

有一組N個整數。如何將它們劃分成K個不相交的子集,它們的總和相差很小?

我正在尋找一個簡單的啓發式算法,它具有N = 100-500和K = 10-20的合理計算複雜度。在最佳解決方案中不需要(即和的最小可能差異),粗略的近似就足夠了。

在此先感謝。

回答

2

建設啓發式First FitFirst Fit Decreasing工作良好。

對於First fit Decreasing,首先將大小遞減的部分(在下面的示例中爲A,B,C,D)進行排序,然後將其放入最佳剩餘點(X或Y)中。在下面的示例中,忽略2個維度中的1個(例如,忽略CPU)。

First Fit Decreasing on CloudBalancing

1

即使分割成2是NP完全問題。雖然你可以使用僞多項式時間算法。提到on Wikipedia,假設你有數字總和的上限。

0

事實證明,簡單的greedy algorithm在這種情況下效果很好。

+0

是,雖然貪婪算法不是最佳的全球範圍內,它的工作原理以及在實際系統與啓發式一起。當談到NP問題時,我們無法做得更好。 – 2013-10-17 20:47:23

相關問題