對於工作計劃應用程序,我需要爲w周(= 7w天)生成大量可能的員工計劃。員工時間表包含計劃期間每天的班次列表(早,晚,晚,休息日)。該應用程序使用Java進行編程。Java:代表大量數據陣列
此時,我表示僱員的時間表如下:
public class Schedule
{
/** List with for every day of planning period the assigned shift */
private Shift[] shiftlist = new Shift[Settings.schedule_days];
/** Cost of schedule (for measuring its quality) */
private double cost;
// A list of variables, representing schedule properties
// which are referenced often.
// E.g.: number of workweekends, number of night shifts
// Also some methods for updating/retrieving information
}
移位是表示所分配的偏移的枚舉,定義爲:
public enum Shift
{
DAY, LATE, NIGHT, FREE;
}
我也有在一些移性質枚舉聲明和方法來比較屬性,但我不認爲這是相關的。
每一個員工都有他可能日程表的列表:
public class Employee
{
/** Large set of possible schedules for planning period */
public LinkedList<Schedule> generated_schedules;
// Variables representing properties of employee
}
我的問題是,我居然有50名員工,我想生成100.000 - 每名員工1.000.000可能的時間表。
計劃實際上是快速生成的,因爲我的計算機中有8GB的可用內存,所以我可以存儲它們中的很多。但是,當完成30-40名員工的生產時,我的記憶會變得充滿。
有人給我的建議是使用一組字符來表示分配的班次,而不是一組枚舉。這將利用更少的空間。 此外,他表示使用char數組列表而不是Schedule對象列表也更好。但是,那麼不可能在計劃附近的某處保存計劃屬性(例如成本),並且他們需要經常重新計算。我認爲這將是一個嚴重的缺點。
這樣的觀察確實有意義嗎?或者您認爲有更好的方式來表達大量的數據以便使用更少的空間嗎?
您是否需要將所有生成的計劃同時保留在內存中?你在跟他們做什麼?是不可能一個接一個地產生和處理它們(並忘記前一個)? – Thilo
這是'[作業]'嗎? –
時間表是根據個人喜好爲單個員工創建的。使用列生成迭代地將選擇的時間表添加到線性程序中。 LP試圖爲每個員工選擇一個名冊,以滿足員工的需求。因此,我需要記憶中的所有時間表。 – user1671257