你会推荐我使用什么算法来解决以下问题?
我想解决根据所有(或几乎所有)参与者的日历可用性找到适合所有(或几乎所有)参与者的最佳时间段的问题。
我正在使用 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/