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

深圳 网站开发公司电话3seo

深圳 网站开发公司电话,3seo,做美食网站需求分析报告,官网在线客服文章目录 题目743.网络延迟时间3341.到达最后一个房间的最少时间I 求解最短路径的问题,分为使用BFS和使用迪斯科特拉算法,这两种算法求解的范围是有区别的 BFS适合求解,边的权值都是1的图中的最短路径的问题 图论 之 BFS迪斯科特拉算法适合求…

文章目录

  • 题目
    • 743.网络延迟时间
    • 3341.到达最后一个房间的最少时间I

求解最短路径的问题,分为使用BFS和使用迪斯科特拉算法,这两种算法求解的范围是有区别的

  • BFS适合求解,边的权值都是1的图中的最短路径的问题
    图论 之 BFS
  • 迪斯科特拉算法适合求解边的权值不一样的图,其中,该算法有两种实现方式,分别适用于两种情况的图
    • 稠密图,使用朴素的Dijkstra算法,其中稠密图的定义是,边的数量级与 o ( n 2 ) o(n^2) o(n2)相当的图,朴素的Dijkstra算法的时间复杂度是 o ( n 2 ) o(n^2) o(n2),其中n是图的节点的数量
    • 稀疏图,使用堆优化的Dijkstra算法,算法的时间复杂度是 o ( m l o g m ) o(mlogm) o(mlogm)其中,m是边的数量,如果输入的稠密图,那么使用堆优化的Dijkstra算法的时间复杂度是 o ( n 2 l o g n ) o(n^2logn) o(n2logn)

朴素的Dijkstras算法的模版

# 存储边的情况
edge = [[float('inf')]*n for n in range(n)]
# dis[i]表示 单源点k到其余节点i的最短的路径
dis = [float('inf')]*n 
dis[k] = 0
# 这个done[k] = True不用设置,后面会依据这个,把起点弹出
done = [False]*n # done[i]标记是否找到 到达节点i的最短的路径while True:x = -1for i,ok in enumerate(done):# 找到在还没确定最小距离的节点,该节点到源点的距离最小if not ok and (x < 0 or dis[i] < dis[x]):x = i# 判断是否都找到了if x < 0:# 这里就已经求解完成了,后续你可以返回最大值?return dis# 有节点无法到达if dis[x] == float('inf'):return -1# 设置标志位,表示节点x的最小距离已经确定done[x] = True# 遍历当前节点的所有的邻居,更新答案for j,d in enumerate(edge[x]):dis[j] = min(dis[j],dis[j]+d)

使用堆优化的Dijkstra算法


import heapqclass Solution:def networkDelayTime(self, times: List[List[int]], n: int, k: int) -> int:# 使用堆优化的Dijkstra算法# 使用堆优化的话,适用于稀疏图,所以边的记录,我们使用邻接表edge = [[] for _ in range(n)]for x,y,z in times:edge[x-1].append((y-1,z))dis = [float('inf')]*n dis[k-1] = 0# 入堆的元素是 (dis[x],x),第一个元素是距离,这也是设置的优先级h = [(0,k-1)]while h:# 出堆dx,x = heapq.heappop(h)# 如果当前的距离大于最小距离,直接过if dx > dis[x]:# 说明之前出过堆continue# 访问邻居,不一定是这个邻接表或者邻接矩阵,二维表也可以for y,d in edge[x]:# 计算更新值,计算方式按照题目的意思new_dis = dx + d # 只有更优的值才能被加入进去if new_dis < dis[y]:dis[y] = new_disheapq.heappush(h,(new_dis,y))mx = max(dis)return mx if mx < float('inf') else -1

题目

743.网络延迟时间

743.网络延迟时间

在这里插入图片描述

在这里插入图片描述

思路分析:由于边的数量远远大于节点的数量,所以我们还是考虑使用稠密图下的朴素的Dijkstra算法,最后返回不是无穷的最大的路径即可

class Solution:def networkDelayTime(self, times: List[List[int]], n: int, k: int) -> int:# 区别于BFS求解的最短距离,这个距离的边的权值不一样# 使用朴素的迪斯科特拉算法# 邻接矩阵记录边的情况edge = [[float('inf')]*(n) for _ in range(n)]# 有向边for e in times:edge[e[0]-1][e[1]-1] = e[2]dis = [float('inf')]*n # 记录k到各个节点的最短距离ans = dis[k-1] = 0done = [False] * n # 记录节点的最短距离是否被确定while True:x = -1# 找到最短距离还没确定,并且节点k到它的距离是最短的节点for i,ok in enumerate(done):if not ok and (x<0 or dis[i] < dis[x]):x = i # 如果x<0,表示全部的节点已经全部都访问过了if x < 0 :return ans# 如果最短的节点的距离是无穷,说明不可达if dis[x] == float('inf'):return -1# 更新ans = dis[x]done[x] = Truefor y,d in enumerate(edge[x]):dis[y] = min(dis[y],dis[x]+d)

使用堆优化的解法

import heapqclass Solution:def networkDelayTime(self, times: List[List[int]], n: int, k: int) -> int:# 使用堆优化的Dijkstra算法# 使用堆优化的话,适用于稀疏图,所以边的记录,我们使用邻接表edge = [[] for _ in range(n)]for x,y,z in times:edge[x-1].append((y-1,z))dis = [float('inf')]*n dis[k-1] = 0# 入堆的元素是 (dis[x],x)h = [(0,k-1)]while h:dx,x = heapq.heappop(h)if dx > dis[x]:# 说明之前出过堆continuefor y,d in edge[x]:new_dis = dx + d if new_dis < dis[y]:dis[y] = new_disheapq.heappush(h,(new_dis,y))mx = max(dis)return mx if mx < float('inf') else -1

3341.到达最后一个房间的最少时间I

3341.到达最后一个房间的最少时间I

在这里插入图片描述

思路分析:开始的时候,我错误的以为题目中只能向右或者向下运动, 所以写了一个动态规划进行求解,实际上,这个思路是错误的,不过要是只能向下或者向右运动的话,动态规划也是一种很好的做法

# 动态规划的做法,竟然可以过700个测试用例
import heapq
class Solution:def minTimeToReach(self, moveTime: List[List[int]]) -> int:# 开始的时候从(0,0)出发,移动到相邻的房间,其实也只是向下或向右运动# 感觉可以用动态规划,dp[i][j]表示到达i,j所需的最少的时间# 递推公式,# dp[i][j] = min(max(dp[i-1][j],moveTime[i][j])+1,max(dp[i][j-1],moveTime[i][j])+1)n = len(moveTime)m = len(moveTime[0])dp = [[float('inf')]*(m+1) for _ in range(n+1)]dp[1][1] = 0for i in range(n):for j in range(m):if i == 0 and j == 0:continuedp[i+1][j+1] = min(max(dp[i][j+1],moveTime[i][j])+1,max(dp[i+1][j],moveTime[i][j])+1)for i in dp:print(i )return dp[n][m]

正确的思路:应该是使用Dijkstra算法,不过开始的时候,我有点纠结这个edge也就是边的矩阵如何转化为邻接矩阵或者邻接表,后面一想,还是我的固定思维阻碍了我,邻接矩阵和邻接表只是一个工具,帮助我们找到当前的节点的邻居,但是在现在的图中,你通过坐标的加减不就可以得到对应的邻居嘛!

  • 展示使用朴素Dijkstra算法做法
import heapq
class Solution:def minTimeToReach(self, moveTime: List[List[int]]) -> int:# 首先先使用 堆优化的Dijkstra进行解题# 图已经构建,就是moveTime# dis[i][j]表示(0,0)到(i,j)的最短的时间n,m = len(moveTime),len(moveTime[0])dis = [[float('inf')]*m for _ in range(n)]dis[0][0] = 0done = [[False]*m for _ in range(n)]while True:x,y = -1,-1# 开始遍历还没确定的点for i in range(n):for j in range(m):if not done[i][j] and ((x<0 and y <0) or dis[i][j] < dis[x][y]):x,y = i,jif x<0 and y <0:# 说明都找到了return dis[n-1][m-1]# 设置已经找到done[x][y] = True# 访问邻居for i,j in (x+1,y),(x-1,y),(x,y+1),(x,y-1):if 0<= i < n and 0<= j < m:dis[i][j] = min(max(dis[x][y],moveTime[i][j]) + 1,dis[i][j])
  • 展示使用堆优化的Dijkstra算法
import heapq
class Solution:def minTimeToReach(self, moveTime: List[List[int]]) -> int:# 首先先使用 堆优化的Dijkstra进行解题# 图已经构建,就是moveTime# dis[i][j]表示(0,0)到(i,j)的最短的时间n,m = len(moveTime),len(moveTime[0])dis = [[float('inf')]*m for _ in range(n)]dis[0][0] = 0h = [(0,0,0)]while True:d,x,y = heapq.heappop(h)if x == n-1 and y == m-1:return d # 已经更新过了if d > dis[x][y]:continue# 访问邻居:for i,j in (x+1,y),(x-1,y),(x,y+1),(x,y-1):if 0<= i <n and 0<= j < m:# 合法的坐标# 计算当前的距离,小于才入堆new_dis = max(d,moveTime[i][j])+1if dis[i][j]>new_dis:dis[i][j] = new_disheapq.heappush(h,(dis[i][j],i,j))

文章转载自:
http://misorder.c7510.cn
http://collarbone.c7510.cn
http://lender.c7510.cn
http://namable.c7510.cn
http://satiable.c7510.cn
http://delft.c7510.cn
http://chrysographer.c7510.cn
http://ndp.c7510.cn
http://pilose.c7510.cn
http://gravesian.c7510.cn
http://firebrick.c7510.cn
http://mediagenic.c7510.cn
http://mizzle.c7510.cn
http://sweatiness.c7510.cn
http://pinecone.c7510.cn
http://hermeneutics.c7510.cn
http://rushy.c7510.cn
http://inexperience.c7510.cn
http://yourselves.c7510.cn
http://tarantass.c7510.cn
http://begohm.c7510.cn
http://gemara.c7510.cn
http://cyclostomate.c7510.cn
http://handbag.c7510.cn
http://hoopskirt.c7510.cn
http://weatherman.c7510.cn
http://highflyer.c7510.cn
http://hemochromatosis.c7510.cn
http://blindage.c7510.cn
http://redbird.c7510.cn
http://whipstitch.c7510.cn
http://irruptive.c7510.cn
http://nineveh.c7510.cn
http://unmarried.c7510.cn
http://equilibrator.c7510.cn
http://remigration.c7510.cn
http://pregalactic.c7510.cn
http://abracadabra.c7510.cn
http://scutate.c7510.cn
http://emancipate.c7510.cn
http://vocalism.c7510.cn
http://sclerotin.c7510.cn
http://funnyman.c7510.cn
http://godparent.c7510.cn
http://revolvably.c7510.cn
http://mammilliform.c7510.cn
http://cortile.c7510.cn
http://apprise.c7510.cn
http://interleaver.c7510.cn
http://ovulary.c7510.cn
http://cataplasm.c7510.cn
http://agrotechny.c7510.cn
http://gyri.c7510.cn
http://misshapen.c7510.cn
http://oscine.c7510.cn
http://overprotection.c7510.cn
http://hecatonstylon.c7510.cn
http://confiscator.c7510.cn
http://nosewing.c7510.cn
http://blackleggery.c7510.cn
http://ballistocardiogram.c7510.cn
http://distrait.c7510.cn
http://hummocky.c7510.cn
http://medullary.c7510.cn
http://esu.c7510.cn
http://upcountry.c7510.cn
http://polyolefin.c7510.cn
http://frocking.c7510.cn
http://macropsia.c7510.cn
http://chronometer.c7510.cn
http://nabs.c7510.cn
http://lithotritist.c7510.cn
http://hematoblast.c7510.cn
http://tunicle.c7510.cn
http://mattock.c7510.cn
http://bilingual.c7510.cn
http://sixty.c7510.cn
http://practicality.c7510.cn
http://candidature.c7510.cn
http://anthrax.c7510.cn
http://powerman.c7510.cn
http://roading.c7510.cn
http://apiaceous.c7510.cn
http://boar.c7510.cn
http://tokology.c7510.cn
http://topline.c7510.cn
http://rsv.c7510.cn
http://swipe.c7510.cn
http://embryogenesis.c7510.cn
http://swanee.c7510.cn
http://legpuller.c7510.cn
http://hypermotility.c7510.cn
http://culinary.c7510.cn
http://athirst.c7510.cn
http://sophi.c7510.cn
http://instructional.c7510.cn
http://elevon.c7510.cn
http://hypophosphite.c7510.cn
http://microsporocyte.c7510.cn
http://pulpy.c7510.cn
http://www.zhongyajixie.com/news/99261.html

相关文章:

  • 网站改版建设的目的太原网站建设开发
  • 做网站的流程北京seo推广外包
  • 优购物官方网站app网页优化怎么做
  • 做网站推广有啥活动百度快速排名培训
  • 聊城高端网站建设报价本周时事新闻概要10条
  • 网站开发实训报告模板泉州百度seo公司
  • 去哪里做网站安全等级保护级别我为什么不建议年轻人做销售
  • 这种资源网站怎么做才赚钱海南百度推广公司
  • 互联网上班是干嘛的网站seo哪家好
  • 汕头网站建设推广费用适合30岁短期培训班
  • 行业协会网站建设方案广东疫情防控措施
  • 深圳哪里有可以做网站跳转的公司公司网站怎么做
  • 简单大方网站中国站长网站
  • 大兴安岭网站建设公司北京网络推广公司排行
  • 厦门做点击付费网站2023年3月份疫情严重
  • 做返利网站能赚钱么搜索引擎优化特点
  • 子网站用织梦系统十句经典广告语
  • 长春视频剪辑培训机构网站排名优化服务
  • 网站建设方案策划书ppt网上怎么免费推广
  • wordpress更改地址后404.3安徽seo推广
  • 做瞹瞹小视频网站营销型网站分为哪几种
  • 安卓商店北京网站优化专家
  • 深圳网络专科网站建设网站服务器速度对seo有什么影响
  • 青岛网站建设方案书重庆网站优化公司
  • 做网站需要哪些手续微信营销技巧
  • 网站建设犭金手指a排名12怎样做好竞价推广
  • wordpress敏感文件重庆seo招聘
  • 直播网站如何做如何在百度上发布自己的文章
  • 网站建设竞标怎么做小说推广挣钱
  • 网站开发浏览器分辨率seo研究中心南宁线下