数据结构之生成树及最小生成树

数据结构之生成树及最小生成树

  • 1、生成树概念
  • 2、最小生成树

  数据结构是程序设计的重要基础,它所讨论的内容和技术对从事软件项目的开发有重要作用。学习数据结构要达到的目标是学会从问题出发,分析和研究计算机加工的数据的特性,以便为应用所涉及的数据选择适当的逻辑结构、存储结构及其相应的操作方法,为提高利用计算机解决问题的效率服务。
  数据结构是指数据元素的集合及元素间的相互关系和构造方法。元素之间的相互关系是数据的 逻辑结构,数据元素及元素之间关系的存储称为 存储结构(或物理结构)。数据结构按照逻辑关系的不同分为 线性结构非线性结构两大类,其中,非线性结构又可分为树结构和图结构。
  树结构是一种非常重要的非线性结构,该结构中的一个数据元素可以有两个或两个以上的直接后继元素,树可以用来描述客观世界中广泛存在的层次结构关系。

1、生成树概念

  对于有n个顶点的连通图,至少有n-1条边,而生成树中恰好有n-1条边,所以连通图的生成树是该图的极小连通子图。若在图的生成树中任意加一条边,则必然形成回路。下图(a)所示的无向图的一个生成树如下图(b)所示,下图(c)不是生成树,因为存在回路。
在这里插入图片描述

  图的生成树不是唯一的。从不同的顶点出发,选择不同的存储方式,用不同的求解方法,可以得到不同的生成树。对于非连通图而言,每个连通分量中的顶点集和遍历时走过的边集一起构成若干棵生成树,把它们称为非连通图的生成树森林。按深度和广度优先搜索进行遍历将得到不同的生成树,分别称为深度优先生成树和广度优先生成树。例如,下图所示的是上图(a)的一棵深度优先生成树和一棵广度优先生成树。
在这里插入图片描述

2、最小生成树

  对于连通网来说,边是带权值的,生成树的各边也带权值,因此把生成树各边的权值总和称为生成树的权,把权值最小的生成树称为最小生成树。求解最小生成树有许多实际的应用。
  常用的最小生成树求解算法有普里姆(Prim)算法和克鲁斯卡尔(Kruskal)算法。
  (1)普里姆(Prim)算法
  假设N=(V,E)是连通网,TE是N上最小生成树中边的集合。算法从顶点集合U={u0}(u0∈V)、边的集合TE={}开始,重复执行下述操作:在所有u∈U, v∈V-U的边(u,v)∈E中找一条代价最小的边(u0,v0),把这条边并入集合TE,同时将v0并入集合U,直到U=V时为止。此时TE中必有n-1条边,T=(V,{TE})为N的最小生成树。
  由此可知,普里姆算法构造最小生成树的过程是以一个顶点集合U={u0}作为初态,不断寻找与U中顶点相邻且代价最小的边的另一个顶点,扩充U集合直到U=V时为止。
  用普里姆算法构造最小生成树的过程如下图所示。
在这里插入图片描述

  普里姆算法的时间复杂度为0(n2),与图中的边数无关,因此该算法适合于求边稠密的网的最小生成树。
  (2)克鲁斯卡尔(Kruskal)算法。
  克鲁斯卡尔求最小生成树的算法思想为:假设连通网N(V,E),令最小生成树的初始状态为只有 n 个项点而无边的非连通图 T=(V,{}),图中每个顶点自成一个连通分量。在E选择代价最小的边,若该边依附的项点落在T中不同的连通分量上,则将此边加入到T中,否则舍去此边而选择下一条代价最小的边。依此类推,直到T中所有顶点都在同一连通分量上为止。
  用克鲁斯卡尔算法构造上图(a)所示网的最小生成树的过程如下图所示。
在这里插入图片描述

  克售斯卡尔算法的时间复杂度为 O(e㏒e),与图中的顶点数无关,因此该算法适合于求边稀疏的网的最小生成树。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/659209.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Springboot+vue的健身房管理系统(有报告)。Javaee项目,springboot vue前后端分离项目

演示视频: Springbootvue的健身房管理系统(有报告)。Javaee项目,springboot vue前后端分离项目 项目介绍: 本文设计了一个基于Springbootvue的前后端分离的健身房管理系统,采用M(model&#xf…

RabbitMQ概念

一 、RabbitMQ概念 1 架构图 2 相关概念 Publisher - ⽣产者:发布消息到RabbitMQ中的Exchange Consumer - 消费者:监听RabbitMQ中的Queue中的消息 Broker:接收和分发消息的应用,RabbitMQ Server就是 Message Broker&#xf…

循环——枚举算法2(c++)

目录 找和为K的两个元素 描述 在一个长度为n(n < 1000)的整数序列中&#xff0c;判断是否存在某两个元素之和为k。 输入 第一行输入序列的长度n和k&#xff0c;用空格分开。 第二行输入序列中的n个整数&#xff0c;用空格分开。 输出 如果存在某两个元素的和为k&…

Java基于SpringBoot+Vue的网上超市管理系统

博主介绍&#xff1a;✌程序员徐师兄、7年大厂程序员经历。全网粉丝30W、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专栏推荐订阅&#x1f447;…

C++类和对象(中)六个默认成员函数

&#x1f308;类的六个默认成员函数 任何一个类&#xff0c;不管是否为空&#xff0c;都会在生成的时候默认调用六个成员函数&#xff0c;这些成员函数可以自动生成&#xff0c;也可以由程序员写出。这六个默认成员函数分别是&#xff1a; 最主要的是前四个&#xff1a; 初始…

༺༽༾ཊ—Unity之-02-抽象工厂模式—ཏ༿༼༻

首先创建一个项目&#xff0c; 在这个初始界面我们需要做一些准备工作&#xff0c; 建基础通用文件夹&#xff0c; 创建一个Plane 重置后 缩放100倍 加一个颜色&#xff0c; 任务&#xff1a;使用 抽象工厂模式 创建 人物与宠物 模型&#xff0c; 首先资源商店下载 人物与宠物…

幻兽帕鲁(Palworld)v0.1.3免安装中文版(下载及配置中文及服务器搭建)

配置中文 进入到游戏文件夹中 Palworld.v0.1.3.0\game\Engine\Binaries\ThirdParty\Steamworks\Steamv153\Win64\steam_settings设置中文 simplified chinesewindows搭建服务器 要求 中央处理器4核&#xff08;推荐&#xff09;内存16千兆字节&#xff08;GB&#xff09; …

PyTorch 深度学习实践 第3讲 梯度下降算法

B站--刘二大人《PyTorch深度学习实践》完结合集 03. 梯度下降算法 PPT 链接&#xff1a;网盘 提取码&#xff1a;cxe4 步骤&#xff1a;1.dataset 2.model 3.training&#xff08;确定权重&#xff09; 4.inferring 1.分治法 容易只找到局部最优&#xf…

1 计算机网络概述(二):计算机网络的拓扑结构,标准化组织

目录 1 计算机网络的拓扑结构1.1 网络拓扑的概念1.2 通信子网的信道类型1、点到点式网络2、广播式网络 1.3 常见的计算机网络拓扑结构 2 网络协议和标准化组织2.1 网络协议2.2 标准化组织 1 计算机网络的拓扑结构 1.1 网络拓扑的概念 拓扑学由图论演变而来&#xff0c;在拓扑…

如何保证MySQL数据一致性

在当今大数据时代&#xff0c;数据库系统扮演着至关重要的角色&#xff0c;而MySQL作为一种流行的关系型数据库管理系统&#xff0c;在数据一致性方面拥有着丰富的机制和技术。下面简单的探讨MySQL是如何保证数据一致性的。 事务与ACID特性 要了解MySQL如何保证数据一致性&am…

postman用法

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、postman怎么使用json输出 总结 前言 提示&#xff1a;这里可以添加本文要记录的大概内容&#xff1a; 提示&#xff1a;以下是本篇文章正文内容&#xff0…

C++ 数论相关题目:高斯消元解异或线性方程组

输入一个包含 n 个方程 n 个未知数的异或线性方程组。 方程组中的系数和常数为 0 或 1 &#xff0c;每个未知数的取值也为 0 或 1 。 求解这个方程组。 异或线性方程组示例如下&#xff1a; M[1][1]x[1] ^ M[1][2]x[2] ^ … ^ M[1][n]x[n] B[1] M[2][1]x[1] ^ M[2][2]x[2]…

部署TOMCAT详解

目录 一、Tomcat概述 1.1Tomcat简介 1.2、Tomcat历史 1.3Tomcat官网 二、部署单实例Tomcat 1.下载Tomcat包 2. 解压Tomcat包 3.配置环境变量 4.刷新环境变量 5.查看tomcat是否安装成功 6.启动Tomcat 三、Tomcat目录介绍 1、tomcat主目录介绍 2.webapps目录介绍 3…

TCP/IP网络模型

大家好我是苏麟 , 今天聊聊TCP/IP四层网络模型 . 资料来源 : 小林coding 小林官方网站 : 小林coding (xiaolincoding.com) 应用层 最上层的&#xff0c;也是我们能直接接触到的就是应用层&#xff08;Application Layer&#xff09;&#xff0c;我们电脑或手机使用的应用软件都…

ElasticSearch面试题整理(持续更新)

1. Elasticsearch 中的倒排索引是什么&#xff1f; Elasticsearch 使用一种称为倒排索引的结构&#xff0c;ES中的倒排索引其实就是 lucene 的倒排索引&#xff0c;区别于传统的正向索引&#xff0c;倒排索引会再存储数据时将关键词和数据进行关联&#xff0c;保存到倒排表中&…

1、PDManer 快速入门

文章目录 序言一、快速入门1.1 PDMan 介绍1.2 特点1.3 下载和安装 小结 序言 本人长期以来一直从事于应用软件的研发以及项目实施工作&#xff0c;经常做数据库建模&#xff08;数据表设计&#xff09;。有一款称心如意的数据库建模工具&#xff0c;自然能够事半功倍&#xff0…

JDK8新增的接口方法

第一种是默认方法&#xff1a; public interface A {//1.默认方法&#xff1a;必须使用default修饰&#xff0c;默认会被public修饰public default void test1(){System.out.println("默认方法");} } 默认方法就是实例方法&#xff0c;必须使用对象触发访问&#x…

洛谷C++简单题小练习day8—Bookshelf B

day8--Bookshelf B--1.30 习题概述 题目描述 Farmer John 最近为奶牛们的图书馆添置了一个巨大的书架&#xff0c;尽管它是如此的大&#xff0c;但它还是几乎瞬间就被各种各样的书塞满了。现在&#xff0c;只有书架的顶上还留有一点空间。 所有(1≤N≤20,000) N头奶牛都有一…

python爬虫概念及介绍

1. 什么是互联网爬虫&#xff1f; 解释 1 &#xff1a;通过一个程序&#xff0c;根据 Url ( http : // www . taobao . com ) 进行爬取网页&#xff0c;获取有用信息 解释 2&#xff1a;使用程序模拟浏览器&#xff0c;去向服务器发送请求&#xff0c;获取响应信息 2. 爬虫核…

JAVAEE初阶 网络编程(八)

IP协议 认识IP协议 在认识IP协议之前&#xff0c;我们首先要明确IP协议的工作范围或者是用途。 &#xff08;1&#xff09; 地址管理&#xff1a;使用一套地址体系&#xff0c;来描述互联网上各个设备所处的为止。 &#xff08;2&#xff09; 路由选择&#xff1a;数据包如何从…