探索图结构:从基础到算法应用

文章目录

      • 理解图的基本概念
      • 学习图的遍历算法
      • 学习最短路径算法
      • 案例分析:使用 Dijkstra 算法找出最短路径
      • 结论

在这里插入图片描述

🎉欢迎来到数据结构学习专栏~探索图结构:从基础到算法应用


  • ☆* o(≧▽≦)o *☆嗨~我是IT·陈寒🍹
  • ✨博客主页:IT·陈寒的博客
  • 🎈该系列文章专栏:数据结构学习
  • 📜其他专栏:Java学习路线 Java面试技巧 Java实战项目 AIGC人工智能 数据结构学习
  • 🍹文章作者技术和水平有限,如果文中出现错误,希望大家能指正🙏
  • 📜 欢迎大家关注! ❤️

图结构是计算机科学中的一项重要内容,它能够模拟各种实际问题,并在网络、社交媒体、地图等领域中具有广泛的应用。本文将引导你深入了解图的基本概念、遍历算法以及最短路径算法的实际应用。
在这里插入图片描述

理解图的基本概念

顶点和边: 图由一组顶点(vertices)和连接这些顶点的边(edges)构成。边可以带有权重(weight),代表两个顶点之间的关系强度或成本。

在这里插入图片描述

有向图与无向图: 有向图中的边是有方向的,从一个顶点指向另一个顶点;无向图中的边没有方向,是双向的。

在这里插入图片描述

权重图: 权重图中的边带有权重,用于表示顶点之间的距离、代价等信息。
在这里插入图片描述

学习图的遍历算法

深度优先搜索(DFS): DFS 是一种遍历图的算法,它从一个起始顶点开始,递归地访问相邻顶点,直到无法继续为止。DFS 的应用包括查找连通分量、拓扑排序等。

在这里插入图片描述

广度优先搜索(BFS): BFS 也是一种遍历图的算法,它从起始顶点开始,逐层访问其邻居顶点。BFS 的应用包括查找最短路径、社交网络中的“六度分隔”等。

学习最短路径算法

Dijkstra 算法: Dijkstra 算法用于查找带权重的图中从一个起始顶点到其他顶点的最短路径。它采用贪心策略,每次选择当前距离最近的顶点进行拓展。Dijkstra 算法的应用包括路由算法、地图导航等。

在这里插入图片描述

Bellman-Ford 算法: Bellman-Ford 算法也用于查找图中的最短路径,但与 Dijkstra 算法不同,它适用于带有负权边的图。Bellman-Ford 算法通过进行多次松弛操作逐步逼近最短路径。

案例分析:使用 Dijkstra 算法找出最短路径

假设我们有一个城市之间的道路网络,每条道路都有对应的时间(权重)。我们想要找到从起始城市到目标城市的最短时间路径。以下是使用 Dijkstra 算法实现这个目标的示例代码:

import java.util.*;public class ShortestPath {public Map<String, Integer> findShortestPath(Map<String, Map<String, Integer>> graph, String start, String end) {PriorityQueue<String> pq = new PriorityQueue<>(Comparator.comparingInt(graph.get(start)::get));Map<String, Integer> distances = new HashMap<>();Map<String, String> predecessors = new HashMap<>();distances.put(start, 0);graph.keySet().forEach(city -> {if (!city.equals(start)) {distances.put(city, Integer.MAX_VALUE);predecessors.put(city, null);}pq.offer(city);});while (!pq.isEmpty()) {String current = pq.poll();for (Map.Entry<String, Integer> neighbor : graph.get(current).entrySet()) {int newDistance = distances.get(current) + neighbor.getValue();if (newDistance < distances.get(neighbor.getKey())) {distances.put(neighbor.getKey(), newDistance);predecessors.put(neighbor.getKey(), current);}}}Map<String, Integer> shortestPath = new HashMap<>();String current = end;while (current != null) {shortestPath.put(current, distances.get(current));current = predecessors.get(current);}return shortestPath;}public static void main(String[] args) {ShortestPath shortestPath = new ShortestPath();Map<String, Map<String, Integer>> graph = new HashMap<>();graph.put("A", Map.of("B", 5, "C", 2));graph.put("B", Map.of("D", 1, "E", 6));graph.put("C", Map.of("B", 1, "D", 4));graph.put("D", Map.of("E", 1));graph.put("E", Collections.emptyMap());String start = "A";String end = "E";Map<String, Integer> result = shortestPath.findShortestPath(graph, start, end);System.out.println("Shortest path from " + start + " to " + end + ": " + result);}
}

结论

图结构在现实世界中有着丰富的应用,从社交网络到交通系统。了解图的基本概念、遍历算法以及最短路径算法,可以让你更好地理解和处理与图相关的问题。通过学习这些知识,你将能够在解决实际问题时更加灵活和高效地运用图结构和算法。


🧸结尾


❤️ 感谢您的支持和鼓励! 😊🙏
📜您可能感兴趣的内容:

  • 【Java面试技巧】Java面试八股文 - 掌握面试必备知识(目录篇)
  • 【Java学习路线】2023年完整版Java学习路线图
  • 【AIGC人工智能】Chat GPT是什么,初学者怎么使用Chat GPT,需要注意些什么
  • 【Java实战项目】SpringBoot+SSM实战:打造高效便捷的企业级Java外卖订购系统
  • 【数据结构学习】从零起步:学习数据结构的完整路径

在这里插入图片描述

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

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

相关文章

代理池在过程中一直运行

Hey&#xff0c;爬虫达人们&#xff01;在爬虫的过程中&#xff0c;要保持代理池的稳定性可不容易。今天就来和大家分享一些实用经验&#xff0c;教你如何让代理池在爬虫过程中一直运行&#xff01;方法简单易行&#xff0c;让你的爬虫工作更顺畅. 在进行爬虫工作时&#xff0…

KVM虚拟化平台安装及创建虚拟机

文章目录 一、KVM 简介二、安装KVM虚拟化平台1、方式一&#xff1a;安装操作系统时&#xff0c;添加虚拟化功能2、方式二&#xff1a;基于现有系统&#xff0c;安装虚拟化功能3、验证KVM安装是否无误 三、创建虚拟机1、创建虚拟机前环境准备工作2、创建CentOS7.5系统虚拟机 一、…

保姆级使用vmware安装Ubuntu-server版

保姆级VMware安装Ubuntu20服务器版 文章目录 保姆级VMware安装Ubuntu20服务器版前期准备一、安装vmware二、下载Ubuntu镜像 VMware安装Ubuntu201. 启动Workstation Pro或者Workstation Player,进入软件后新建一个虚拟机2. 进入引导界面选择默认的即可3. 点击下一步即可4. 选择操…

QT5.12.12通过ODBC连接到GBase 8s数据库(CentOS)

本示例使用的环境如下&#xff1a; 硬件平台&#xff1a;x86_64&#xff08;amd64&#xff09;操作系统&#xff1a;CentOS 7.8 2003数据库版本&#xff08;含CSDK&#xff09;&#xff1a;GBase 8s V8.8 3.0.0_1 为什么使用QT 5.12.10&#xff1f;该版本包含QODBC。 1&#…

1782. 统计点对的数目

给你一个无向图&#xff0c;无向图由整数 n &#xff0c;表示图中节点的数目&#xff0c;和 edges 组成&#xff0c;其中 edges[i] [ui, vi] 表示 ui 和 vi 之间有一条无向边。同时给你一个代表查询的整数数组 queries 。 第 j 个查询的答案是满足如下条件的点对 (a, b) 的数…

SFM structure from motion

struction就是空间三维点的位置 motion 就是相机每帧的位移 https://www.youtube.com/watch?vUhkb8Zq-dnM&listPL2zRqk16wsdoYzrWStffqBAoUY8XdvatV&index9

[Open-source tool] 可搭配PHP和SQL的表單開源工具_Form tools(1):簡介和建置

Form tools是一套可搭配PHP和SQL的表單開源工具&#xff0c;可讓開發者靈活運用&#xff0c;同時其有數個表單模板和應用模組供挑選&#xff0c;方便且彈性。Form tools已開發超過20年&#xff0c;為不同領域的需求者或開發者提供一個自由和開放的平台&#xff0c;使他們可建構…

CSS加载失败的6个原因

有很多刚刚接触 CSS 的新手有时会遇到 CSS 加载失败这个问题&#xff0c;但测试时&#xff0c;网页上没有显示该样式的问题&#xff0c;这就说明 CSS 加载失败了。出现这种状况一般是因为的 CSS 路径书写错&#xff0c;或者是在浏览器中禁止掉了 CSS 的加载&#xff0c;可以重新…

vue3 vite使用 monaco-editor 报错

报错&#xff1a;Unexpected usage at EditorSimpleWorker.loadForeignModule 修改配置&#xff1a; "monaco-editor-webpack-plugin": "^4.2.0",删除不用 版本&#xff1a; "monaco-editor": "^0.28.1", 修改如下&#xff1a; opti…

vue3学习源码笔记(小白入门系列)------ 组件是如何渲染成dom挂载到指定位置的?

文章目录 os准备组件如何被挂载到页面上第一步 createApp 做了哪些工作&#xff1f;ensureRendererbaseCreateRenderercreateAppAPImountrenderpatchprocessComponentprocessElement 总结 os 学习一下vue3 源码&#xff0c;顺便记录分享下 使用vitest 插件调试源码 辅助阅读 …

matlab使用教程(25)—常微分方程(ODE)选项

1.ODE 选项摘要 解算 ODE 经常要求微调参数、调整误差容限或向求解器传递附加信息。本主题说明如何指定选项以及每个选项与哪些微分方程求解器兼容。 1.1 选项语法 使用 odeset 函数创建 options 结构体&#xff0c;然后将其作为第四个输入参数传递给求解器。例如&#xff0…

【算法专题突破】双指针 - 复写零(2)

目录 1. 题目解析 2. 算法原理 3. 代码编写 写在最后&#xff1a; 1. 题目解析 题目链接&#xff1a;1089. 复写零 - 力扣&#xff08;Leetcode&#xff09; 我先来读题&#xff0c; 题目的意思非常的简单&#xff0c;其实就是&#xff0c; 遇到 0 就复制一个写进数组&a…