我正在尝试解决一个问题,但不幸的是我的解决方案对于这项任务来说并不是最好的。
任务:
在一次聚会上,有 N 位客人(0 < N < 30000)。所有客人都告知他们何时参加派对以及何时离开(例如 [10;12])。任务是在聚会上为尽可能多的人拍照。在一张照片上只能有 2 个人(一对),每个人只能在一张照片上。当然,只有在两个人同时在聚会时才能拍照。当他们的出勤间隔重叠时就是这种情况。
我的想法:我写了一个程序,它从间隔创建一个连接图。从图中我搜索连接数最少的人。从关联的人中,我还选择了关联最少的人。然后这两个被选为照片上的一对。两者都从图中删除。该算法一直运行到没有连接为止。
这种方法有效,但是程序计算有 10 秒的限制。如果有 1000 个条目,它会在 2 秒内运行,但即使有 4000 个条目,它也需要很长时间。此外,当我尝试使用 25000 个数据时,程序因内存不足错误而停止,因此我什至无法正确存储连接。
我认为这里需要一种新方法,但我找不到其他方法来完成这项工作。
谁能帮我找出适合这项任务的算法?
非常感谢你!
样本数据:
10
1 100
2 92
3 83
4 74
5 65
6 55
7 44
8 33
9 22
10 11
第一行是客人的数量,进一步的数据是参加聚会的人的间隔。