我正在尝试解决一个问题,但不幸的是我的解决方案并不是最好的。
任务:
在一个聚会上,有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
第一行是客人数量,后续数据是派对上人数的间隔。