当前位置: 首页 > news >正文

wordpress构建企业网站头条新闻最新消息

wordpress构建企业网站,头条新闻最新消息,从手机上可以做网站吗,电子商务网站 整站 psd文章目录 迪杰特斯拉算法主要特点基本思想算法步骤示例 实现迪杰斯特拉算法基本步骤算法思路 总结 迪杰特斯拉算法 迪杰特斯拉算法是由荷兰计算机科学家艾兹赫尔迪杰特斯拉(Edsger W. Dijkstra)在1956年提出的,用于解决单源最短路径问题的经…

文章目录

  • 迪杰特斯拉算法
    • 主要特点
    • 基本思想
    • 算法步骤
    • 示例
  • 实现迪杰斯特拉算法
    • 基本步骤
    • 算法思路
  • 总结

在这里插入图片描述

迪杰特斯拉算法

迪杰特斯拉算法是由荷兰计算机科学家艾兹赫尔·迪杰特斯拉(Edsger W. Dijkstra)在1956年提出的,用于解决单源最短路径问题的经典算法。该算法的目标是从一个起始顶点找到到图中其他顶点的最短路径。

主要特点

  • 适用于带权图,其中权重为非负数。(为什么只适用于非负数,因为迪杰斯特拉的思想是贪心测量,当有负权引入的时候,贪心策略将不再适用)
  • 解决从单个源点到其他所有顶点的最短路径问题。
  • 时间复杂度:当使用优先队列(例如堆)时,复杂度为 O ( E log ⁡ V ) O(E \log V) O(ElogV),其中 V V V 为顶点数量, E E E 为边的数量。

基本思想

Dijkstra算法通过不断探索距离最近的顶点,逐步扩展其最短路径的已知范围,直到找到从源点到所有其他顶点的最短路径。该算法基于贪心策略:每一步选择尚未处理的、距离源点最近的顶点进行扩展。

算法步骤

  1. 初始化

    • 将起始顶点的距离设为0,其余所有顶点的距离设为∞(表示不可达)。
    • 使用一个优先队列(或最小堆)来存储顶点及其当前的最短距离。
  2. 取距离源点最近的顶点,并标记为已处理。

  3. 对于该顶点的每个邻接顶点,更新其最短距离(如果通过当前顶点可以获得更短的路径,则更新距离)。

  4. 重复步骤2和3,直到所有顶点都被处理过,或优先队列为空。

示例

在这里插入图片描述

实现迪杰斯特拉算法

基本步骤

首先假设我们有如下的一个图:
在这里插入图片描述
灰色的点代表起点,我们需要从起点开始算每个点到起点的最短路径。
第一步按照迪杰斯特拉的表述应该将起点到起点的最短路径初始化为0,起点到另外其他点的距离初始化为正无穷。
在这里插入图片描述
这里我们更新完s点之后,应该更新和s点相连的点的最短路径了,由于之前s到t点和到y点的最短路径是正无穷,由于st和sy都小于两个最短路径,所以更新两个最短路径。
在这里插入图片描述
根据贪心策略,更新出来的两个最短路径,sy更小,所以我们应该更新y相连的路径。
在这里插入图片描述
所以接下来我们应该更新y连接的点的最短路径。
在这里插入图片描述
由于原本s到t的最短路径是10,但是现在的最短路径更新了之后是8,所以更新结果,由于之前s到x的最短路径是正无穷,所以现在将最短路径更新为14,s到z 也是相同的,因为之前的最短路径是正无穷,所以现在将最短路径更新为7.
在这三条最短路径中选择最短的那条:
在这里插入图片描述
这里就应该以z为新的起点
在这里插入图片描述
更新z连接的顶点,z一共有两条边,一条是zs,一条是zx,由于s到s是最近的0,所以这里不需要更新,由于之前s到x的距离是14,所以这里更新s到x的距离。
接下来再从剩下的边中,选择最小的路径。
在这里插入图片描述
从t点开始只有一条路径,所以这里t到x,tx是1,由于之前的st的最短路径是8,所以此时的最短路径是9,9<13所以这里应该更新最短路径为9
在这里插入图片描述
这里最短路径算是更新完了。

算法思路

由于这里我们涉及到最短路径,所以应该开辟一个dist数组,我们来想一想一个dist数组是否能解决问题,很显然是不能的,我们还需要一个数组,记录当前最短路径的前一个顶点的下标,在遍历的时候我们可以索引每一个顶点了。
代码展示:

void Dijkstra(const V& src, vector<W>& dist, vector<int>& pPath)
{//获取起点的下标size_t srci = GetVertexIndex(src);//确定节点的数量size_t n = _vertexs.size();dist.resize(n, MAX_W);pPath.resize(n, MAX_W);//自己到自己的距离是0dist[srci] = 0;//自己的前一个是自己pPath[srci] = srci;//已经确定最短路径的顶点的集合vector<bool> S(n, false);for(size_t j=0;j<n;j++){//选择最短路径顶点且不在s中更新其他路径int u = 0;     //最小的那个点W min = MAX_W; //最小权值for (size_t i = 0;i < n;i++){if (S[i] == false && dist[i] < min){//选出最小的点u = i;//更新最小权值min = dist[i];}}//u被选出来S[u] = true;//松弛更新u连接出去的顶点v    srci->u   u->vfor (size_t v = 0;v < n;v++){//确定u连接出去的所有边if (S[v] == false && _matrix[u][v] != MAX_W && (dist[u] + _matrix[u][v]) < dist[v]){dist[v] = dist[u] + _matrix[u][v];//将v的父亲更新为upPath[v] = u;}}}
}

打印路径节点和最短路径:

//打印最短路径
void PrinrtShotPath(const V& src, vector<W>& dist, vector<int>& pPath)
{//获取起点的下标size_t srci = GetVertexIndex(src);//确定节点的数量size_t n = _vertexs.size();for (size_t i = 0;i < n;i++){if (i != srci){// 先找出i顶点的路径vector<int> path;size_t parenti = i;//先将自己存进去(自己不是原点先push进去)while (parenti != srci){path.push_back(parenti);parenti = pPath[parenti];}path.push_back(srci);//将路径逆置reverse(path.begin(), path.end());//打印出路径for (auto e : path){cout << _vertexs[e] << "->";}//打印最短路径cout << dist[i];cout << endl;}}
}

因为根据最后一个节点去推上一个节点,推完之后数组中的节点会是一个反着的路径,所以在打印的时候,应该先把数组逆置,逆置之后再进行打印。

总结

在本文中,我们深入探讨了迪杰斯特拉算法的原理与应用。作为一种经典的最短路径算法,迪杰斯特拉算法通过优先队列有效地解决了从单一源点到其他所有节点的最短路径问题。我们分析了其时间复杂度和空间复杂度,了解了在不同图形结构下的性能表现。

通过示例和实现,我们不仅掌握了算法的基本步骤,还体验了其在实际应用中的重要性。无论是在交通导航、网络路由还是各种优化问题中,迪杰斯特拉算法都发挥着不可或缺的作用。

希望本文能够帮助你更好地理解迪杰斯特拉算法,并为你在图论和算法领域的进一步学习打下坚实的基础。如果你有任何疑问或想法,欢迎在评论区与我交流!

http://www.khdw.cn/news/60792.html

相关文章:

  • 开展我国电子网站建设百度竞价什么意思
  • 教育培训机构微网站模板关键词调价工具哪个好
  • 鲜花网站开发毕业设计网上如何推广自己的产品
  • 自己做网站卖货多少钱重庆seo技术教程
  • 招人在哪个网站比较好找跨境电商平台排行榜前十名
  • 做网站看什么书百度搜索引擎
  • 给前端做网站的图片叫什么广州seo网络优化公司
  • 武汉手机网站建设如何如何在百度发布信息
  • 怎么做网站变更什么是百度竞价排名服务
  • 祥云网站推广网络营销的营销理念
  • 沧州市网站建设谷歌seo和百度区别
  • 做购物网站是怎么链接银行网站优化排名软件推广
  • 视频网站砸钱做生态手机百度搜索引擎
  • 重庆建设集团网站首页谷歌搜索引擎免费入口2022
  • 国外域名查询seo学校培训
  • icp备案网站负责人网站制作哪家公司好
  • 用哪个网站做相册视频文件近期新闻事件
  • 创建一个网站需要怎么做百度下载安装2021最新版
  • 舟山网站建设最近最火的关键词
  • h5素材做多的网站东莞网站seo公司哪家大
  • 帝国cms小说网站模板下载地址俄罗斯搜索引擎yandex
  • 电子商务网站设计流程嘉兴seo报价
  • 17网站一起做网店潮汕依依长沙官网网站推广优化
  • wordpress瘦身长沙seo研究中心
  • 福田补贴每人9000元网站优化排名提升
  • 注册小规模公司需要什么资料排名轻松seo 网站
  • 公司微信网站建设方案搜狗推广登录平台官网
  • 做公司网站都需要什么资料网站优化排名金苹果下拉
  • 站长工具seo下载广东疫情最新消息
  • 市桥网站建设seo排名怎么做