- 1、本文档共86页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
第7章每一步局部最优—贪心法;7.1.1什么是贪心法;;;;;;;;;;;;;ej;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1 INF=0x3f3f3f3f
2 defPrim(A,n,v): #Prim算法
3 T=[] #存放最小生成树
4 lowcost=[INF]*n
5 U=[0]*n
6 closest=[0]*n
7 forjinrange(0,n): #初始化lowcost和closest数组
8 lowcost[j]=A[v][j]
9 closest[j]=v
10 U[v]=1 #源点加入U;11 foriinrange(1,n): #找出(n-1)个顶点
12 mincost,k=INF,-1
13 forjinrange(0,n): #在(V-U)中找离U最近的顶点k
14 ifU[j]==0andlowcost[j]mincost:
15 mincost=lowcost[j]
16 k=j #k记录最近顶点的编号
17 T.append([closest[k],k,mincost]) #产生最小生成树的一条边
18 U[k]=1 #顶点k加入U
19 forjinrange(0,n): #修改数组lowcost和closest
20 ifU[j]==0andA[k][j]lowcost[j]:
21 lowcost[j]=A[k][j]
22 closest[j]=k
23 returnT;Prim算法是一种贪心算法,如何理解Prim算法的最优子结构性质呢?;采用反证法证明Prim算法满足最优子结构性质。
证明:如果采用Prim算法求出原问题的生成树T是最小生成树,选择第一条边(v,a)后得到相应的子问题,假设该子问题采用Prim算法求出的生成树T1(T=(v,a)∪T1)不是最小的,而是最小生成树为T2,则(v,a)∪T2得到原问题的一棵不同于T的更小的最小生成树,用T是原问题的最小生成树矛盾。最优子结构性质即证。;贪心选择性质证明。;;;当命题7.1成立时,k=n-1即选择了n-1条边,此时U包含G中所有顶点,由Prim算法构造的T=(U,TE)就是G的最小生成树。;7.3.2Kruskal算法构造最小生成树;;;首先,U中包含全部顶点,TE为空,看成是由n个连通分量构成的图,每个连通分量中只有一个顶点,当考虑一条边(u,v)时,若u和v属于两个不同的连通分量,则加入该边不会出现回路,否则会出现回路。这里每个连通分量就是并查集中的子集树。
用数组E存放图G中的所有边,按权值递增排序,再从头到尾依次考虑每一条边,若可以加入则选择该边作为最小生成树的一条边,否则舍弃该边。;#UFS并查集类参见第2章2.10.2节1~23的代码
1 INF=0x3f3f3f3f
2 defKruskal(A,n): #Kruskal算法
3 T=[] #存放最小生成树
4 E=[] #边集
5 foriinrange(0,n): #由A下三角部分产生的边集E
6 forjinrange(0,i):
7 ifA[i][j]!=0andA[i][j]!=INF:
8 E.append([i,j,A[i][j]])
9 E.sort(key=itemgetter(2)) #按边权值递增排序
10 ufs=UFS() #定义并查集对象
11 ufs.Init(n) #初始化并查集
12 k,j=0,0 #k表示当前构造生成树的边数;13 whilekn-1: #生成的边数小于n-1时循环
14 u1,v1=E[j][0],E[j][1] #取一条边(u1,v1)
15 sn1,sn2=ufs.Find(u1),ufs.Find(v1) #两个顶点所
您可能关注的文档
- 《算法设计与分析基础》(Python语言描述) 课程教学大纲(含思政).docx
- 《算法设计与分析基础》(Python语言描述) 实验教学大纲.docx
- 《算法设计与分析基础》(Python语言描述) 课件 第1章 绪论.pptx
- 《算法设计与分析基础》(Python语言描述) 课件 第2章常用的数据结构及其应用(1).pptx
- 《算法设计与分析基础》(Python语言描述) 课件 第2章常用的数据结构及其应用(2).pptx
- 《算法设计与分析基础》(Python语言描述) 课件 第3章基本算法设计方法(1).pptx
- 《算法设计与分析基础》(Python语言描述) 课件 第3章基本算法设计方法(2).pptx
- 《算法设计与分析基础》(Python语言描述) 课件 第4章分治法(1).pptx
- 《算法设计与分析基础》(Python语言描述) 课件 第4章分治法(2).pptx
- 《算法设计与分析基础》(Python语言描述) 课件 第5章回溯法(1).pptx
最近下载
- 2024年华医网继续教育临床静脉用药质量管理与风险防范答案.docx VIP
- 北京化工大学2023-2024学年第1学期《宏观经济学》期末考试试卷(A卷)附标准答案.docx
- 新魔法英语4B全册复习要点.pdf
- 非谓语动词在读后续写种的运用.pptx
- 银行金融人才招聘存在的问题与对策探讨.docx VIP
- 【一诊】绵阳市高三2022级(2025届)第一次诊断性考试数学试卷.docx
- 《出纳实务》课件 《出纳实务》第二章.pptx VIP
- 区域能源优化设计软件V2.0简介.pdf
- 2024年山东省菏泽市高职单招考试(计算机类)考试题库及答案解析.docx
- 收银实务 课件 项目八 计算器和计算机小键盘的使用.pptx
文档评论(0)