Day_40关于图的总结

news2024/12/26 12:31:44

一. 实际问题的抽象与建模

        如果我们需要研究一个实际问题,首先第一步就是对这个实际问题进行抽象,抽象是从众多的事物中抽取出共同的、本质性的特征,而舍弃其非本质的特征的过程。具体地说,抽象就是人们在实践的基础上,对于丰富的感性材料通过去粗取精、去伪存真、由此及彼、由表及里的加工制作,形成概念、判断、推理等思维形式,以反映事物的本质和规律的方法。抽象得到结果我们再对其进行数学建模,数学建模,就是根据实际问题来建立数学模型,对数学模型来进行求解,然后根据结果去解决实际问题。当需要从定量的角度分析和研究一个实际问题时,人们就要在深入调查研究、了解对象信息、作出简化假设、分析内在规律等工作的基础上,用数学的符号和语言作表述来建立数学模型。像之前我们解决的图的m色着色问题,第一步就是将地图板块抽象成一个个节点,地图版块与地图板块之间的连接抽象成节点的连接,最后我们得到了一个连通图,这就是抽象的意义:化繁为简。

二. 栈和队列在关于图的算法中的重要作用

        栈是一种“后进先出”(Last In,First Out)的数据结构,也就是说最后进入栈中的元素最先弹出。在栈中只允许在一端进行插入和删除操作,这一端被称为栈顶。插入元素的操作被称为入栈,删除元素的操作被称为出栈。栈常用于实现递归算法、深度优先搜索(DFS)算法、表达式求值、函数调用栈等。

      而队列则是一种“先进先出”(First In,First Out)的数据结构,也就是说最先进入队列的元素最先删除。队列有两个端点,分别为队头和队尾。数据插入在队尾,删除在队头,这就保证了队列的元素按照先进先出的顺序进行处理。队列常用于实现广度优先搜索(BFS)算法、仿真模拟等。

        之所以会定义栈和队列这样的数据结构是因为他们有两大特性:
        第一: 他们可以保存程序运行路径中各个点的信息,以便用于回溯操作或其他需要访问已经访问过的节点信息的操作。比如: 栈用于解决迷宫问题,就是用到了若线路不通,需要回溯到已访问过的结点,从那个结点再做一次与这次路径不同的选择。
        第二: 先进后出和先进先出的次序。先进后出次序其实就是一种将序列反序操作的次序,先进先出次序 其实就是一种将序列顺序操作的次序。比如:利用栈的先进后出可以解决进制转化问题 ,即:先将个位余数进栈,再将十位余数进栈,然后百位,千位等 ,这样出栈的时候顺序就成了反序出栈,即:先千位,百位,然后十位,最后个位。

三. DFS深度遍历算法

        图里面常用的算法之一,之所以要作为总结之一,是因为它的思想思维过程——回溯。首先一开始我们在图里面寻找条件满足的节点,一直向下寻找,直到最后一个节点没有再满足条件的节点,这个时候我们开始回溯。回到上一个节点是否还有满足条件的节点,若有则进行寻找;若没有则继续回溯直到所有的节点都遍历完毕。DFS使用的数据结构是栈,回溯是一种选优搜索法,又称为试探法,按选优条件向前搜索,以达到目标。但当探索到某一步时,发现原先选择并不优或达不到目标,就退回一步重新选择,这种走不通就退回再走的技术为回溯法,而满足回溯条件的某个状态的点称为“回溯点”。

四. BFS广度遍历算法

        图的广度优先遍历算法和树的层序遍历相类似。其思想是:从第一个结点开始遍历,访问第一个结点后,依次访问该结点的相邻结点,再把从这些访问过得结点中依次访问它们的相邻结点,直至访问完所有的结点。BFS的算法过程就是记录每一个访问过的节点的值,不需要回溯,所以在这里我们用到了另外一种数据结构——队列。

五. 邻接表与十字链表——图的另外两种记录方式

        邻接矩阵是最好理解的一个记录图节点信息的数据结构,当然我们不可能否认其他存储图的数据结构这里我们有邻接表和十字链表。邻接表,存储方法跟树的孩子链表示法相类似,是一种顺序分配和链式分配相结合的存储结构。如这个表头结点所对应的顶点存在相邻顶点,则把相邻顶点依次存放于表头结点所指向的单向链表中。可以看出邻接表只用存储每个节点的出边即可,若我们设定一个图的<V,E>,则邻接矩阵的时间复杂度O(n)=O(E^{2}),邻接表的时间复杂度O(n)=O(V^{2}),当稀疏矩阵的时候,我们用邻接表的复杂度最低(最节省电脑空间)。二十字链表是邻接表的扩展,我们之前说邻接表只记录的节点的出边,那么十字链表就是既记录出边又记录入边。

六. 贪心算法

        贪心算法(greedy algorithm,又称贪婪算法)是指在对问题求解时,总是做出在当前看来是最好的选择。也就是说,不从整体最优上加以考虑,算法得到的是在某种意义上的局部最优解。贪心算法不是对所有问题都能得到整体最优解,关键是贪心策略的选择。例如后面我们要总结的Dijkstra从节点i到节点j若每一步都是直接贪心计算的话,计算得到的结果可能并不是节点i到节点j的最小值。

七. Prim与Dijkstra的理解

        贪心算法的直接应用,Prim算法首先寻找距离最近的节点(贪心),接着连成一个系统,找哪一个节点到这个系统的值最小。Dijkstra和Prim有异曲同工之妙,是从一个顶点到其余各顶点的最短路径算法,解决的是有权图中最短路径问题。主要特点是寻找距离最近的节点(贪心),连成一个系统,更新其余节点离源点的距离,接着寻找哪一个节点距离源点最近。两者的区别在于一个是寻找和系统最近的节点,后者是寻找距离源点最近的节点。

八. 通过构建辅助空间存储关键信息

        深度优先遍历算法,广度优先遍历算法,Prim算法,Dijkstra算法,求关键路径这里面都构造了辅助空间类似于队列,栈这两个数据结构;还有其他存储节点信息的空间——像统计关键路径的出度、入度的矩阵;Prim算法,Dijkstra算法的访问矩阵,距离矩阵这些信息在编写计算机程序的时候提供了关键作用。

九. 多阶段操作中的信息更新

        这里是因为关键路径的启发,计算每个节点的出度和入度这里不再赘述,后面我们根据入度为0的节点,再根据源点与节点之间的时间计算节点的最早时间。简而言之每当我们计算得到结果时,都可以更新信息来作为下一次计算的基础。

十.  暴力算法的剪枝操作

        我们都知道搜索算法一般是基于两种方法来进行的( 深度优先 DFS 和广度优先 BFS ),而这两算法都是基于二叉搜索树的进行的。学过数据结构和算法的都知道二叉搜索树存在很多的分支,很难一次性拿到想要的结果,尤其是当输入参数较大时,二叉搜索树的分支大规模增加的时候,此时,由于搜索过程需要走很多条完全于与结果不相关的路线,所以剪枝思想就出现了。剪枝一种可以提高搜索算法时间和空间效率的技巧,经过剪枝和其他优化策略优化过的算法在执行效率上远超一般未经剪枝的算法。甚至有些暴力搜索过不了时限的算法,也可以通过各种剪枝+优化大大缩短算法运行时间,成功通过时效限制。由此可见剪枝对于搜索算法的重要性。

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

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

相关文章

Java中的金钱陷阱

前言 有多少小伙伴是被标题 骗 吸引进来的呢&#xff0c;我可不是标题党&#xff0c;今天的文章呢确实跟”金钱“有关系。 但是我们说的不是过度追求金钱而掉入陷阱&#xff0c;而是要说一说在Java程序中&#xff0c;各种跟金钱运算有关的陷阱。 日常工作中我们经常会涉及到…

chatgpt赋能python:Python字幕滚动:如何让你的视频内容更吸引人

Python字幕滚动&#xff1a;如何让你的视频内容更吸引人 如果你是一位视频创作者&#xff0c;你可能知道如何通过字幕来增加你的视频的吸引力。Python提供了一种简单且高效的方法来制作字幕滚动。字幕滚动是指将文字逐个显示在视频下方&#xff0c;以帮助观众跟上视频的进展。…

让我们彻底了解Maven(一)--- 基础和进阶

Maven大家都很熟悉&#xff0c;但是我们很多人&#xff0c;对它其实都是似乎很熟&#xff0c;但是又好像不熟悉的感觉&#xff0c;包括我&#xff0c;今天咱们就一起来彻底了解Maven的所有功能&#xff0c;我们从入门&#xff0c;到原理剖析&#xff0c;再到实践操作&#xff0…

chatgpt赋能python:Python如何遍历列表并提取

Python如何遍历列表并提取 在Python编程语言中&#xff0c;列表是一种非常常见的数据类型。它是一个有序的集合&#xff0c;可以存储多个元素&#xff0c;可以是任何类型的数据&#xff0c;例如整数、字符串、布尔值等等。遍历一个列表并提取其中的元素是一个基本的操作&#…

测试用例设计方法——错误猜测法

很多软件测试从业者用到的黑盒测试用例设计方法大多是等价类划分法、边界值分析法、判定表法、因果图法和正交试验法等&#xff0c;其实还有一种方法不得不提到&#xff0c;那就是错误猜测法&#xff0c;这对资深测试人员尤为重要。因为随着在产品测试的实践中对产品的了解和测…

MySQL目录结构与源码

MySQL目录结构与源码 前言一、主要目录结构二、MySQL 源代码获取 前言 本博主将用CSDN记录软件开发求学之路上亲身所得与所学的心得与知识&#xff0c;有兴趣的小伙伴可以关注博主&#xff01;也许一个人独行&#xff0c;可以走的很快&#xff0c;但是一群人结伴而行&#xff…

Linux命令学习之文本查看命令cat、head和tail

for i in {1..100} do echo $i >> good.txt done把1到100写入到good.txt文件中。接下来使用good.txt这个文件来演示查看文本查看命令。 cat man cat可以看一下帮助使用说明&#xff0c;按q可以退出。 cat是连接文件并把文件内容输出到标准输出上。cat good.txt就可以…

Mirai 僵尸网络变体向 RCE、DDoS 开放 Tenda、Zyxel Gear

Mirai 僵尸网络的一个变体利用四种不同的设备漏洞将流行的基于 Linux 的服务器和物联网 (IoT) 设备添加到可以进行基于网络的攻击&#xff08;包括分布式拒绝服务 (DDoS) 攻击&#xff09;的僵尸网络中。 Palo Alto Networks 的 Unit 42 的一个团队观察到这个变体&#xff0c;…

【利用AI让知识体系化】Webpack 相关配置技巧

文章目录 章节一&#xff1a;了解 WebpackWebpack 是什么&#xff1f;为什么使用 Webpack&#xff1f;Webpack 的基本概念Webpack 的核心概念和实现原理 章节二&#xff1a;安装和配置 Webpack安装 Webpack配置 WebpackWebpack 的常用配置项 章节三&#xff1a;Webpack 的插件和…

企业应该如何选择适合自己的直播平台?

企业应该如何选择适合自己的直播平台&#xff1f;本文将从功能需求、可靠性与稳定性、用户体验、技术能与售后服务能力等方面进行综合考虑&#xff0c;帮助您做出明智的决策&#xff0c;或是说提供选型方面的参考。 企业在选择一家直播平台时应考虑以下因素&#xff1a; 1. 企…

2023/6/6总结

CSS 如果想要实现背景颜色渐变效果&#xff1a; left是从左边开始&#xff0c;如果想要对角线比如&#xff0c;左上角就是left top&#xff0c;渐变效果始终是沿着一条线来实现的。 下面是跟着视频教学用flex布局写的一个移动端网页&#xff1a; html代码&#xff1a; <!…

chatgpt赋能python:Python字符串:去除\n的方法和应用

Python字符串&#xff1a;去除\n的方法和应用 在Python编程中&#xff0c;字符串是非常常用的数据类型。在文本处理中&#xff0c;经常会遇到需要去除多余的换行符&#xff08;\n&#xff09;的情况。本文将介绍Python中去除\n的方法以及在实际应用中的使用。 方法一&#xf…

第六十七天学习记录:对陈正冲编著《C 语言深度解剖》中关于变量命名规则的学习

最近开始在阅读陈正冲编著的《C 语言深度解剖》&#xff0c;还没读到十分之一就感觉收获颇多。其中印象比较深刻的是其中的变量的命名规则。 里面提到的不允许使用拼音正是我有时候会犯的错。 因为在以往的工作中&#xff0c;偶尔会遇到时间紧迫的情况。 而对于新增加的变量不知…

chatgpt赋能python:Python安装和打开教程

Python安装和打开教程 Python作为一种高效、灵活、易学易用的编程语言&#xff0c;越来越受到广大程序员的青睐&#xff0c;越来越多的人想要学习Python。在学习Python之前&#xff0c;首先要进行Python的安装和打开。那么&#xff0c;本篇文章将为您介绍如何安装和打开Python…

为什么需要 git 和 相关的小知识

为什么需要git和相关的小知识 先看一个实际需求&#xff0c;引出Git 问题: 公司五一活动计划 ● 先说一个最简单的情况&#xff0c;比如你做了公司五一活动计划书(如图) 解决方案: 版本管理工具(Git) 一句话: Git 是目前最流行的分布式版本控制软件 Git 是怎么来的? Git…

读数据压缩入门笔记04_统计编码

1. 统计编码&#xff08;statistical encoders&#xff09;的算法 1.1. 每种编码方法都对每个符号的概率分布做了不同的假定 1.2. 需要处理的数据集中符号的概率分布与现有的VLC方法都不能完全匹配 1.3. 统计编码算法通过数据集中符号出现的概率来进行编码使结果尽可能与熵接…

【音视频开发】FFmpeg转换与封装 I - MP4格式

1 FFmpeg转换与封装 1.1 MP4格式转换 1.1.1 MP4格式标准 1 FFmpeg转换与封装 FFmpeg支持的媒体封装格式具有多样性与全面性&#xff0c;与此&#xff0c;我们还可以使用FFmpeg来对媒体格式进行转换与封装。 1.1 MP4格式转换 在互联网常见的格式中&#xff0c;跨平台最好的应…

【Vue】二:Vue核心处理---vue的其它指令和自定义指令

文章目录 1.vue的其它指令1.1v-text 和 v-html1.2 v-cloak1.3 v-once1.4 v-pre 2. 自定义指令2.1 函数式2.2 对象式2.3.定义全局的指令 1.vue的其它指令 1.1v-text 和 v-html v-text&#xff1a;当做文件解析。 v-html&#xff1a;当做 HTML 代码解析。 1.2 v-cloak v-cloa…

chatgpt赋能python:Python字典通过键找值:什么是Python字典?

Python字典通过键找值&#xff1a;什么是Python字典&#xff1f; Python字典是一种非常有用的数据类型&#xff0c;可以通过键值对方式存储和访问数据。它是Python的一种内置数据类型&#xff0c;可以在编程中非常方便地存储和操作数据。 Python字典可以存储任意类型的数据&a…

图书馆智能照明控制系统设计介绍 安科瑞 许敏

摘 要&#xff1a;简要介绍了一种新型的智能照明控制系统&#xff0c;论述了其系统特点和系统组成&#xff1b;结合该系统对某高校图书馆进行了照明节能设计。工程应用表明&#xff0c;该系统在公 共建筑节能中效果显著。 关键词&#xff1a;高校&#xff1b;图书馆&#xff…