100分求会议安排问题,高人乱入!谢

13661023811 2010-12-21 05:13:14
问题描述:

共有7天会议安排,每天均有不同的会议,比如第一天有4、5、6、7、8、9、10个小时的会议(时间均重叠,必须安排不同会场,以下各天都一样时间重叠)

第二天有4、4、8、9、11个小时的会议,第三天是 3、6、6、10,第四天3、4、4、5、6、9、10、11,第5天4、5、5、7、10

第六天 5、5、8、9、10,第7天总结会 3、3、4、4、5、6、6、6

要求:同一会场,连续3天,必须停1天,进行整理,搞卫生
同一会场,7天内总共会议时间不能超过38小时,否则,用电超标。

求:最少需要多少会场?
这些会场都安排了哪些会议?


想用贪心,无奈“连续3天,必须停1天”这个条件无法实现,各位达人多多教诲!!!谢谢!
...全文
323 24 打赏 收藏 转发到动态 举报
写回复
用AI写文章
24 条回复
切换为时间正序
请发表友善的回复…
发表回复
13661023811 2011-01-19
  • 打赏
  • 举报
回复
我用了GA,反复测试,均收敛于181场
13661023811 2011-01-19
  • 打赏
  • 举报
回复
这里,纵横都有约束,还有一个每3天停1天的约束,初看像多选择分组背包,还像装箱问题,貌似平摊问题,又似规划问题,考虑来考虑去,应该都不是,其实就应该是一个优化组合问题。
13661023811 2011-01-19
  • 打赏
  • 举报
回复
TO ousyuryu
是每天128个会议,共7天。

我的思路:
每天均128个会议,记s1=128
7天共有7X128个会议,由于3天就停1天,所以记s2=int(7X128/6)
7天每场不能超38小时,记s3=int(sum()/38)

所以,理想的值至少是,max(s1,s2,s3)

原题算出来的这个值是179.42,合180场

rtuba 2011-01-18
  • 打赏
  • 举报
回复
[Quote=引用 17 楼 13661023811 的回复:]

大侠rtuba 的解法 我试了一下,貌似不是最优解。
基本思路还是 贪心+回溯
实际输入的是一个txt,会议时间和安排要多一些,(128X7)的一个矩阵,我举的这个例子也有问题,好像没有用的38小时的限制条件
[/Quote]

这个题目要找最优解的话恐怕很难,从动态规划的角度考虑不好处理“最多连续3天”这个条件。如果确实有解,我给的方法可以非常快地找出第一个解,从查找策略上也可以保证是较优的(如果“优”的判定是以各个会议室所用小时数的方差来判定的话)。非要找到最优解的话可以持续遍历(即使找到解也回溯),但即使这个方法中已经“剪”掉了大量的废枝,仍然会需要很大的计算量。我试了一下,题目中除了第一天有35个待定会议,第1个解回溯6次找到(41次选择),第2个解52次,第3个解28万次,完全遍历完毕的话是1297万次。注意这里的3个解是代表解,局部交换一些安排(一天内相同已连续使用天数那些房间的安排可以相互交换)会产生大量的衍生解,这些衍生解不会比代表解更优。

这个方法有一个隐忧是,它是尽量保证每天安排之后各个会议室所有时间都是接近的。这样如果最后一天某个会议时间比其他的大很多,很可能导致那一天的使用时间会相当多。这样可能会需要2到3天会议安排的回溯来平衡这个差异,这个计算量应该是可以承受的。
ousyuryu 2011-01-18
  • 打赏
  • 举报
回复
楼主能再描述一下你的需求吗?

从你举的例子来看找不到共性的东西。

128*7的矩阵,是不是说每天最多7次会议
计算128天内的会议所需的最少会场数呢。

时间一定都是互相重叠的吗?用不用考虑不重叠的情况,每天几次会议和每次会议时长是不定的吧。

你的需求是不是针对一个128*7的会议时间表,来给出一个最合理的会场安排呢?


13661023811 2011-01-18
  • 打赏
  • 举报
回复
大侠rtuba 的解法 我试了一下,貌似不是最优解。
基本思路还是 贪心+回溯
实际输入的是一个txt,会议时间和安排要多一些,(128X7)的一个矩阵,我举的这个例子也有问题,好像没有用的38小时的限制条件
ousyuryu 2011-01-18
  • 打赏
  • 举报
回复
留名待解~
rtuba 2011-01-18
  • 打赏
  • 举报
回复
先确定最小可能的房间数:首先房间数至少要等于会议最多的那一天的会议个数,在这个题目中第4天有8个会议所以房间数至少是8。然后用8这个数字从会议个数的角度来检查是否有连续4(=3+1)天的会议无法安排。例如题目中,最后连续4天的会议个数是8,5,5,8。如果只安排8个房间,那么第2天至少有5个房间已经连续开了两天会,第3天至少有(5+5)-8=2个房间连续开了3天会,第4天至少有(2+8)-8=2个房间连续开4天会,这就说明8个房间是不够的。

找到了最小可能房间数后,再从具体的安排上看是否有解,无解的话继续增加房间数。下面考虑给定房间数后如何试图找到满足条件的安排。类似于贪心的概念,其实只不过是有策略的暴力搜索,避免遍历那些大量的稍有不同但其实“结构”完全一样的解。

很显然,如果把房间号标记成0,1,2,..,R,那么我们可以假定第一天的会议已经安排在前面连续的若干房间。现在要一般化地考虑如何安排第x天第y个会议放在哪里。这里可以有一些非常明显的结论:
1. 优先选择连续使用天数越少的房间越可能产生满足条件的结果;
2. 优先选择使用时间(小时数)越少的房间越可能产生满足条件的解。并且在同样连续使用天数的房间中,如果选择使用时间最小的房间还不能找到解的话,那么选择其他房间也不可能找到解。

由于题目中不能连续3天使用的限制,我们可以把每天可供选择的房间放在一个“可用房间结构”FreeRooms中,按已连续使用天数分成4组:0组--连续使用0天(前一天未使用)的房间;1组--连续使用1天的房间;2组--连续使用2天的房间;以及3组--连续使用3天(今天不可使用)的房间。在每一组中可以使用堆的结构保证堆顶(第一个元素)的房间已使用时间(小时数)最小(可以参考BinaryHeap)。这样,如果我们把每天的会议按会议时间从长到短排,那么“当前”的第x天第y个会议使用的房间可以认为只可能从0组到2组的“第一个元素”中选;如果已无空余房间,回溯考虑上一个会议;如果已经是当天的第1个会议,那么就要回溯到前一天的最后一个会议;如果发现回溯到第1天那就意味着搜索已经结束了)。回溯的时候别忘了前面的第2个结论,“上一个”会议的下一个可选房间只能从后面的组出。比如该会议的房间原来是从0组出的,那么现在就要从1组考虑。FreeRooms里放第3组可以方便生成“下一天”需要的FreeRooms结构。
13661023811 2011-01-18
  • 打赏
  • 举报
回复
最后只能用GA了
13661023811 2011-01-05
  • 打赏
  • 举报
回复
好像只能暴搜了
tzw_cs 2010-12-25
  • 打赏
  • 举报
回复
贪心法:
找不到一种保证最优的策略,则贪心后还是要回溯,因而还是等同于搜索
动态规划:
不能保证任何一种安排可以直接延续到下一天或者多一会场,所以也不可行
搜索:
可以进行一些优化。比如会场数肯定大于等于最多会议数(一天),还有其他一些可以剪枝的方式等等。

此道题不能完全算是最优化问题。只是会场数要找到最少,但是找到会场数后怎么安排是有很多的解。因而算是约束满足问题。
tzw_cs 2010-12-25
  • 打赏
  • 举报
回复
天数不多,直接搜索吧。。。
绝对保证最优解
super_chris 2010-12-24
  • 打赏
  • 举报
回复
记得这个解法就应该是贪心 可证明的
13661023811 2010-12-24
  • 打赏
  • 举报
回复
嗯,看来还是要写个算法。

好像动态规划、贪心都不行?!
子夜__ 2010-12-22
  • 打赏
  • 举报
回复
写个算法。哈哈
gejiahen 2010-12-22
  • 打赏
  • 举报
回复
什么也不用算,起码8个以上的会场
13661023811 2010-12-22
  • 打赏
  • 举报
回复
比如第一天有4、5、6、7、8、9、10个小时的会议 ,就是有7场会议,由于时间重叠,只能安排7间会议室,每间会议时使用的时间不同
绿色夹克衫 2010-12-21
  • 打赏
  • 举报
回复
还是没看明白题目!
MK 2010-12-21
  • 打赏
  • 举报
回复
贪心很可能 得到的是 近似 最优解
13661023811 2010-12-21
  • 打赏
  • 举报
回复
难道真的不能用贪心秒杀吗?
加载更多回复(1)

33,008

社区成员

发帖
与我相关
我的任务
社区描述
数据结构与算法相关内容讨论专区
社区管理员
  • 数据结构与算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧