2010-12-16 62 views
2

我有許多類別,每個類別都有一些元素。我現在正在尋找一種編程算法來將這些類別分佈在預定義數量的列中,而不會打亂類別,保持類別順序,並儘可能優化每列中元素的數量。編程算法:如何均勻分佈列間的類別

例如: 分配5個類別橫跨3列

Data: 
category A, 7 elements 
category B, 7 elements 
category C, 3 elements 
category D, 2 elements 
category E, 8 elements 

結果:

Column 1: category A, 7 elements 
Column 2: category B and C, 10 elements 
Column 3: category D and E, 10 elements 
+0

你如何定義最優?你的數據有多大(是蠻力的選擇)? – 2010-12-16 10:50:18

+0

我認爲最優化的定義是每列元素和總元素之差除以數列的差異儘可能小。我認爲蠻力是一個選項,我期望可能有100列和1000個元素。 – vdrmrt 2010-12-16 10:59:13

回答

3

你必須元素的總數,這樣你就可以通過列的數除以數量獲取每列中預期的元素數量。然後,你的工作就是儘量減少差異的平方和(因此,如果你必須存儲8個元素並存儲10個元素,那麼這個列的平方差爲2 2 = 4)。

然後,您可以編寫一個遞歸函數,爲每個類別決定是將該類別移動到下一列,還是將其保留在當前列中。這是一個布爾決策,因此您可以從創建最小差異的分支開始,然後創建最大的分支。該函數將跟蹤到目前爲止找到的最佳解決方案,如果當前的平方和差大於該解決方案的總和,則立即停止。

+0

正方形背後的想法是什麼? – vdrmrt 2010-12-16 11:01:39

+0

具有線性差異,9個完美的列和10列的一列將相當於十列之一。正方形差異懲罰大大不同的列值,所以錯誤最終均勻分佈。 – 2010-12-16 11:07:07

+0

得到它的工作,但我做了蠻力計算每個組合的平方和。它現在運行在PHP上,它不是快速點亮,但如果使用少於100個類別,它應該足夠了。 – vdrmrt 2010-12-20 10:55:35