会议室日程安排问题(最少需要多少个会议室)
按照贪心算法,此问题可以得到最优解!原来是按结束时间排序,但这样的话并不是最少的会议室数(下面有反例)而要得到最少的会议室数,需要将议程时间按开始时间排序。下面是完整的代码:
class Program(object):
def __init__(self, start, end):
self.start = start
self.end = end
def bestArrange(programs, start_time):
"""programs 为项目列表
strat_time 为最早开始的时间"""
programs = sorted(programs, key=lambda x: x.end)#将所有的议程按结束时间排序
# for i in range(len(programs)):
# print(programs[i].start)
res = 0
while True:
temp = []
startTime = start_time#每次循环设置一个初始时间
for i in range(len(programs)):
if startTime <= programs[i].start:
startTime = programs[i].end#下一个议程的开始时间要晚于当前议程的结束时间
else:
temp.append(programs[i])
res += 1
if len(temp) == 0:#当议程全部安排完之后就结束
break
programs = temp
return res
if __name__ == '__main__':
a1 = Program(6, 8)#实例化
a2 = Program(10, 11)
a3 = Program(9, 12)
a4 = Program(11.5, 15)
a5 = Program(13,14)
programs = [a1, a2, a3, a4, a5]
a = bestArrange(programs, 6)
print(a)
上面是按照结束时间排序,则需要的会议室数量是3,而如果按照开始时间排序,得到的结果是2