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

怎么样用手机做网站关键词如何修改wordpress模板栏目的属性

怎么样用手机做网站关键词,如何修改wordpress模板栏目的属性,做情人在那个网站,网页游戏排行榜2014年文章目录 1 最小生成树2 最小生成树Kruskal算法的实现2.1 算法思想2.2 算法实现2.2.1 如果图不联通,直接返回空,该图没有mst2.2.2 获得图中的所有边,并且进行排序2.2.2.1 Edge类要实现Comparable接口,并重写compareTo方法 2.2.3 取…

文章目录

  • 1 最小生成树
  • 2 最小生成树Kruskal算法的实现
    • 2.1 算法思想
    • 2.2 算法实现
      • 2.2.1 如果图不联通,直接返回空,该图没有mst
      • 2.2.2 获得图中的所有边,并且进行排序
        • 2.2.2.1 Edge类要实现Comparable接口,并重写compareTo方法
      • 2.2.3 取边进行判断是否形成环
        • 2.2.3.1判断是否形成环
  • 3 最小生成树Prim算法的实现
    • 3.1 算法思想
    • 3.2 算法实现
      • 3.2.1 如果图不联通,直接返回空,该图没有mst
      • 3.2.2 使用visited数组区分A组B组
      • 3.2.3 添加边生成mst
      • 3.2.4 切分优化 - (一定要掌握)

1 最小生成树

在这里插入图片描述

2 最小生成树Kruskal算法的实现

2.1 算法思想

  1. 基本思想:按照权值从小到大的顺序选择 n-1 条边,并保证这 n-1 条边不构成回路
  2. 具体做法:首先构造一个只含 n 个顶点的森林,然后依权值从小到大从连通网中选择边加入到森林中,并使森林中不产生回路,直至森林变成一棵树为止。

在这里插入图片描述

2.2 算法实现

2.2.1 如果图不联通,直接返回空,该图没有mst

 CC cc = new CC(G);if(cc.count() > 1) return;

2.2.2 获得图中的所有边,并且进行排序

ArrayList<WeightedEdge> edges = new ArrayList<>();for(int v = 0; v < G.V(); v ++)for(int w: G.adj(v))if(v < w) // 剪枝:0-2,2-0,只判断0-2,避免重复edges.add(new WeightedEdge(v, w, G.getWeight(v, w)));Collections.sort(edges);
2.2.2.1 Edge类要实现Comparable接口,并重写compareTo方法
public int compareTo(WeightedEdge another){return weight - another.weight;
}

2.2.3 取边进行判断是否形成环

2.2.3.1判断是否形成环

通过并查集标记联通分量。

如果添加进来的边的两个顶点属于不同的集合,那么说明不会形成环。

如果添加进来的边的两个顶点属于相同的集合,那么说明一定形成环。

UF uf = new UF(G.V());
for(WeightedEdge edge: edges){int v = edge.getV();int w = edge.getW();// 判断选择的边的两个顶点是否属相连if(!uf.isConnected(v, w)){ mst.add(edge);uf.unionElements(v, w); // 合并两个顶点和边}
}

在这里插入图片描述

3 最小生成树Prim算法的实现

3.1 算法思想

Prim的核心思想就是使用贪心算法,每次从连通图中找到一条符合条件的权值最小的边,重复这样的操作N-1次,选出的N-1条权值最小的边组成的树就是最下生成树。

将顶点分为两类,一类是在查找的过程中已经包含在树中的(假设为 B 类),剩下的是另一类(假设为 A 类)。

3.2 算法实现

3.2.1 如果图不联通,直接返回空,该图没有mst

 CC cc = new CC(G);if(cc.count() > 1) return;

3.2.2 使用visited数组区分A组B组

初始化的时候visited数组起始的元素为true,其余全部设置为galse,表示两个不同的组

boolean visited[] = new boolean[G.V()];
visited[0] = true;

3.2.3 添加边生成mst

声明一个变量minEdge用于标记权重最小的边。

for(int i = 1; i < G.V(); i ++){WeightedEdge minEdge = new WeightedEdge(-1, -1, Integer.MAX_VALUE);for(int v = 0; v < G.V(); v ++)if(visited[v]) //当前组的节点进行遍历for(int w: G.adj(v)) //找到相邻的顶点// 如果当前的顶点跟上一个顶点不是一个组// 并且权重比minEdge标记的权重更小if(!visited[w] && G.getWeight(v, w) < minEdge.getWeight())// 更新minEdge的值,并加入到mst中minEdge = new WeightedEdge(v, w, G.getWeight(v, w));mst.add(minEdge);visited[minEdge.getV()] = true;visited[minEdge.getW()] = true;
}

3.2.4 切分优化 - (一定要掌握)

使用优先队列取最短的边。

拓展的过程中,优先队列的边不一定是合法的边。

在构建mst时进行判断边的合法性。

 Queue pq = new PriorityQueue<WeightedEdge>();// 初始化for(int w: G.adj(0))pq.add(new WeightedEdge(0, w, G.getWeight(0, w)));// 循环取边while(!pq.isEmpty()){WeightedEdge minEdge = (WeightedEdge) pq.remove();// 判断边的合法性if(visited[minEdge.getV()] && visited[minEdge.getW()])continue; //  继续循环取边mst.add(minEdge);int newv = visited[minEdge.getV()] ? minEdge.getW() : minEdge.getV(); // 找到新边不属于同一集合的点visited[newv] = true; //设置为同一集合// 更新横切边的优先队列for(int w: G.adj(newv))if(!visited[w])pq.add(new WeightedEdge(newv, w, G.getWeight(newv, w)));}
http://www.yayakq.cn/news/56452/

相关文章:

  • 厦门市建设局查询保障摇号网站长沙高端网站建设品牌
  • 成都农产品网站建设方案做游戏模板下载网站有哪些内容
  • 如何发布自己的html网站淘宝客网站建设详细教程
  • 网站内外链建设cpanel 安装wordpress
  • 网站建设观点知识普及莱州网站建设包年多少钱
  • 六年级做的网站的软件百度对网站的收录
  • 内网 做 网站创建网站平台要多少钱
  • 网站做问卷调查的问题装潢设计报价
  • 开展建设文明网站活动深圳网站建设啊
  • php网站平台网站开发的费用计入什么科目
  • 在哪建设网站建站软件排名
  • 安徽网站建设价格做网站跟app需要多少钱
  • 广告策划长春seo外包
  • 路桥建设网站网上花店网页制作代码
  • 网站建设自由容器是什么意思重庆市工程建设标准化网站
  • 手机网站 兼容wordpress 顶 踩 插件
  • 网站制作团队高校思政教育工作网站建设
  • 中国工商做年报网站微网站开发平台wizi
  • 网站建设项目的预表免费建设自己的网站
  • 天津做公司网站时尚网站策划
  • 哪个网站专题做的好信誉好的永州网站建设
  • 开发网站培训班福田区网站建设
  • mg线上注册seo手机关键词排行推广
  • 怎样建淘宝客网站如何做网站的链接结构
  • 房地产类的网站建设聊城网站建设lckjxx
  • 目前基金会网站做的比较好的亚马逊跨境电商介绍
  • 盐城营销型网站有什么值得做的网站
  • 高性能网站建设指南 当当黄石规划建设局网站
  • wordpress音乐自动播放网站seo推广排名
  • 备案中的网站名称工信部icp备案是什么意思