java - 平均分配算法

标签 java algorithm distribution mathematical-optimization numerical-methods

我正在开发事件分发应用程序。我有一长串一个月的 Activity list 。事件对象包含开始时间和结束时间。

public class Event {
    long eventID;

    Calendar startTime;
    Calendar endTime;

    .......
}

我想将上面的列表分成 N 个部分。

Map<Integer, List<Event>> eventLists;

要求是: 每个 block 的大小应该几乎相等,并且每个部分的分布应该在一个月内均匀分布

是否有适合解决此问题的众所周知的算法。如果有人可以提供准确的解决方案或对任何众所周知的算法的任何引用,我更愿意。

我正在寻找一种具有统计分析的算法

这是我寻找的一个简单示例。但它应该包含统计分析以平均分配。

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);
}

非常感谢!

最佳答案

如果必须考虑事件持续时间,则所描述的问题是 partition problem 的概括。 ,这是 NP-hard,但承认 polynomial time approximation scheme .如果事件持续时间不重要,并且可以在线性时间内完成对 N 时隙的循环分配。

关于java - 平均分配算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29581289/

相关文章:

c - C中有向图中的DFS遍历

cocoa - 创建 DMG 文件

java - 55 分钟从命令行发布一个简单的项目到 google app engine

java - Spring 3 绑定(bind)模糊了命令对象的真实值

java - 当我从 Android 向 Flask Web 服务发送参数时,如何解决 "Failure in SSL library"?

java - 问题插入heapsort

java - 获取广告客户 ID 时出错

c++ - vector 的 std::copy 无法正常工作

iphone - 有没有办法让非开发人员发布 iPhone 应用程序?

delphi - Delphi中卡方分布函数的代码