网站大量收购闲置独家精品文档,联系QQ:2885784924

算法设计与分析:第六章 贪心法.ppt

  1. 1、本文档共100页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多

问题描述:给定集合U,其n个个体标记为p1,p2,...,pn,对于每对个体pi和pj有一个数值距离d(pi,pj)。(集合U的)k聚类——对于给定的参数k,寻求将U中的个体划分成k组非空集合C1,C2,...,Ck。一个k聚类的间隔——处在不同聚类中的任何一对点之间的最小距离。最大间隔聚类:具有最大可能间隔的k聚类。一个集合有指数多个不同的k聚类,如何有效地找出有最大间隔的聚类?提示:应试图将邻近的点尽可能快的一起带入同一个聚类中。采用Kruskal最小生成树算法,按照距离d(pi,pj)增加的顺序在点对之间依次加边。一旦得到了k个连通分支我们就停止这个过程。单链聚类提示:应试图将邻近的点尽可能快的一起带入同一个聚类中。采用Kruskal最小生成树算法,按照距离d(pi,pj)增加的顺序在点对之间依次加边。一旦得到了k个连通分支我们就停止这个过程。换句话说:我们运行Kruskal算法,但是就在它加最后的k-1条边之前停止。等价于:取整棵最小生成树T(好像Kruskal算法已经把它生成了),删除k-1条最贵的边(我们从来没有真正把它们加上)。聚类1聚类3聚类2如图所示:一个具有k=3个聚类的单连接聚类的例子。聚类通过按距离增加的次序在点之间加边而构成。由删除最小生成树T的k-1条最贵的边所构成的连通分支C1,C2,...,Ck组成一个最大间隔的k聚类。证明:若C表示聚类C1,C2,...,Ck,设C的间隔正好是最小生成树中第k-1条最贵的边的长度d*(这就是Kruskal算法在我们停止的时刻将要添加的下一条边的长度)。现在考虑某个其他的k聚类C’,它把U划分成非空的集合C1’,C2’,...,Ck’。我们必须证明C’的间隔至多是d*!如何证明?证明(续):因为C和C’是不同的聚类,因此一定存在C中的某个集合Cr不是C’中的任何一个集合。

因此存在点pi,pj∈Cr,分属于C’中不同的聚类——比如pi∈Cs’且pj∈Ct’≠Cs’。由于pi与pj属于聚类C中的同一个连通分支Cr,因此pi与pj之间一定存在一条路径P,该路径上的所有边均已在Kruskal算法停止前添加过。因此特别的,路径P上的每条边的长度至多是d*。证明(续):聚类Crpipp’pj聚类Cs’聚类Ct’令p’是在(从pi到pj的)路径P上第一个不属于Cs’的结点,令p是路径P上紧接在p’之前的结点。由前面的论证可知:d(p,p’)≤d*。但是p和p’分属于聚类C’中的不同集合,因此C’的间隔至多是d(p,p’)≤d*。得证:任何其他聚类的间隔不比由单链算法找到聚类的间隔更大!单源最短路径问题:给定带权有向图G=(V,E),求从某个给定的源点v0?V到其余各顶点的最短路径。6.6迪杰斯特拉算法(补充)024170535010353031520101520源点终点最短路径路径长度01(0,2,3,1)452(0,2)103(0,2,3)254(0,2,3,1,4)555-∞(a)带权的有向图G(b)图G顶点0的单源最短路径图9-17单源最短路径迪杰斯特拉算法按从源点到其他各顶点的最短路径长度的从小到大的次序逐一产生最短路径。 把V分成两组: (1)S:存放已求得最短路径的顶点的集合 (2)T=V-S:尚未确定最短路径的顶点集合 将T中顶点按最短路径非递减的次序加入到S中。迪杰斯特拉(Dijkstra)算法思想: 这个过程中,总保持:从源点V0到S中各顶点的最短路径长度都不大于从V0到T中任何顶点的最短路径长度。而且每个顶点对应一个距离值: S中顶点对应的距离值,是从V0到此顶点的最短路径长度; T中顶点对应的距离值,是从V0到此顶点的只包括S中顶点作中间顶点的当前最短路径长度。单源最短路径图例求上图中源点0到其他各顶点的最短路径1002417053501035303152010152050∞∞70定理6-3X=(x0,x1,...,xk)是k个作业的集合,α=(α0,α1,...,αk)是X的一种特定排列,它使得dα0≤dα1≤...≤dαk,其中dαj是作业αj的时限。X是一个可行解当且仅当X中的作业能够按α次序调度而不会有作业超期。判断作业j是否允许添加到部分解向量中的具体做法:设算法现考察作业j,x=(x[0],x[1],...,x[k])为当前已入选的作业向量,且d[x[0]]≤d[x[1]]≤...≤d[x[k]]。由于当前的部分解是可行的,故必有d[x[i]]≥i+1,0≤i≤k

文档评论(0)

胖鸥 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档