为参与者组找到最佳可能时隙的算法

cdu*_*gan 3 java algorithm scheduling

您建议我使用什么算法来解决以下问题?

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

我正在使用Java并希望能够为这些参与者安排会议.我将参与者的可用性数据分为半小时段.我想找到所有这些参与者都可以参加的时间.

可用性问题看起来像这样

|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  |
Run Code Online (Sandbox Code Playgroud)

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

Sil*_*les 9

可用性计划可以转换为位数组,其中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  |
Run Code Online (Sandbox Code Playgroud)

Person 1的位数组看起来像: 1 | 0 | 1 | 1 | 0 | 1

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