首页 新闻 论坛 群组 Blog 文档 下载 读书 Tag 网摘 搜索 .NET Java 游戏 视频 人才 外包 培训 数据库 书店 程序员
中国软件网
欢迎您:游客 | 登录 注册 帮助
  • 继续一道贪心算法的问题 [已结贴,结贴人:ksharp2008]
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-03-25 20:09:35 楼主
      有N个学生,每个学生在(Si,Ei)时间段内有任务,我们想从中选K个学生,使得这K个学生可以观察其他N-K个学生的工作。例如有三个学生(1,5)(2,3)(4,6),那么就选择(1,5),可以监视(2,3) (4,6)
    20  修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-03-26 05:04:161楼 得分:0
    不是贪心,是DP吧.
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-03-26 08:38:132楼 得分:0
    在贪心算法的那张出现的啊,是贪心吧
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • dlyme
    • 等级:
    发表于:2008-03-26 12:00:393楼 得分:0
    没有其它要求吗?
    从你的描述来看,似乎是任务时间上有重叠的学生就可以互相监视。
    那么又成了一个典型的“会场分配/活动选择”问题:根据贪心算法找出最多的不相交时间段,这就是那K个学生。

    这个题如果是求最小的K,和你前面那个问题就是一回事了。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-03-26 13:21:174楼 得分:0
    (1,5)(2,3)(4,6)前边我说的那题以前没说明白,是找最小时间段集合,既集合中包含的时间段最小。那么前题的答案是(2,3)(4,4)既(2,4)。放到这题就该是(1,5)。但大王所说的根据贪心算法找出最多的不相交时间段,这就是那K个学生应该为(2,3)(4,6)啊,不大理解大王的思想。大王再讲讲好么
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • dlyme
    • 等级:
    发表于:2008-03-26 16:07:285楼 得分:0
    (1,5)可以监视(2,3)(4,6),
    (2,3)(4,6)也可以监视(1,5),
    这两种方案都能满足监视要求。

    原题中要求一定是最小的k吗?
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-03-26 16:36:306楼 得分:0
    恩,是选一个最小的K,这些K是当干部的,所以要少。呵呵
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-03-26 16:40:037楼 得分:0
    贪心算法得出结果不一定最优的吧。
    你贴出的两道题目怎么看都应该用DP来求最优解。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-03-26 17:46:228楼 得分:0
    也有可能最优啊,如最小生成树,最短路径,最大相容任务等等。我再想想贪心能搞出最优的不,动态规划的效率我觉得不如贪心高啊。才学算法,在下的愚见,不对别见笑,呵呵
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-03-26 18:02:139楼 得分:0
    mathe也来了啊,看了mathe的很多帖子了,高人啊。顺便问句问什么老外的离散数学那么的厚啊,国内作者薄薄的离散数学写的好么?想学习,感觉太厚了,题做不完啊
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-03-26 23:27:5810楼 得分:0
    按照结束时间排序;

    1)对结束时间最早的学生a1,求跟其有时间交叉,且结束时间最大的学生aj,提出aj能监视到的学生;
    2)在剩下的学生中继续1),直到没剩下任何学生;

    证明:
    a1要么被选中,要么被选中的某个学生监视;,
    1)如果a1被中,那么a1能监视到跟a1有交叉的学生;
    2)如果a1没被选中,那么必定选中跟a1有交叉的学生之一;由于,a1是结束时间最早的学生,所以所有跟a1有交叉的学生的时间段必定包含有a1的结束时间;所以选其中的任何一个都可以监视到所有跟跟a1有交叉的学生;且被选中的学生能监视到开始时间早于其结束时间的所有学生;而aj是跟a1有交叉的学生中结束时间最晚的,所以aj能监视到所有开始时间早于aj的结束时间的所有学生;

    证毕!
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-03-27 03:18:3311楼 得分:0
    处女贴
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • dlyme
    • 等级:
    发表于:2008-03-27 09:36:4212楼 得分:0
    欢迎楼上破处。

    感觉tailzhou的方法有问题,举个反例:
    (1,3)、(4,5)、(6,7)、(2,10)、(8,11)、(12,13)、(14,15)、(9,16)
    很明显,(2,10)和(9,16)就能监视其它的所有学生。
    如果按照你的方法,出来的结果会是(2,10)、(12,13)、(14,15)

    “剔除aj能监视到的学生”,这里太粗暴了。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-03-27 09:49:1713楼 得分:0
    确实有问题;
    “剔除aj能监视到的学生”
    修改为:
    “剔除结束时间早于aj的结束时间的学生,也就是在j之后的学生继续第一步;”
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-03-27 09:53:3214楼 得分:10
    1)对结束时间最早的学生a1,求跟其有时间交叉,且结束时间最大的学生aj;
    2)对aj无法监视的学生中结束时间最早的学生a1' ,求跟其有时间交叉,且结束时间最大的学生aj';
    直到所有学生都被监视或选中,否则继续2);
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • dlyme
    • 等级:
    发表于:2008-03-27 11:45:4915楼 得分:10
    这么一来应该是没问题了,贪心算法的正确性证明:
    还是按照每个学生的任务结束时间升序排列:S={1,2,3,...,n}
    假设用这种贪心算法得到的监视学生为i[1],i[2],...,i[k],这里1 <=i[1] <i[2] <…… <i[k] <=n

    1.第一步,先来证明总存在一个以i[1]开头的最优解.
    假设A为S的一个子集,同时A是一个最优解,假设A={j[1],j[2],...,j[t]},这里1 <=j[1] <j[2] <…… <j[t] <=n
    首先必须满足j[1] <=i[1]。否则的话,根据贪心算法过程就可以推断出来,学生1没有被监视到。
    如果i[1]==j[1],那么一切好说;
    如果i[1]>j[1],就在集合A中把j[1]替换成i[1]。
    凡是m <=i[1],学生m都能被学生i[1]监视到。又因为i[1]的结束时间大于m的结束时间,所以凡是m能监视到的学生,i[1]都能监视到(分m与1相交和不相交两种情况来讨论比较容易理解)。也就是说j[1]能干的活,i[1]都能包了,因此用i[1]来替换j[1]还是能监视其余所有的学生。
    因此A-{j[1]}+{i[1]}仍然是一个最优解。
    【实际上这里还有一个小问题要澄清,那就是j[2],...j[t]中会不会出现与i[1]重复的值?答案是不会的。
    因为前面已经提到了凡是m <=i[1],m能监视的学生i[1]都能监视到,因此我们担心的情况与A是最优解相矛盾,不会出现】
    2.第二步,来证明A-{i[1]}=={j[2],...,j[t]}就是“i[1]无法监视到的学生”的一个最优解。
    这一步用反证法来说明:如果存在一个比集合A-{i[1]}更少的方案就能监视到所有“i[1]无法监视到的学生”,那么这个方案再加上i[1],就能监视到所有的学生,这与A是最优解是矛盾的.
    以上2步合起来就能说明,每进行一次贪心选择就可以得到一个最优解。
    修改 删除 举报 引用 回复

    网站简介广告服务网站地图帮助联系方式诚聘英才English 问题报告
    北京创新乐知广告有限公司 版权所有 京 ICP 证 070598 号
    世纪乐知(北京)网络技术有限公司 提供技术支持
    Copyright © 2000-2008, CSDN.NET, All Rights Reserved