贵州省住房和城乡建设部网站成都住建局官网站首页

news/2025/9/24 16:10:04/文章来源:
贵州省住房和城乡建设部网站,成都住建局官网站首页,商贸有限公司怎么样注册,无锡外贸网站建设目录 概念图遍历深度优先搜索 (DFS)DFS 适用场景DFS 优缺点 广度优先搜索 (BFS)BFS 适用场景BFS 优缺点 DFS BFS 异同点 图搜索Dijkstra算法A*算法Floyd算法Bellman-Ford算法SPFA算法 概念 图遍历和图搜索是解决图论问题时常用的两种基本操作。 图遍历是指从图中的某一个… 目录 概念图遍历深度优先搜索 (DFS)DFS 适用场景DFS 优缺点 广度优先搜索 (BFS)BFS 适用场景BFS 优缺点 DFS BFS 异同点 图搜索Dijkstra算法A*算法Floyd算法Bellman-Ford算法SPFA算法 概念 图遍历和图搜索是解决图论问题时常用的两种基本操作。 图遍历是指从图中的某一个节点出发访问图中所有的节点确保每个节点都被访问到且不会重复访问。图遍历有两种主要方式深度优先搜索DFS和广度优先搜索BFS图搜索是指在图中寻找特定目标的过程。搜索可能是无目标的即只是为了遍历整个图也可能是有目标的希望找到特定的节点或路径。最常用的有目标图搜索算法是Dijkstra算法用于找到单源最短路径和A*算法结合了BFS和启发式搜索用于找到最优路径。 图遍历 深度优先搜索 (DFS) 深度优先搜索(Depth First Search,DFS)是一种用于遍历或搜索树或图的算法。它从起始顶点开始沿着一条路径直到不能继续为止然后返回到最近的一个未访问过的节点继续相同的过程直到所有节点都被访问过。 function DFS(node):if node is not visited:mark node as visitedfor each neighbor of node:DFS(neighbor)DFS 适用场景 寻找路径DFS 在寻找路径方面非常强大可以用于解决迷宫问题、寻找图中两个节点之间的路径等。拓扑排序DFS 可以用于在有向图中进行拓扑排序例如在编译器优化、任务调度等领域中应用广泛。检测环路DFS 可以用于检测图中是否存在环路对于拓扑排序来说有向无环图 (DAG) 才有拓扑排序的结果。生成最小生成树DFS 可以用于生成最小生成树例如在 Prim 算法中。 DFS 优缺点 优点: 节省空间相比较于 BFSDFS 使用递归实现时不需要额外的数据结构来保存访问状态因此可能会更节省空间。发现深层次的节点DFS 会尽可能深地探索某一条分支因此在找到目标节点或解之前会一直沿着一条路径向下探索。 缺点: 可能陷入死循环如果图中包含循环且没有合适的终止条件DFS 可能会陷入无限循环。可能 找到的不是最短路径由于 DFS 是尽可能深地探索某一条分支所以找到的路径不一定是最短路径。 广度优先搜索 (BFS) 广度优先搜索(Breadth First Search,BFS)也是一种用于遍历或搜索树或图的算法。它从起始顶点开始首先访问所有与起始顶点相邻的节点然后逐层向下访问。 function BFS(start):create a queue Qenqueue start into Qmark start as visitedwhile Q is not empty:current dequeue from Qfor each neighbor of current:if neighbor is not visited:mark neighbor as visitedenqueue neighbor into QBFS 适用场景 寻找最短路径BFS 可以用于寻找图中两个节点之间的最短路径因为它会逐层扩展所以找到的路径一定是最短的。最小生成树 (Prim 算法)BFS 也可以用于 Prim 算法中生成最小生成树的过程。 BFS 优缺点 优势: 找到最短路径BFS 适用于需要找到最短路径的情况因为它会优先访问距离起点更近的节点。避免陷入死循环BFS 通常不容易陷入死循环因为它会逐层扩展不会无限制地向下探索。 缺点: 可能占用更多内存BFS 通常需要一个队列来保存待访问节点可能会占用比DFS更多的内存。不一定能找到最深层次的节点BFS 在发现目标节点时不一定会沿着一条深度较大的路径找到它。 DFS BFS 异同点 相同点: DFS 和 BFS 都是图遍历算法用于访问图中的所有节点确保每个节点都被访问到。 不同点: 搜索方式: - DFS尽可能深地探索某一条分支直到不能继续为止然后回溯。 - BFS先访问与起始节点直接相邻的所有节点然后逐层向下访问。 适用场景: - DFS 适用于寻找路径、拓扑排序、检测环路等问题。 - BFS 适用于寻找最短路径、最小生成树等问题。 找到的路径: - DFS 找到的路径不一定是最短路径。 - BFS 一定能找到最短路径。 空间复杂度: - DFS 可能会节省一些空间特别是使用递归实现时。 - BFS 通常会占用更多的内存因为需要一个队列来保存待访问节点。 总的来说选择使用DFS还是BFS取决于具体的问题和需求。如果需要寻找最短路径或最优解通常选择BFS。如果问题需要深度搜索或者对内存消耗有限制可能会选择DFS。 图搜索 图搜索根据目标可以分为目标节点搜索和目标路径搜索。 Dijkstra算法 给定一个带权有向图 G(V,E) 其中每条边的权是一个非负实数。另外还给定 V 中的一个顶点称为源。现在我们要计算从源到所有其他各顶点的最短路径长度。这里的长度是指路上各边权之和。这个问题通常称为单源最短路径问题如下图所示。 算法思想将图G中所有的顶点V分成两个顶点集合S和T。以v为源点已经确定了最短路径的终点并入S集合中S初始时只含顶点v,T则是尚未确定到源点v最短路径的顶点集合。然后每次从T集合中选择S集合点中到T路径最短的那个点并加入到集合S中并把这个点从集合T删除。直到T集合为空为止。 function Dijkstra(Graph, source):create empty set Screate a set Q containing all nodescreate a map distance and set distance[source] 0while Q is not empty:u node in Q with smallest distance[u]remove u from Qadd u to Sfor each neighbor v of u:if distance[u] weight(u, v) distance[v]:distance[v] distance[u] weight(u, v)return distance算法复杂度 设带权有向图的边数为m顶点数为n。 用数组存储顶点方式实现复杂度为 O ( n 2 ) O(n^2) O(n2)用邻接表存储 二叉堆实现复杂度为 O ( ( m n ) l o g n ) O((mn)logn) O((mn)logn)用邻接表存储 斐波那契堆实现复杂度为 O ( m n l o g n ) O(mnlogn) O(mnlogn) A*算法 A*算法结合了启发式搜索和Dijkstra算法的思想用于在加权图中找到起点到目标节点的最短路径。它使用一个启发式函数来估计从当前节点到目标节点的距离并根据这个估计值选择下一个要扩展的节点。 适用于带有启发式函数的加权图找到起点到目标节点的最短路径。 function AStar(Graph, source, target):create empty set openSet and add source to itcreate empty set closedSetcreate a map gScore and set gScore[source] 0create a map fScore and set fScore[source] heuristic(source, target)while openSet is not empty:current node in openSet with lowest fScoreif current target:return reconstructPath(cameFrom, current)remove current from openSetadd current to closedSetfor each neighbor of current:if neighbor is in closedSet:continuetentative_gScore gScore[current] distance(current, neighbor)if neighbor is not in openSet or tentative_gScore gScore[neighbor]:cameFrom[neighbor] currentgScore[neighbor] tentative_gScorefScore[neighbor] gScore[neighbor] heuristic(neighbor, target)if neighbor is not in openSet:add neighbor to openSetreturn failureFloyd算法 Floyd算法用于解决所有节点对之间的最短路径问题。它采用动态规划的思想通过中间节点的遍历来更新任意两个节点之间的最短路径。 通过Floyd计算图G(V,E)中各个顶点的最短路径时需要引入一个矩阵S矩阵S中的元素a[i][j]表示顶点i(第i个顶点)到顶点j(第j个顶点)的距离。 假设图G中顶点个数为N则需要对矩阵S进行N次更新。初始时矩阵S中顶点a[i][j]的距离为顶点 i 到顶点 j 的权值如果 i 和 j 不相邻则a[i][j]∞。 接下来开始对矩阵 S 进行N次更新。 第1次更新时如果a[i][j]的距离 “a[i][0]a[0][j]”(a[i][0]a[0][j]表示 i 与 j 之间经过第1个顶点的距离)则更新a[i][j]为a[i][0]a[0][j]“。 同理第k次更新时如果a[i][j]的距离” “a[i][k]a[k][j]”则更新a[i][j]为a[i][k]a[k][j]。更新N次之后操作完成 function FloydWarshall(Graph):let dist be a matrix of size VxV, initialized with infinityfor each edge (u, v) in Graph:dist[u][v] weight(u, v)for k from 1 to V:for i from 1 to V:for j from 1 to V:if dist[i][k] dist[k][j] dist[i][j]:dist[i][j] dist[i][k] dist[k][j]return distBellman-Ford算法 Bellman-Ford算法用于在带有负权边的图中找到单源最短路径。它通过对边进行松弛操作来逐步优化到达每个节点的最短距离。解题思路就是假设有一条边 {begin,end,value} 如果 dis[begin] value dis[end] 我们可以更新 dis[end] 的值为 dis[begin] value Bellman-Ford不能计算有负权回路的图因为在负权回路中如果一直转圈的话值就会一直变小。 function BellmanFord(Graph, source):create a list of size V called distance and set distance[source] 0for i from 1 to V-1:for each edge (u, v) in Graph:if distance[u] weight(u, v) distance[v]:distance[v] distance[u] weight(u, v)for each edge (u, v) in Graph:if distance[u] weight(u, v) distance[v]:return Graph contains a negative-weight cyclereturn distanceSPFA算法 SPFA算法也用于在带有负权边的图中找到单源最短路径。它采用了队列来优化Bellman-Ford算法通过动态选择要松弛的节点减少了不必要的松弛操作提高了算法的效率。 function SPFA(Graph, source):create a queue Qenqueue source into Qcreate a set visited and add source to itcreate a map distance and set distance[source] 0while Q is not empty:current dequeue from Qremove current from visitedfor each neighbor of current:if distance[current] weight(current, neighbor) distance[neighbor]:distance[neighbor] distance[current] weight(current, neighbor)if neighbor is not in visited:enqueue neighbor into Qadd neighbor to visitedreturn distance

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

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

相关文章

上海建筑 公司网站wordpress 伪静态

科技巨变,未来已来,八大技术趋势引领数字化时代。信息技术的迅猛发展,深刻改变了我们的生活、工作和生产方式。人工智能、物联网、云计算、大数据、虚拟现实、增强现实、区块链、量子计算等新兴技术在各行各业得到广泛应用,为各个领域带来了新的活力和变革。 为了更好地了解…

杭州网站前端建设seo全称是什么意思

目录 从上到下,你所看到的目录如下 /bin /bin 目录是包含一些二进制文件的目录,即可以运行的一些应用程序。 你会在这个目录中找到上面提到的 ls 程序,以及用于新建和删除文件和目录、移动它们基本工具。还有其它一些程序,等等。…

企业微信客服API模式接入第三方客服系统,对接大模型AI智能体

我们系统可以接入企业微信客服的API gofly.v1kf.com 联系vx:llike620企业微信客服是企业微信里面的一项功能,它整合了微信生态的优势,解决的是与临时访客进行实时沟通的需求 核心功能 多渠道接待:支持在微信内(公…

react使用ctx和reducer代替redux

入门版本 创建一个store,包含ctx、reduce、dispatch+action import { createContext, useContext } from react;// 定义ctx export const defaultValue = {count: 0, }; export const AppCtx = createContext(null);e…

KM 乱记

狠狠学习了先来看一个问题:给定 \(w_{1\sim n, 1\sim n}\),现在要求满足 \(\forall i, j\in [1, n], a_i + b_j\ge w_{i, j}\) 且 \(\sum a_i + \sum b_j\) 最小的 \(a_{1\sim n}, b_{1\sim n}\)。如果会线性规划对偶…

深入解析:B树与B+树的原理区别应用

深入解析:B树与B+树的原理&区别&应用pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", &q…

linux中的服务监控,停用自动重启

#! /bin/shexport JAVA_HOME=/usr/lib/jvm/TencentKona-8.0.9-322/jre/bin/javaexport CLASSPATH=.:CLASSPATH:$JAVA_HOME/lib/export PATH=$PATH:$JAVA_HOME/bin# 进程名称proc_name=blog-1.0.0.jar#启动命令boot_cmd…

元氏县城有做网站广告的吗wordpress防爆破插件

想要在本地运行大型语言模型吗? Ollama框架提供了这样的机会。 这个框架是专为在Docker容器中部署LLM而设计的,简化了部署和管理流程。 安装Ollama后,你只需执行一条命令,即可在本地运行开源大型语言模型。 它将模型权重、配置…

RHEL7/CentOS7 install NVIDIA drivers and CUDA

# 1. 查看系统是否可以识别到 NVIDIA 显卡 lspci |grep -i nvidia # 2. 安装内核文件确保和内核版本一致 yum install kernel-devel kernel-headers yum install kernel-devel-$(uname -r) kernel-headers-$(uname -r)…

浅谈 Burnside 和 Polya 的证明

前言 请怀着批判性思维阅读,如果有任何问题欢迎前来踩爆我。 群 定义 如果一个集合 \(S\ne \varnothing\),且在 \(S\) 上的运算 \(\cdot\) 满足一下要求,得到我们称 \((S,\cdot)\) 为一个群。封闭性:\(\forall a,b…

算法学习笔记:支配对

引入 支配对通常用来解决一类点对贡献问题。具体来说,任意两个对象构成一个点对,我们做一定范围内的信息查询时,就相当于查询范围内的点对的信息并。但是这样点对的数量是 \(\mathcal{O}(n^2)\) 量级的,无法接受。…

在Windows10 Edge浏览器里安装DeepSider大模型插件来免费运用gpt-4o、NanoBanana等AI大模型

在Windows10 Edge浏览器里安装DeepSider大模型插件来免费运用gpt-4o、NanoBanana等AI大模型pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !import…

西电PCB设计指南第5章学习笔记

西电PCB设计指南第5章学习笔记 五、常见类型PCB设计敏感电路常见的敏感电路 音频电子系统前级、精密仪器、光电探测转换电路、传感器特点: 容易受干扰的电路受干扰的原因: 空间电场耦合、磁场耦合、电路板绝缘不良的…

网站建设及管理使用情况汇报去菲律宾做it网站开发

背景 如果想在运行过程中想基于nacos数据变更做一些业务,比如想在运行过程中变更日志的级别,那么我们可以扩展nacos的监听。 步骤 定义一个配置类,用NacosConfigListener标记需要触发的方法,并用dataId标记需要监听的文件。如下…

ImageMagick - 关于图片压缩,通过dk整理的一些可用指令 - window64

测试可以通过命令行批量处理指定类型图片,少量图片的话直接搜“图压”就行了,一般图片还是可以的 下载链接:https://imagemagick.org/script/download.php window系统往下滑找到这个下载 指令: 进入对应文件夹下压…

【杂记】原 hack

键盘声碎打工夜,洛谷光寒算法天。 一题路径成疑冢,千军码农陷迷烟。 小蝙振翅破虚妄,数据如雷震前贤。 莫笑代码无证处,敢教日月换新篇!(抚尺一拍)列位看官,今日且听我道一段「洛谷奇谭芙卡米破阵记」!有诗为…

全新升级!EasyDSS会议管理3大核心功能,让远程协作更高效

在数字化浪潮中,高效便捷的视频会议系统已成为企业刚需。随着远程办公和跨地域协作的普及,企业对视频会议平台的要求也越来越高。 新版EasyDSS作为强大的流媒体服务器解决方案,重磅升级会议管理功能,为企业带来全场…

黄金、原油期货数据API对接文档

本文档提供StockTV期货市场数据API的完整对接指南,包含全球主要期货交易所的实时行情、历史数据、合约信息等核心功能一、接口概览 1.1 支持期货交易所交易所代码 交易所名称 主要期货品种CME 芝加哥商品交易所 股指、…

电商门户网站建设方案餐饮品牌设计哪个公司最好

对于做实体生意的中小商户来说,仓库管理工作是重中之重的,仓库管理的好坏,直接影响着门店销售和财务状况。 但对于很多中小商户来说,没有足够的人力和精力去高效地做好仓库管理工作,而借助仓库管理软件或进销存软件来…

番禺网站建设怎样利用帝国软件如何做网站

Java后端开发技能: JVM:内存模型、类加载机制、双亲委派、垃圾回收算法、垃圾回收器、空间分配担保策略、可达性分析、强软弱虚引用、GC的过程、三色标记、跨代引用、内存泄漏与溢出多线程:集合、Synchronized、ThreadLocal、AQS、线程池JVM…