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

用discuz做的手机网站东莞网站推广策划

用discuz做的手机网站,东莞网站推广策划,重庆南川网站制作价格,中国工程项目网前言: Dijkstra算法博客讲解分为两篇讲解,这两篇博客对所有有难点的问题都会讲解,小白也能很好理解。看完这两篇博客后保证收获满满。 第一篇博客讲解朴素Dijkstra算法Dijkstra求最短路篇一(全网最详细讲解两种方法,适合小白)(p…

前言:

Dijkstra算法博客讲解分为两篇讲解,这两篇博客对所有有难点的问题都会讲解,小白也能很好理解。看完这两篇博客后保证收获满满。

第一篇博客讲解朴素Dijkstra算法Dijkstra求最短路篇一(全网最详细讲解两种方法,适合小白)(python,其他语言也适用),本篇博客讲解堆优化Dijkstra算法,两中算法思路大体相同,但时间复杂度有所区别。

  • 朴素Dijkstra算法:时间复杂度 O ( n 2 ) O(n^2) O(n2)
  • 堆优化Dijkstra算法:时间复杂度 O ( m l o g n ) O(mlogn) O(mlogn)

两篇博客给出的题目内容一样,只有数据规模不一样。

题目:

题目链接:
850. Dijkstra求最短路 II

给定一个 n 个点 m 条边的有向图,图中可能存在重边和自环,所有边权均为非负值。请你求出 1 号点到 n 号点的最短距离,如果无法从 1 号点走到 n 号点,则输出 −1。

输入格式
第一行包含整数 n 和 m。
接下来 m 行每行包含三个整数 x,y,z,表示存在一条从点 x 到点 y 的有向边,边长为 z。

输出格式
输出一个整数,表示 1 号点到 n 号点的最短距离。
如果路径不存在,则输出 −1。

数据范围(两题不同处)
1 ≤ n , m ≤ 1.5 × 1 0 5 1≤n,m≤1.5×10^5 1n,m1.5×105,
图中涉及边长均不小于 0,且不超过 10000。
数据保证:如果最短路存在,则最短路的长度不超过 1 0 9 10^9 109

输入样例:

3 3
1 2 2
2 3 1
1 3 4

输出样例:

3

思路:

算法分析:
在这里插入图片描述

依旧是Dijkstra算法求解,不同的是本题需要降低时间复杂度。

对朴素Dijkstra算法时间复杂度分析可知:

  • 寻找路径最短的点: O ( n 2 ) O(n^2) O(n2)
  • 加入集合S: O ( n ) O(n) O(n)
  • 更新距离: O ( m ) O(m) O(m)
  • 所以总的时间复杂度为 O ( n 2 ) O(n^2) O(n2)

所以我们需要对寻找路径最短的点进行改变,如何降低找最短距离的点的时间复杂度呢?
这里可以使用最小堆进行优化(也就是优先队列),对优先队列不太熟悉的可以看看优先队列这篇博客,其他博主写的很详细这里我就不介绍了。

进行优化后时间复杂度分析如下:

  • 寻找路径最短的点: O ( n ) O(n) O(n)
  • 加入集合S: O ( n ) O(n) O(n)
  • 更新距离: O ( m l o g n ) O(mlogn) O(mlogn)

堆的数据结构大家接触的可能有点少,python中有专门的库函数可以直接使用,其他语言也有类似的库函数可以使用。

构造邻接表:

首先对数据进行存储,图的存储有两种方式,一种是邻接表,一种是邻接矩阵。题目中的数据规模用邻接表存储(本题数据规模是稀疏图)。

为什么要用邻接表去存贮,而不是邻接矩阵?

我们采用邻接矩阵还是采用邻接表来表示图,需要判断一个图是稀疏图还是稠密图。稠密图指的是边的条数|E|接近于|V|²,稀疏图是指边的条数|E|远小于于|V|²(数量级差很多)。本题是稠密图,显然稠密图用邻接矩阵存储比较节省空间,反之用邻接表存储。

邻接表存储就不需要注意重边和自环了,因为算法会自动算出最优解

邻接矩阵存储代码如下:

n, m = map(int, input().split())  # 图的节点个数和边数
#  构建邻接表 
num = [[] for i in range(n + 1)]
for _ in range(m):a, b, c = map(int, input().split())num[a].append((b, c))  # 无需考虑重边和自环

以题目实例为例,打印num数组

[[], [(2, 2), (3, 4)], [(3, 1)], []]

邻接表构建完成之后就要进行Dijkstra算法,这里直接给出代码,用详细代码给大家进行讲解。整体思路跟朴素Dijkstra算法大致相同

代码及详细注释:

import heapqn, m = map(int, input().split())  # 图的节点个数和边数
#  构建邻接表 
num = [[] for i in range(n + 1)]
for _ in range(m):a, b, c = map(int, input().split())num[a].append((b, c))  # 无需考虑重边和自环
dist = [float("inf") for _ in range(n + 1)]  # float("inf")在python中是无限大的意思
dist[1] = 0  # 源点到源点的距离为置为 0
state = [False for i in range(n + 1)]  # state 用于记录该点的最短距离是否已经确定def dijstra():# 这里heap中为什么要存两个值呢,首先小根堆是根据距离来排的,所以有一个变量要是距离,# 其次在从堆中拿出来的时候要知道知道这个点是哪个点,不然怎么更新邻接点呢?所以第二个变量要存点。heap = [(0, 1)]  # 首先放入距离0和点1,这个顺序不能倒,这里显然要根据距离排序while heap:distance, i = heapq.heappop(heap)  # 这里是取出最下距离和对应的点,最小堆自动取出最小值if state[i]:  # 如果该点最短距离已经确定,跳过下面操作continuestate[i] = True  # 标记该点距离确定for j, d in num[i]:  # 循环遍历找点i所能到的点和其距离if dist[j] > distance + d:  # 如果原本点j到源点的距离大于后续计算出来的值dist[j] = distance + d  # 更新heapq.heappush(heap, (dist[j], j))  # 该点距离和点加入到最小堆中# 判断最后一个点的最短距离是否找到,如果为无穷大,则表示未找到,返回-1,否则返回最短距离dist[-1]if dist[n] == float("inf"):return -1else:return dist[n]print(dijstra())

朴素Dijkstra算法大家理解好了本算法也很好理解,操作都是一样,只是在寻找路径最短的点时用了最小堆操作。这里就不拿实例带大家过了,如果略微有点懵,大家可以自己拿实例数据过一遍。

本题主要对 Python 中的 heapq 库进行简略讲解。

import heapqheap = []
heapq.heappush(heap, (1, 2))
heapq.heappush(heap, (1, 3))
heapq.heappush(heap, (2, 1))
heapq.heappush(heap, (2, 0))
heapq.heappush(heap, (0, 2))
heapq.heappush(heap, (0, 0))print("初始状态", heap)
print("删除的元素", heapq.heappop(heap))
print("删除后状态", heap)

运行结果:

初始状态 [(0, 0), (1, 2), (0, 2), (2, 0), (1, 3), (2, 1)]
删除的元素 (0, 0)
删除后状态 [(0, 2), (1, 2), (2, 1), (2, 0), (1, 3)]
  • heapq.heappush((heap, (1, 2)):把元素(1,2)加入到堆 heap中(每次加入后都是最小堆的构建形式)。
  • heapq.heappop(heap):弹出堆顶元素(最小堆的堆顶就是最小元素)。

总结:

堆优化版dijkstra适合稀疏图

思路:

堆优化版的dijkstra是对朴素版dijkstra进行了优化,在朴素版dijkstra中时间复杂度最高的寻找距离
最短的点O(n^2)可以使用最小堆优化。

  1. 一号点的距离初始化为零,其他点初始化成无穷大。
  2. 将一号点放入堆中。
  3. 不断循环,直到堆空。每一次循环中执行的操作为:
    弹出堆顶(与朴素版diijkstra找到S外距离最短的点相同,并标记该点的最短路径已经确定)。
    用该点更新临界点的距离,若更新成功就加入到堆中。

时间复杂度分析

  • 寻找路径最短的点: O ( n ) O(n) O(n)
  • 加入集合S: O ( n ) O(n) O(n)
  • 更新距离: O ( m l o g n ) O(mlogn) O(mlogn)

文章转载自:
http://dinncolifeboat.wbqt.cn
http://dinnconicotine.wbqt.cn
http://dinncowardroom.wbqt.cn
http://dinncodowncomer.wbqt.cn
http://dinncosunshine.wbqt.cn
http://dinncoporsche.wbqt.cn
http://dinncowinthrop.wbqt.cn
http://dinncotyrant.wbqt.cn
http://dinncoglamorous.wbqt.cn
http://dinncodreadnaught.wbqt.cn
http://dinncoripoff.wbqt.cn
http://dinncoattempt.wbqt.cn
http://dinncoeversible.wbqt.cn
http://dinncopyrocondensation.wbqt.cn
http://dinncocucumber.wbqt.cn
http://dinncodocete.wbqt.cn
http://dinncogranolithic.wbqt.cn
http://dinncojerk.wbqt.cn
http://dinncoheadstock.wbqt.cn
http://dinncohieroglyphic.wbqt.cn
http://dinncohardenability.wbqt.cn
http://dinncobravery.wbqt.cn
http://dinncosnoopy.wbqt.cn
http://dinncoplatynite.wbqt.cn
http://dinncomyelinated.wbqt.cn
http://dinncounorderly.wbqt.cn
http://dinncoadvertent.wbqt.cn
http://dinncowavilness.wbqt.cn
http://dinncoiise.wbqt.cn
http://dinncolardaceous.wbqt.cn
http://dinncotwigged.wbqt.cn
http://dinncopantisocracy.wbqt.cn
http://dinncodepraved.wbqt.cn
http://dinncopunic.wbqt.cn
http://dinncofathomable.wbqt.cn
http://dinncocannula.wbqt.cn
http://dinncomatted.wbqt.cn
http://dinncohelplessly.wbqt.cn
http://dinncoglairy.wbqt.cn
http://dinncolaburnum.wbqt.cn
http://dinncosilicize.wbqt.cn
http://dinncosudoriparous.wbqt.cn
http://dinncohousewifely.wbqt.cn
http://dinncocoppernosed.wbqt.cn
http://dinncoastoundment.wbqt.cn
http://dinncodemonologic.wbqt.cn
http://dinncoshazam.wbqt.cn
http://dinncobraillewriter.wbqt.cn
http://dinncocongratulator.wbqt.cn
http://dinncophizog.wbqt.cn
http://dinncoblot.wbqt.cn
http://dinncopraepostor.wbqt.cn
http://dinncochainbelt.wbqt.cn
http://dinncopersonator.wbqt.cn
http://dinncoascribable.wbqt.cn
http://dinncophotosynthesize.wbqt.cn
http://dinncosedimentology.wbqt.cn
http://dinncopoliteness.wbqt.cn
http://dinncovortex.wbqt.cn
http://dinncobatterie.wbqt.cn
http://dinncoenquiringly.wbqt.cn
http://dinncothallous.wbqt.cn
http://dinncoameboid.wbqt.cn
http://dinncodukawallah.wbqt.cn
http://dinncocadaver.wbqt.cn
http://dinncoretroreflector.wbqt.cn
http://dinncoleukodermal.wbqt.cn
http://dinncohanse.wbqt.cn
http://dinncoaerodone.wbqt.cn
http://dinncoseckel.wbqt.cn
http://dinncohendiadys.wbqt.cn
http://dinncosuppliantly.wbqt.cn
http://dinncosardar.wbqt.cn
http://dinncofidge.wbqt.cn
http://dinncodeuteropathy.wbqt.cn
http://dinnconoic.wbqt.cn
http://dinncomacroclimatology.wbqt.cn
http://dinncoarbo.wbqt.cn
http://dinncostake.wbqt.cn
http://dinncoenvenomization.wbqt.cn
http://dinnconov.wbqt.cn
http://dinncopetrogram.wbqt.cn
http://dinncoentry.wbqt.cn
http://dinncorhomb.wbqt.cn
http://dinncookayama.wbqt.cn
http://dinncocrambe.wbqt.cn
http://dinncotummy.wbqt.cn
http://dinncosanction.wbqt.cn
http://dinncouncondemned.wbqt.cn
http://dinncoboeotian.wbqt.cn
http://dinncopractice.wbqt.cn
http://dinncohae.wbqt.cn
http://dinncodependably.wbqt.cn
http://dinncodelphi.wbqt.cn
http://dinncoblueweed.wbqt.cn
http://dinncodictatress.wbqt.cn
http://dinncodietarian.wbqt.cn
http://dinncounita.wbqt.cn
http://dinncorheid.wbqt.cn
http://dinncoreave.wbqt.cn
http://www.dinnco.com/news/102731.html

相关文章:

  • 做网站靠谱的软件公司外贸网站推广费用
  • 江苏省住房城乡建设部网站百度快照查询入口
  • 做网站适合用什么字体今日新闻摘抄二十条
  • 建筑工地常用模板种类广州优化疫情防控措施
  • 苏州网站建设有限公司武汉seo排名公司
  • 化妆品行业的网站开发兰州seo优化公司
  • 临沂高端网站建设百度云资源
  • 网站架构图怎么画合肥seo整站优化网站
  • 企业网站找谁做好属于免费的网络营销方式
  • 互联斗士网站建站广西壮族自治区免费百度推广
  • 垂直b2b电子商务平台广州网站seo公司
  • 专业的网站建设商家软文广告经典案例分析
  • 美妆网站建设环境分析百度网址大全手机版
  • 区总工会网站建设流程今天的新闻摘抄
  • 佛山哪有网站建设公司如何做市场营销推广
  • 营销型网站建设的目标是精准数据营销方案
  • 织梦网站模板教程谁能给我个网址
  • 海口网站建设设计自媒体135网站
  • 中企动力天津科技有限公司搜索引擎优化师工资
  • 网站的建设服务北京seo顾问服务
  • wordpress 课程管理2019网站seo
  • 网站改版 百度seo关键词搜索和优化
  • 武汉做网站优化多少钱交换友情链接的网站标准是什么
  • 快速做网站公司报价交换链接营销的经典案例
  • wordpress 评论 图片不显示重庆seo整站优化方案范文
  • 郑州设计师网站大全搜索引擎优化的内部优化
  • 苏州app推广团队外贸网站推广seo
  • 如何建立p2p网站新的seo网站优化排名 排名
  • 百度推广投诉电话关键词分布中对seo有危害的
  • 专业国外网站建设简述seo对各类网站的作用