当前位置: 首页 > news >正文

招标网站建设申请报告合肥网络优化推广公司

招标网站建设申请报告,合肥网络优化推广公司,在国外做盗版电影网站,互联网保险公司十大排名文章目录 题目1584.连接所有点的最小费用 最小生成树MST,有两种算法进行求解,分别是Kruskal算法和Prim算法Kruskal算法从边出发,适合用于稀疏图Prim算法从顶点出发,适合用于稠密图:基本思想是从一个起始顶点开始&#…

文章目录

  • 题目
    • 1584.连接所有点的最小费用

  • 最小生成树MST,有两种算法进行求解,分别是Kruskal算法Prim算法
  • Kruskal算法从边出发,适合用于稀疏图
  • Prim算法从顶点出发,适合用于稠密图:基本思想是从一个起始顶点开始,逐步扩展生成树,每次选择一条连接已选顶点和未选顶点的最小权重边,直到所有顶点都被包含在生成树中。

Prim算法的基本步骤:

  • 初始化:选择一个起始顶点,将其加入生成树中。
  • 选择最小边:在所有连接生成树中顶点和未加入生成树的顶点的边中,选择权重最小的边。
  • 扩展生成树:将这条边及其连接的未加入顶点加入生成树。
  • 重复:重复步骤2和步骤3,直到所有顶点都加入生成树。

与求解最短路径的Dijkstra算法的求解思路是有异曲同工之妙的

  • Prim 算法的朴素模版,时间复杂度 O ( n 2 ) O(n^2) O(n2)
# 该模版可以求解最小生成树的权值ans = 0# done[i]表示节点i到最小生成树的最小距离是否确定done = [False]*n # 注意,现在并没有设置done[0]=Truedis = [float('inf')]*ndis[0] = 0# 构建最小生成树for i in range(n):m = float('inf')# 还没在树中,并且到达树的距离最小的节点for j in range(n):if not done[j] and (node < 0 or dis[j] < dis[node]):node = jdone[node] = True# 累加情况ans += dis[node]# 更新node的邻居的情况for neigh in range(n):if not done[neigh] and edge[node][neigh] < dis[neigh]:dis[neigh] = edge[node][neigh]return ans
  • Kruakal算法是从边出发,一直合并不与当前节点形成环的边,时间复杂度 O ( e l o g e ) O(eloge) O(eloge),e是边数
  • Kruskal算法模版
        # 先按照距离排序edge.sort(key=lambda x:x[0])# 使用并查集parent = list(range(n))def find(index):if parent[index] != index:parent[index] = find(parent[index])return parent[index]def union(index1,index2):parent[find(index1)] = find(index2)ans = 0count = 0 # 计数器# 对边进行遍历for d,x,y in edge:fx,fy = find(x),find(y)# 当属于同一个祖先就不要,不然会形成环if fx == fy:continueans += d# 更新计数器count+=1union(x,y)# 如何合并了n-1的边,就结束if count == n-1:breakreturn ans

题目

1584.连接所有点的最小费用

1584.连接所有点的最小费用

在这里插入图片描述

思路分析:最小生成树的模版题目

  • 使用Prim算法模版题
class Solution:def minCostConnectPoints(self, points: List[List[int]]) -> int:# 有两种实现方式,分别是Kruskal算法和Prim 算法# Kruskal算法从边出发,适合用于稀疏图,prim算法从点出发,适合用于稠密图n = len(points)# 先构建邻接表edge = [[float('inf')]*n for _ in range(n)]for i in range(n):x1,y1 = points[i]for j in range(i+1,n):x2,y2 = points[j]d = abs(x1-x2)+abs(y1-y2)edge[i][j] = d edge[j][i] = d # 该模版可以求解最小生成树的权值ans = 0# done[i]表示节点i到最小生成树的最小距离是否确定done = [False]*n # 注意,现在并没有设置done[0]=Truedis = [float('inf')]*ndis[0] = 0# 构建最小生成树for i in range(n):m = float('inf')# 还没在树中,并且到达树的距离最小的节点for j in range(n):if not done[j] and (node < 0 or dis[j] < dis[node]):node = jdone[node] = True# 累加情况ans += dis[node]# 更新node的邻居的情况for neigh in range(n):if not done[neigh] and edge[node][neigh] < dis[neigh]:dis[neigh] = edge[node][neigh]return ans
  • 使用Kruskal算法模版
class Solution:def minCostConnectPoints(self, points: List[List[int]]) -> int:# 有两种实现方式,分别是Kruskal算法和Prim 算法# Kruskal算法从边出发,适合用于稀疏图,prim算法从点出发,适合用于稠密图# 使用Kruskal,从边出发n = len(points)edge = []# 将全部的边都加入这个edgefor i in range(n):x1,y1 = points[i]for j in range(i+1,n):x2,y2 = points[j]d = abs(x1-x2)+abs(y1-y2)edge.append((d,i,j))# 先按照距离排序edge.sort(key=lambda x:x[0])# 使用并查集parent = list(range(n))def find(index):if parent[index] != index:parent[index] = find(parent[index])return parent[index]def union(index1,index2):parent[find(index1)] = find(index2)ans = 0count = 0 # 计数器for d,x,y in edge:fx,fy = find(x),find(y)if fx == fy:continueans += dcount+=1union(x,y)if count == n-1:breakreturn ans
http://www.cadmedia.cn/news/4536.html

相关文章:

  • 互联网保险公司排行榜北京seo包年
  • 微信公众平台内做网站免费优化网站排名
  • 小规模企业所得税税率东莞网站建设优化诊断
  • 中国电子商务网站建设打开百度一下网页版
  • 建站之星导出网站百度快照收录
  • WordPress卡密充值代码优化设计官网
  • 网页正在跳转中东莞seo公司
  • 上海雷蒙威手表网站搜索优化师
  • 石家庄网站建设团队sem是什么显微镜
  • 有经验的永州网站建设汕头seo优化公司
  • 崇州市建设局网站百度搜不干净的东西
  • 变更网站怎么做淘宝标题优化网站
  • 网站建设 时间安排搜外友链
  • 电商扶贫网站建设服务器域名怎么注册
  • 龙泉驿区疫情最新消息整站关键词排名优化
  • 中小企业网站建设客户需求调查问卷南宁seo排名优化
  • 在什么网站可以接活做seo推广软件代理
  • 六安建设局网站香飘飘奶茶软文
  • 做企业网站通常哪找素材电子商务网站建设与管理
  • 正规免费发布信息网站关键词搜索量排名
  • 如何上传织梦做的网站注册一个公司网站需要多少钱
  • 江西南昌电子商务网站建设公司市场调查报告模板及范文
  • 惠州网站建设惠州推推蛙seo顾问
  • 泊头哪里有做网站的嘉兴网站建设
  • 代做网站灰色关键词百度站长统计工具
  • 长春自主建站模板上海专业的seo推广咨询电话
  • 沧州网站推广优化商集客电话国内可访问的海外网站和应用
  • 公司网站欢迎语线上宣传的方式
  • 太原站建设有多长时间不限制内容的搜索引擎
  • php网站开发流程图怎么做推广和宣传平台