java - 为一组参与者找到最佳时间段的算法

标签 java algorithm scheduling

你会推荐我使用什么算法来解决以下问题?

我想解决根据所有(或几乎所有)参与者的日历可用性找到适合所有(或几乎所有)参与者的最佳时间段的问题。

我正在使用 Java,并希望能够为这些参与者安排 session 。我将一天的参与者可用性数据分成半小时。我想找一个所有这些参与者都有空的时间。

可用性问题是这样的

|Participant   | 09:00 | 09:30 | 10:00     | 10:30 | 11:00 | 11:30 |
|Person 1      | Free  | Busy  | **Free**  | Free  | Busy  | Free  | 
|Person 2      | Free  | Busy  | **Free**  | Free  | Busy  | Busy  | 
|Person 3      | Free  | Busy  | **Free**  | Free  | Busy  | Busy  | 
|Person 4      | Free  | Busy  | **Free**  | Free  | Busy  | Busy  | 
|Person 5      | Free  | Busy  | **Free**  | Free  | Busy  | Free  |

我想选择适合每个人的时间段。理想情况下,我希望算法至少选择一个选项。然后,我可以对所选时间应用约束以找到最佳时间。

最佳答案

可用性计划可以转换为 array of bits ,其中 Free 为 1,Busy 为 0。我在下面指定了一个示例作为指南:

|Participant | 09:00 | 09:30 | 10:00 | 10:30 | 11:00 | 11:30 |
|Person 1    | Free  | Busy  | Free  | Free  | Busy  | Free  |

Person 1 的位数组如下所示:1 | 0 | 1 | 1 | 0 | 1

由于您以 30 分钟为增量设置周期,因此对于 24 小时时间范围,您的位数组的大小不会超过 48。在 Java 中,一个 long 数据类型就足以保存这个位数组的值。将每个参与者的可用时隙转换为位数组。然后,将按位运算符 AND 应用于每个参与者的可用时间表的位数组表示。生成的位数组将是所有参与者的共同空闲时间。

关于java - 为一组参与者找到最佳时间段的算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17522498/

相关文章:

java - For Loop 不会破坏 Java 吗?

javascript - 使用 lodash 将字符串数组转换为树对象的最有效方法是什么?

bool 可满足性的类调度[多项式时间缩减]

algorithm - 任务/作业调度问题

java - 从 x/y 位置在网格上的平铺 ID

java - 使用 DateTimeFormatter 进行简单的自定义格式设置

algorithm - 帮助理解交叉验证和决策树

algorithm - 匈牙利算法和多重因素

Java创建新对象的性能

java - 在旋转数组中找到最小值。了解实现