数学建模----图与网络模型

目录

一.图的基本概念与数据结构

1.基本概念

 2.图与网络的数据结构

 1.邻接矩阵表示法

2.关联矩阵

 3.Matlab工具箱简介

 1.图的生成

4.问题讨论

1.最短路问题

2.最小生成树问题


一.图的基本概念与数据结构

1.基本概念

        点对应于研究对象,根据关系将一些点对应相连,不考虑点的位置与连线的曲直长短,这样形成的一个关系结构就是一个图。记为G=(V,E),V为顶点集,E是以上述连线为元素的边集。

        如果个边都加上方向,则称为有向图,否则称为无向图。如果有的边有方向,有的边无方向,则称为混合图。

点的度:

        (1)定义(1)在无向图中,与顶点v关联的边的数目(环算两次)称为v的度,记为d(v)。

        (2)在有向图中,从顶点v引出的弧的数目称为v的出度,记为d^{+}(v)

                  从顶点v引入的弧的数目称为v的入度,记为d^{-}(v),d(v)=d^{+}(v)+d^{-}(v)称为v的度

 2.图与网络的数据结构

        计算机中描述图与网络有两种方法:邻接矩阵表示法和关联矩阵表示法。

        下列讨论中,首先假设G=(V,E)是一个简单无向图,顶点集合V = \left \{ v_{1},L,v_{n} \right \},边集E=\left \{ e_{1},L,e_{m} \right \},记\left | V \right | =n,\left | E \right | =m

 1.邻接矩阵表示法

        邻接矩阵是表示顶点之间相邻关系的矩阵,邻接矩阵记作W = (w_{ij})_{n'n},

当G为赋权图时:

当G为非赋权图时: 

2.关联矩阵

        对于无向图G,其关联矩阵M=(m_{ij})其中,若顶点v_{i}与边e_{j}关联m_{ij}=1;反之m_{ij}=0

 3.Matlab工具箱简介

 1.图的生成

  • Graph:无向图
  • Digraph:有向图
  • G = graph ----创建空的无向图对象
  • G = graph(A)----使用邻接矩阵A创建赋权无向图。
  • G = graph(A,nodes) ----- 试用邻接矩阵A和节点名称nodes创建赋权无向图。
  • G = graph(s,t)---使用节点对组s,t创建无向图。
  • G = graph(s,t,weights)---使用节点对组s,t和权重向量weights创建赋权无向图。
  • G = graph(s,t,weights,nodes)---使用字符向量元胞数组nodes指定节点名称
  • G = graph(A,[nodes],type) ----- 仅使用邻接矩阵A的上或下三角形阵构造赋权图,type可以是'upper'或'lower'。

2.小tip

  • nodes = cellstr(strcat('v',int2str([1:6]')))%%创建节点符号

.

 

4.问题讨论

1.最短路问题

        (1)两个指定顶点之间的最短路径

        问题如下,给出了一个连接若干个城镇的铁路网络,在这个网络的两个指定城镇间,找一条最短铁路线。

        构造赋权图 G =(V,E,W),其中顶点集V =\left \{ v_{1},L,v_{n} \right \} , 这里 v_{1},L,v_{n} 表示各个小城镇,E为边的集合,邻接矩阵W = (w_{ij})_{n'n},这里 w_{ij}表示顶点v_{i}v_{j}之间直通铁路的距离,若顶点 v_{i}v_{j}之间无铁路,则 w_{ij}= ?\propto。问题就是赋权图G中指定的两个顶点u_{0},v_{0} , 间的具有最小权的路。这条路叫做u_{0},v_{0}间的最短路,它的权叫做 u_{0},v_{0}的距离,亦记作d(u_{0},v_{0})

        求解最短路的问题,常用算法为狄克斯特拉(Dijkstra)算法

Dijkstra算法的基本思想是:

  • 采用二维数组邻接矩阵的形式储存图并将图初始化;
  • 选择其中一个顶点作为计算最短路径的起点。
  • 构造一个d一维数组dis[n],其中n是顶点个数,dis用来记录最短路径距离。初始化dis,其值为图中各点到起点的直接距离(即邻接顶点记为其权值,不相邻的顶点记为∞);
  • 每次中dis数组中找出最小值,该值就是起点到该点的最短路径距离,(可以将该点加一个标志位已记录该点路径已确定);
  • 在加入了一个新的确定了点之后就需要更新dis数组,看其余点能否通过这个确定的点到达起始点且距离能够更短。
  • 重复4、5步,直到所有点都找到了最短路径

(有向图)  已知某人要从出发去旅行,目的地及其交通路线见图4.6所示,线侧数字为所需费用。求该旅行者到目的地的费用最小的旅行路线。

clc, clear, close all
E = [1,2,6; 1,3,3; 1,4,1; 2,5,1; 3,2,2; 3,4,2; 4,6,10; 5,4,65,6,4; 5,7,3; 5,8,6; 6,5,10; 6,7,2; 7,8,4; 9,5,2; 9,8,3];
G = digraph(E(:,1), E(:,2), E(:,3));
[path, d] = shortestpath(G, 1, 8, 'method','positive')
p = plot(G,'EdgeLabel',G.Edges.Weight,'Layout', 'circle');
highlight(p,path,'EdgeColor','r','LineWidth',1.5)

利用MATLAB程序求得v_{1}v_{8}的费用最小路径为v_{1}\rightarrow v_{3}\rightarrow v_{2}\rightarrow v_{5}\rightarrow v_{8},对应的最小费用为12。

 Dijkstra算法能否求任意两个顶点对之间的最短路?

具体方法——每次以不同的顶点作为起点,用Dijkstra算法求出从该起点到其余顶点的最短路径,反复执行n-1(n为顶点个数)次这样的操作,就可得到每对顶点之间的最短路。

 由于这种方法太过麻烦,引入另一算法

(二)所有顶点对之间最短路的---Floyd算法

        Floyd算法允许赋权图中包含负权的边或弧,但是,对于赋权图中的每个圈C,要求圈C上所有弧的权总和为非负。

        Floyd算法包含三个关键算法:求距离矩阵、求路径矩阵、最短路查找算法。

1.求距离矩阵的算法

 1,2,3,,,,,,,,k,k+1,,,,,,,n每增加一个单位相当于多加入一个点

例如A1(中间不经历节点):v0->v1;A2(中间经历过的节点小于等于1):v0->v1 ,v0->v1->v2

2.最小生成树问题

2.1基本概念

        连通的五圈图叫做树,记为T;其度为1的顶点称为叶子顶点;显然有边的树至少有两个叶子顶点。

        若图G=(V(G),E(G))和树T = (V(T),E(T))满足V(G) = V(T),E(T)属于E(G),则称T是G的生成树。图G连通的充分必要条件为G有生成树,一个连通的生成树很多。

 

 两种算法:

  • Kruskal算法
  • Prim算法

 

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

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

相关文章

干货推荐 :大模型、AI经济和AI基础设施

‍大家好,我是算想未来的创始人CEO赵亚雄。今天非常高兴到母校来做简短的分享。我们最近会几乎是被ChatGPT、OpenAI等等话题各类的信息轮番轰炸。我希望借助这个机会,把自己这一段时间来思考的有关AI基础设施还有AGI再到大模型等内容,从相对抽…

干货 | 赵亚雄:大模型、AI经济和AI基础设施

大家好,我是算想未来的创始人CEO赵亚雄。今天非常高兴到母校来做简短的分享。我们最近会几乎是被ChatGPT、OpenAI等等话题各类的信息轮番轰炸。我希望借助这个机会,把自己这一段时间来思考的有关AI基础设施还有AGI再到大模型等内容,从相对抽象…

chatgpt赋能python:Python动画制作:一场令人惊叹的视觉盛宴

Python 动画制作:一场令人惊叹的视觉盛宴 随着技术的进步,越来越多的设计师和开发者开始使用Python来制作动画。Python是一种富有表现力的编程语言,它的简洁性和可读性使它成为动画制作的首选。 动画制作的基础知识 在开始使用Python来制作…

chatgpt赋能python:如何使用Python制作动画?

如何使用Python制作动画? Python是一种高级编程语言,被广泛应用于各种领域,包括动画制作。Python的简洁性和强大的功能使得它成为一个很好的选择来制作动画。在这篇文章中,我将向您介绍使用Python如何制作动画。 第一步&#xf…

chatgpt赋能python:Python制作动画,让编程更生动

Python 制作动画,让编程更生动 Python 是一种强大的编程语言,以其简单易学和灵活多变闻名。除了在数据分析和机器学习领域得到广泛应用外,Python 在制作动画方面也有独特的优势,这一点往往会被忽视。 Python 制作动画能够让编程…

chatgpt赋能python:Python动画制作入门指南

Python 动画制作入门指南 如果你想为你的网站或者应用程序增加一些吸引人的动画效果,Python 可以成为非常强大的工具。Python 有很多可以用来制作动画的库和工具,本文将为大家介绍一些常用的方法,并给出一些简单易懂的例子。 1. 利用 Pygam…

Spring Security 保姆级教程!40000字!

大家好,我是老赵 Spring Security 是 Spring 家族中的一个安全管理框架。相比与另外一个安全框架Shiro,它提供了更丰富的功能,社区资源也比Shiro丰富。 一般来说中大型的项目都是使用SpringSecurity 来做安全框架。小项目有Shiro的比较多&…

Android-换个思路实现H5唤醒App并跳转到指定页面

一、H5如何唤醒App H5唤醒App有多种方式,但一般前端为了同时兼容Android和iOS会采用URL Scheme的形式,下面就重点介绍这种方式。 一个URL Scheme是由以下部分组成的: [scheme]://[host]:[port][path]?[参数] 说明以及举例 scheme是和前端商量好的&a…

《低代码指南》——维格云低代码个人设置

目录 1. 简介 1.1 功能简介 1.2 设置内容 1.3 预期效果 2. 详细内容 2.1 基本信息 2.2 账号安全 1. 简介 1.1 功能简介 个人设置是对个人信息的基本设置。管理员及成员可以通过「账户中心 >> 个人设置」修改个人信息。 1.2 设置内容 个人设置里包括基本信息、账…

chatgpt赋能python:Python虚拟环境安装和配置

Python虚拟环境安装和配置 介绍 Python虚拟环境是一种将Python解释器及其相关依赖包隔离开的机制,它使得我们可以在同一计算机上同时安装多个Python版本,并且每个版本可以拥有自己独立的第三方库。 安装 Python自带的venv模块可以用来创建和管理虚拟…

守护进程和后台进程的理解

关于守护进程和后台进程, 一直以为是一个东西。然而并不是。 概念 先看下 chatGPT上对二者的描述: 如何创建守护进程 通常情况下,守护进程的父进程是init进程(PID为1)。在类Unix系统中,init进程是系统…

chatgpt赋能python:Python拦截手机短信——探索安全应用的新契机

Python拦截手机短信——探索安全应用的新契机 短信成为了我们日常生活中不可或缺的通信手段之一。但是,你是否曾想过,自己的短信是否安全?有没有人会窃取你的短信内容?Python提供了一种新的安全保障方法,就是拦截手机…

php限制访问次数,api接口限流(限制请求次数)

有时候我们需要给我们写的接口来定义请求限制次数(限流) 如多长时间之内只能请求多少次。这样可以防止某些恶意用户一直请求我们的接口 给服务器减轻压力。 应用场景:app端 用户收藏文章 取消收藏文章(某些恶意用户一直在app端重复点击收藏或取消收藏 这样对我们的数…

ChatGPT冷观察:没有大模型的土壤,开不出ChatBot的花

文|智能相对论 作者|叶远风 谁在跟风,谁又有真本事能做出中国版的对标产品来? 这恐怕是ChatGPT这股热潮以来,关心中国AI发展的业界人士最想问的问题。 或者说,在中国人工智能不落后于全世界的当下,业界也在普遍渴望一个…

钉钉PC端聊天中分享的网址生成卡片

前言 卡片化可以方便用户更加简单直接的获取到你网页当中的内容&#xff0c;吸引用户点击进去查看更详细的信息 实现 方式一&#xff1a; 通过设置页面的<meta>标签去获取&#xff1a; <head><meta charset"UTF-8"><meta name"viewpo…

钉钉创建群机器人

1、在对应群&#xff0c;点击右上角设置按钮&#xff1a; 2、点击群智能助手&#xff1a; 3、点击 添加机器人&#xff1a; 4、选择添加 自定义机器人&#xff1a; 5、点击 添加&#xff1a; 6、根据实际情况 选择设置类型&#xff1a; 7、复制得到对应的token值&a…

钉钉群机器人接入

内容摘要 1.简单接入群机器人&#xff0c;主要用于在群里发送通知信息 2.官方API文档&#xff1a;什么是机器人 - 钉钉开放平台 1.创建一个钉钉群&#xff0c;按照下面步骤添加自定义机器人&#xff0c;设置时选择“加签”&#xff0c;创建好之后会得到机器人的webhook 2.机…

钉钉机器人发送卡片消息

1.打开钉钉开放平台&#xff1a;https://open.dingtalk.com/ 2.登陆&#xff08;需要管理员身份&#xff09; 3.开发者后台——创建应用内机器人 4.获得AppKey和AppSecret&#xff0c;用于获取access_token 具体操作官方文档&#xff1a;https://open.dingtalk.com/document/o…

钉钉小程序生态5—钉钉群机器人消息通知和钉钉工作通知

文章导航 钉钉小程序生态1—区分企业内部应用、第三方企业应用、第三方个人应用 钉钉小程序生态2—区分小程序和H5微应用 钉钉小程序生态3—钉钉扫码登录PC端网站 钉钉小程序生态4—钉钉小程序三方企业应用事件与回调 钉钉小程序生态5—钉钉群机器人消息通知和钉钉工作通知 前…

工具使用之——钉钉添加自定义机器人

一 概述 钉钉有自定义机器人功能&#xff0c;开发者可以选择机器人类型(心知天气、代码托管平台&#xff0c;JIRA等)&#xff0c;也可以自定义通过Webhook接入自定义服务的机器人&#xff0c;本篇文章介绍的就是通过Webhook发送通知的机器人 二 添加机器人 点击左侧上方的用户…