2015-09-25 65 views
0

我有固定數量的列,必須填入數據集(如果可能)。的要求是,所述數據被填充上下,左右計算數據點的行和列

這樣,例如,給定的,我有4列,和第6個數據點,該表必須填寫這樣

1 3 5 6 
2 4 

或3列和7個數據點

1 4 7 
2 5 
3 6 

我試圖計算此的多種方式,如果我是在高中的時候,他可能能夠解決它在瞬間。但我老了,灰色,我的數學不如它;

希望任何指針。非常感謝。

+1

有什麼要求?例如。爲什麼第二個例子不是'{1,2,3},{4,5},{6,7}'或'{1,2,3,4,5},{6},{7}'? –

+0

感謝您的回覆。要求a)確保填滿所有欄目,並且b)垂直填充,然後水平填充。因此,對於第二個例子,因爲必須填充3列,所以需要三行 – jmls

+0

爲什麼它必須是3行?我提出的另外兩個例子還填充了三列(用'{}'括起來的數字應該在同一列)? –

回答

0

我假設通過「儘可能多地填充」你的意思是填充單元格的百分比儘可能大。這個問題通常沒有獨特的解決方案,但可以使用以下算法找到a解決方案。

我進一步假設n是條目數,c的列數和r的行數。

r = ceil(n/c) 
remainingAdditionalEntries = n - c 
optimalAdditionalEntries = r - 1 
nextEntry = 0 
for iC from 0 to c - 1 
    grid[iC][0] = nextEntry++ 
    additionalEntries = min(remainingAdditionalEntries, optimalAdditionalEntries) 
    for iR from 1 to additionalEntries 
     grid[iC][iR] = nextEntry++ 
    next 
    remainingAdditionalEntries -= additionalEntries 
next 

該算法假定在每列中至少有一個條目。只要它們存在,剩餘的單元格可以由其他條目填充。