我正在开发一个事件分发应用程序。我有一个月的大量活动清单。事件对象包含开始和结束时间。
public class Event {
long eventID;
Calendar startTime;
Calendar endTime;
.......
}
我想将上面的列表分成N个部分。
Map<Integer, List<Event>> eventLists;
要求是: 每个区块的大小应该几乎相等,并且每个区域的分布应该在月份中平均分配。
是否有适合解决此问题的众所周知的算法。我希望,如果有人能提供准确的解决方案或对任何众所周知的算法的任何参考。
我正在寻找带有统计分析的算法。
这是我寻求的一个简单例子。但它应该包含统计分析以分配相等的。
Calendar monthStart = EventUtil.getMonthStart();
Calendar monthEnd = EventUtil.getMonthEnd();
Calendar oneDayRange = Calendar.getInstance();
oneDayRange.add(Calendar.DATE, 1);
int index = 0;
while (!monthStart.after(monthEnd)) {
Iterator<Event> it = events.iterator();
while (it.hasNext()) {
Event e = it.next();
if(!e.getStartTime().before(monthStart) && !e.getStartTime().after(oneDayRange)) {
eventLists.get(index % N).add(e);
it.remove();
index++;
}
}
monthStart.add(Calendar.DATE, 1);
oneDayRange.add(Calendar.DATE, 1);
}
非常感谢!
答案 0 :(得分:1)
如果必须考虑事件持续时间,则所描述的问题是partition problem的概括,即NP
- 很难,但承认polynomial time approximation scheme。如果事件持续时间不重要,并且可以在线性时间内完成N
广告位的循环分配。