非线性数据结构之图

一、有向图(Directed Graph)

1. 定义

有向图是一个由顶点(节点)和有方向的边(弧)组成的图。在有向图中,每条边都有一个起点和一个终点,表示从一个顶点到另一个顶点的关系。

2. 特点
  • 边有方向:每条边都有一个方向,通常用箭头表示。例如,边 A→B 表示从顶点 A 到顶点 B。
  • 可能存在孤立点:有向图中的某些顶点可能没有入边或出边。
  • 可有多个入度和出度:顶点的入度是指指向该顶点的边数,出度是指从该顶点出发的边数。
3. 优缺点
  • 优点

    • 能够准确表示有向关系,如网页链接、任务调度等。
    • 适合表示不对称的关系。
  • 缺点

    • 复杂性较高,特别是在涉及遍历和路径寻找时。
    • 算法实现相对复杂,如最短路径算法。
4. 应用场景
  • 网络路由:表示计算机网络中的连接。
  • 任务调度:表示任务之间的依赖关系。
  • 图形界面:表示用户界面元素之间的交互。
5. 示例

有向图可以用邻接表或邻接矩阵表示。以下是一个有向图的示例:

示例代码(Java 实现)

import java.util.*;class DirectedGraph {private Map<String, List<String>> adjacencyList;public DirectedGraph() {adjacencyList = new HashMap<>();}public void addVertex(String vertex) {adjacencyList.putIfAbsent(vertex, new ArrayList<>());}public void addEdge(String from, String to) {adjacencyList.putIfAbsent(from, new ArrayList<>());adjacencyList.putIfAbsent(to, new ArrayList<>());adjacencyList.get(from).add(to);}public List<String> getNeighbors(String vertex) {return adjacencyList.get(vertex);}
}

二、无向图(Undirected Graph)

1. 定义

无向图是一个由顶点和无方向的边组成的图。在无向图中,边连接两个顶点,但没有方向。

2. 特点
  • 边无方向:边表示的是两个顶点之间的关系,通常用线段表示。例如,边 A−B 表示顶点 A 和顶点 B 是相连的。
  • 每条边相互对称:如果存在边 A−B,则同时存在边 B−A。
  • 所有顶点具有相同的边关系
3. 优缺点
  • 优点

    • 适合表示对称关系,如社交网络、朋友关系。
    • 较简单的算法实现。
  • 缺点

    • 对于某些应用,缺乏表达方向性的能力。
    • 在某些情况下,图的结构可能会显得过于简单。
4. 应用场景
  • 社交网络:表示用户之间的朋友关系。
  • 电路设计:表示电路中元件之间的连接。
  • 城市交通:表示城市道路网络。
5. 示例

无向图可以用邻接表或邻接矩阵表示。以下是一个无向图的示例:

示例代码(Java 实现)

import java.util.*;class UndirectedGraph {private Map<String, List<String>> adjacencyList;public UndirectedGraph() {adjacencyList = new HashMap<>();}public void addVertex(String vertex) {adjacencyList.putIfAbsent(vertex, new ArrayList<>());}public void addEdge(String vertex1, String vertex2) {adjacencyList.putIfAbsent(vertex1, new ArrayList<>());adjacencyList.putIfAbsent(vertex2, new ArrayList<>());adjacencyList.get(vertex1).add(vertex2);adjacencyList.get(vertex2).add(vertex1); // 无向边}public List<String> getNeighbors(String vertex) {return adjacencyList.get(vertex);}
}

三、加权图(Weighted Graph)

1. 定义

加权图是一个图,其中每条边都分配有一个权重(或成本)。权重可以表示距离、时间、费用等多种含义。

2. 特点
  • 每条边有权重:边的权重通常是一个数值,表示从一个顶点到另一个顶点的代价。
  • 支持最短路径计算:适合用于计算从一个顶点到另一个顶点的最短路径。
  • 可以是有向或无向图:加权图可以是有向的或无向的。
3. 优缺点
  • 优点

    • 能够表示复杂的关系,如交通网络、物流等。
    • 可以使用多种算法(如 Dijkstra、Bellman-Ford)进行路径优化。
  • 缺点

    • 处理复杂性较高,尤其是在大量边和顶点的情况下。
    • 可能导致计算错误,尤其在负权重情况下(如 Bellman-Ford 算法)。
4. 应用场景
  • 地图导航:用于计算从起点到终点的最短路径。
  • 网络流量:分析和优化网络数据传输。
  • 电路分析:计算电路中元件之间的电流和电压。
5. 示例

加权图的表示通常使用邻接表或邻接矩阵。以下是一个加权图的示例:

示例代码(Java 实现)

import java.util.*;class WeightedGraph {private Map<String, List<Edge>> adjacencyList;class Edge {String destination;int weight;Edge(String destination, int weight) {this.destination = destination;this.weight = weight;}}public WeightedGraph() {adjacencyList = new HashMap<>();}public void addVertex(String vertex) {adjacencyList.putIfAbsent(vertex, new ArrayList<>());}public void addEdge(String from, String to, int weight) {adjacencyList.putIfAbsent(from, new ArrayList<>());adjacencyList.putIfAbsent(to, new ArrayList<>());adjacencyList.get(from).add(new Edge(to, weight));adjacencyList.get(to).add(new Edge(from, weight)); // 如果是无向图}public List<Edge> getNeighbors(String vertex) {return adjacencyList.get(vertex);}
}

总结比较

图类型边的方向性权重适用场景
有向图有方向任务调度、网络路由
无向图无方向社交网络、城市交通
加权图有向/无向地图导航、网络流量、电路分析

通过这些详细的介绍,可以更清晰地理解不同图类型的特点和应用场景,为具体问题的解决选择合适的数据结构提供帮助。

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

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

相关文章

大数据之Hadoop集群

Hadoop集群介绍&#xff1f;Hadoop集群的优缺点及应用场景&#xff1f;Hadoop集群搭建&#xff1f;Hadoop架构&#xff1f; Hadoop集群介绍 Hadoop集群是由多台计算机&#xff08;节点&#xff09;组成的一个分布式计算系统&#xff0c;主要用于处理大规模的数据集。以下是对Ha…

云原生+AI核心技术&最佳实践

以下内容是我在陕西理工大学2023级人工智能专业和网络专业的演讲内容&#xff0c;分享给大家。 各位老师、同学们&#xff0c;大家好啊&#xff01;能在这里跟大家一起聊聊咱们计算机专业那些事儿&#xff0c;我真的觉得超级兴奋&#xff01; 首先&#xff0c;自我介绍一下&am…

数字信号处理Python示例(5)使用实指数函数仿真PN结二极管的正向特性

文章目录 前言一、二极管的电流-电压关系——Shockley方程二、PN结二极管正向特性的Python仿真三、仿真结果分析写在后面的话 前言 使用Python代码仿真了描述二极管的电流-电压关系的Shockley方程&#xff0c;对仿真结果进行了分析&#xff0c;说明在正向偏置区域&#xff0c;…

真·香!深度体验 zCloud 数据库云管平台 -- DBA日常管理篇

点击蓝字 关注我们 zCloud 作为一款业界领先的数据库云管平台&#xff0c;通过云化自治的部署能力、智能巡检和诊断能力、知识即代码的沉淀能力&#xff0c;为DBA的日常管理工作带来了革新式的简化与优化。经过一周的深度体验&#xff0c;今天笔者与您深入探讨 zCloud 在数据库…

ICPC区域赛成都站【赛后回顾+总结】

传送门 前言赛后总结赛后回顾赛后感悟 前言 首先&#xff0c;这是本人本赛季第一场XCPC区域赛&#xff0c;也是本人算竞生涯中第一场XCPC区域赛&#xff08;之前只打过邀请赛和省赛&#xff09;。 赛后总结 然后赛后总结一下&#xff1a;我队天崩开局&#xff0c;我队出师不利…

Linux和,FreeRTOS 任务调度原理,r0-r15寄存器,以及移植freertos(一)

目录、 1、r0-r15寄存器&#xff0c;保护现场&#xff0c;任务切换的原理 2、freertos移植 3、freertos的任务管理。 一、前言 写这篇文章的目的&#xff0c;是之前面试官&#xff0c;刚好问到我&#xff0c;移植FreeRTOS 到mcu&#xff0c;需要做哪些步骤&#xff0c;当时回…

如果 MySQL 主库出现了问题,从库该何去何从呢?

🚀 博主介绍:大家好,我是无休居士!一枚任职于一线Top3互联网大厂的Java开发工程师! 🚀 🌟 在这里,你将找到通往Java技术大门的钥匙。作为一个爱敲代码技术人,我不仅热衷于探索一些框架源码和算法技巧奥秘,还乐于分享这些宝贵的知识和经验。 💡 无论你是刚刚踏…

基于Matlab 模拟停车位管理系统【源码 GUI】

系统对进入停车位的车辆进行车牌识别&#xff0c;将识别出来的车牌号显示出来&#xff1b;然后对车主进行人脸识别&#xff0c;框出车主照片的人脸部分作为车主信息的标记&#xff0c;记录在系统库中。车辆在库期间&#xff0c;系统使用者可以随意查看车辆与车主信息的获取过程…

【docker】docker 环境配置及安装

本文介绍基于 官方存储库 docker 的环境配置、安装、代理配置、卸载等相关内容。 官方安装文档说明&#xff1a;https://docs.docker.com/engine/install/ubuntu/ 主机环境 宿主机环境 Ubuntu 20.04.6 LTS 安装步骤 添加相关依赖 sudo apt-get update sudo apt-get install…

【论文阅读笔记】Wavelet Convolutions for Large Receptive Fields

1.论文介绍 Wavelet Convolutions for Large Receptive Fields 大感受野的小波卷积 2024 EECV Paper Code 2.摘要 近年来&#xff0c;人们试图通过增加卷积神经网络&#xff08;ConvolutionalNeuralNets&#xff0c;CNNs&#xff09;的核尺寸来模拟视觉变换器&#xff08;V…

DFS求解迷宫最长移动路线

来源:十四届蓝桥杯STEMA考试Python真题试卷第二套编程第五题 本文给出了C++实现代码,介绍了 STL 中容器vector,pair,unordered_set 的应用,供信奥选手参考。迷宫类问题适合用DFS算法解决,本文最后总结了DFS算法的两种常见实现方式——递归实现、栈实现,应用场景——迷宫…

【react使用AES对称加密的实现】

react使用AES对称加密的实现 前言使用CryptoJS库密钥存放加密方法解密方法结语 前言 项目中要求敏感信息怕被抓包泄密必须进行加密传输处理&#xff0c;普通的md5加密虽然能解决传输问题&#xff0c;但是项目中有权限的用户是需要查看数据进行查询的&#xff0c;所以就不能直接…

SpringBoot新闻稿件管理系统:架构与实现

3系统分析 3.1可行性分析 通过对本新闻稿件管理系统实行的目的初步调查和分析&#xff0c;提出可行性方案并对其一一进行论证。我们在这里主要从技术可行性、经济可行性、操作可行性等方面进行分析。 3.1.1技术可行性 本新闻稿件管理系统采用SSM框架&#xff0c;JAVA作为开发语…

光耦合器的关键作用和创新---腾恩科技

光耦合器或光隔离器已成为电路中必不可少的器件&#xff0c;它允许信号在无需直接电接触的情况下跨不同电压域传输。这种隔离能力对于保护低压元件免受高压电路的潜在损坏至关重要。本文将仔细研究光耦合器在当今技术中发挥的独特作用&#xff0c;并探讨其在各种应用中不断扩展…

HbuildderX运行到手机或模拟器的Android App基座识别不到设备 mac

寻找模拟器 背景&#xff1a; 运行的是h5&#xff0c;模拟器是网易MuMu。 首先检查一下是否配置dab环境&#xff0c;adb version 配置一下hbuilderX的adb&#xff1a; 将命令输出的路径配置到hbuilderx里面去&#xff0c;然后重启下HbuilderX。 开始安装基座…一直安装不…

使用 Spring Boot 搭建 WebSocket 服务器实现多客户端连接

在 Web 开发中&#xff0c;WebSocket 为客户端和服务端之间提供了实时双向通信的能力。本篇博客介绍如何使用 Spring Boot 快速搭建一个 WebSocket 服务器&#xff0c;并支持多客户端的连接和消息广播。 1. WebSocket 简介 WebSocket 是 HTML5 的一种协议&#xff0c;提供了客…

C# 日志框架 NLog、log4net 和 Serilog对比

文章目录 前言NLog、log4net 和 Serilog 三个框架的详细对比:一、NLog优点:缺点:二、 log4net优点缺点三、Serilog优点缺点四、Serilog使用举例总结前言 NLog、log4net 和 Serilog 三个框架的详细对比: NLog、log4net 和 Serilog 是三个非常流行的 .NET 日志框架,它们各自…

从0开始本地部署大模型

这就开始从0开始本地部署大模型 下载Ollama 下载地址&#xff1a;https://ollama.com/download/windows 适用于MacOS、Linux和Windows&#xff0c;这里我下载Windows的安装包。 直接打开安装包&#xff0c;点击install即可&#xff0c;安装完成后可以在任务栏中看到Ollama程…

RHCSA课后练习3(网络与磁盘)

1、配置网络&#xff1a;为网卡添加一个本网段IPV4地址&#xff0c;x.x.x.123 涉及的知识点 配置网络&#xff1a; ens160&#xff1a;en---表示以太网 wl---表示无线局域网 ww---表示无线广域网 注意&#xff1a;一个网络接口&#xff0c;可以有多个网络连接&#xff0c;但…

Linux:网络协议socket

我们之前学的通信是本地进程间通信&#xff0c;如果我们想在网络间通信的话&#xff0c;就需要用到二者的ip地址&#xff0c;分别被称为源IP地址和目的IP地址&#xff0c;被存入ip数据包中&#xff0c;其次我们还需要遵循一些通信协议。 TCP协议&#xff1a;传输层协议&#x…