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

网站建设中数据字典国外设计网站 绿色的

网站建设中数据字典,国外设计网站 绿色的,本科毕业设计代做网站,wordpress在线教育功能寻找有向图中的最长环:两种解法的深度解析 在算法问题中,寻找有向图中的最长环是一个经典问题。今天,我将分享两种不同的解法:时间戳法和拓扑排序法。这两种方法各有特点,适用于不同场景。 问题描述 给定一个包含 …

寻找有向图中的最长环:两种解法的深度解析

在算法问题中,寻找有向图中的最长环是一个经典问题。今天,我将分享两种不同的解法:时间戳法拓扑排序法。这两种方法各有特点,适用于不同场景。
在这里插入图片描述

问题描述

给定一个包含 n 个节点的有向图,节点编号为 0n-1,每个节点最多有一个出边。图的结构由数组 edges 表示,其中 edges[i] 表示节点 i 指向的节点,若 edges[i] = -1 则表示无出边。要求找出图中最长的环,若无环则返回 -1

示例1

输入:edges = [3,3,4,2,3]
输出:3
解释:最长环为 2 -> 4 -> 3 -> 2,长度为 3。

示例2

输入:edges = [2,-1,3,1]
输出:-1
解释:图中无环。

方法一:时间戳法

核心思想

时间戳法利用访问顺序的时间戳来检测环。通过记录每个节点的访问时间,当再次访问到某个节点时,若该节点在当前路径中,则说明形成了一个环。环的长度可以通过时间差计算。

实现步骤

  1. 初始化:使用全局标记数组 visited 避免重复处理节点。
  2. 遍历节点:对每个未访问的节点,沿出边遍历,记录路径中的节点及其访问时间。
  3. 检测环:若遇到当前路径中的已访问节点,计算环长度;否则终止遍历。
  4. 更新结果:维护最大环长度。

代码实现

class Solution:def longestCycle(self, edges: List[int]) -> int:n = len(edges)visited = [False] * n  # 全局访问标记max_cycle = -1for i in range(n):if not visited[i]:time_map = {}  # 当前路径的时间戳记录current_node = itime = 0while True:if current_node == -1:  # 无出边,终止breakif current_node in time_map:  # 发现环cycle_length = time - time_map[current_node]max_cycle = max(max_cycle, cycle_length)breakif visited[current_node]:  # 已访问过,但不在当前路径中breaktime_map[current_node] = time  # 记录当前节点的时间visited[current_node] = True     # 标记为已访问current_node = edges[current_node]  # 移动到下一个节点time += 1return max_cycle if max_cycle != -1 else -1

复杂度分析

  • 时间复杂度:O(n),每个节点仅被访问一次。
  • 空间复杂度:O(n),存储访问标记和时间戳。

适用场景

时间戳法适用于单出边图的最长环问题,能够高效地检测环并计算其长度。

方法二:拓扑排序法

核心思想

拓扑排序法通过消除图中的非环部分,剩下的节点必然构成环。具体步骤如下:

  1. 计算入度:统计每个节点的入度。
  2. 拓扑排序:使用队列处理所有入度为0的节点,逐步消除非环节点。
  3. 遍历剩余节点:未被访问的节点构成环,计算每个环的长度。

实现步骤

  1. 计算入度:遍历每个节点,统计每个节点的入度。
  2. 拓扑排序:将入度为0的节点加入队列,逐步减少其他节点的入度。
  3. 遍历剩余节点:未被访问的节点属于环,计算每个环的长度。

代码实现

from typing import List
from collections import dequeclass Solution:def longestCycle(self, edges: List[int]) -> int:n = len(edges)indegree = [0] * n  # 记录每个节点的入度# 计算每个节点的入度for u in range(n):v = edges[u]if v != -1:indegree[v] += 1visited = [False] * n  # 标记是否被访问过q = deque()# 初始化队列,将入度为0的节点加入队列for u in range(n):if indegree[u] == 0:q.append(u)# 进行拓扑排序,消除非环节点while q:u = q.popleft()visited[u] = Truev = edges[u]if v != -1:indegree[v] -= 1if indegree[v] == 0:q.append(v)max_length = -1  # 记录最长环的长度# 遍历剩余未被访问的节点,计算每个环的长度for u in range(n):if not visited[u]:count = 0current = uwhile True:count += 1visited[current] = Truecurrent = edges[current]if current == u:breakif count > max_length:max_length = countreturn max_length if max_length != 0 else -1

复杂度分析

  • 时间复杂度:O(n),每个节点仅被访问一次。
  • 空间复杂度:O(n),存储入度和访问标记。

适用场景

拓扑排序法适用于单出边图的最长环问题,能够高效地分离出环部分并计算其长度。

两种方法的对比

方法优点缺点
时间戳法实现简单,直接检测环需要额外的时间戳记录
拓扑排序法空间效率高,分离非环节点需要两次遍历(拓扑排序和环检测)

选择建议

  • 时间戳法:适用于需要直接检测环的场景,代码实现较为直观。
  • 拓扑排序法:适用于需要分离非环节点的场景,适合大规模图的处理。

总结

两种寻找有向图中最长环的方法:时间戳法和拓扑排序法。两种方法各有优缺点,但都能高效解决问题。时间戳法通过记录访问时间直接检测环,而拓扑排序法则通过消除非环节点来间接找到环。


文章转载自:

http://VfyWrv5s.xqxLb.cn
http://QB3j51oW.xqxLb.cn
http://zIF8bwjr.xqxLb.cn
http://jivDv43e.xqxLb.cn
http://mpXjd3jd.xqxLb.cn
http://UzfkdsL5.xqxLb.cn
http://CS03njaq.xqxLb.cn
http://o73MU8j3.xqxLb.cn
http://hUPNU4Du.xqxLb.cn
http://nbULccWE.xqxLb.cn
http://8gBiUuVu.xqxLb.cn
http://aqNTQImF.xqxLb.cn
http://3NMkjdT3.xqxLb.cn
http://JgtjVlIz.xqxLb.cn
http://n9nJLMS7.xqxLb.cn
http://dKO8J5dR.xqxLb.cn
http://USqnMiJ6.xqxLb.cn
http://edpFsQ1s.xqxLb.cn
http://pEVimy45.xqxLb.cn
http://YFJYejaE.xqxLb.cn
http://r9VTGa8p.xqxLb.cn
http://caYafqsG.xqxLb.cn
http://0LouGkh8.xqxLb.cn
http://9CYC6ADB.xqxLb.cn
http://SYkUzO72.xqxLb.cn
http://rKpppYtz.xqxLb.cn
http://hScGYOGu.xqxLb.cn
http://m8IIpR03.xqxLb.cn
http://vhdiffQc.xqxLb.cn
http://dLP7jgGQ.xqxLb.cn
http://www.dtcms.com/wzjs/644819.html

相关文章:

  • 二维码制作网站链接仿58同城分类信息网站源码
  • 深圳建网站 (报价)如何做网站seo
  • 如何做一个网站平台网站建设技能培训
  • 互联网网站建设公司做网站累吗
  • 如何看访问网站的dns标志设计公司网站
  • 工程信息网哪个好seo关键词优化排名哪家好
  • 合肥企业网站排名优化小程序开发费用分析
  • 网站安全代维北京网站建设公司 蓝纤科技 网络服务
  • 网站主机推荐定制制作网站哪家好
  • 杭州做网站hzfwwlwordpress ckeditor
  • 网站pv怎么统计word与wordpress
  • 说一说网站建设的含义wordpress小看板娘
  • 江西威乐建设集团有限公司企业网站手机网站建设规范
  • 科技公司网站响应式以下什么是常用的可视化网页制作工具
  • 西安有哪些网站建设外包公司好wordpress 修改头像大小
  • 西安做网站印象网络如何做网站页面
  • iis7如何部署网站如何搭建网站教程视频
  • 中学生设计的网站洋气的广告公司名字
  • 建设聚美优品网站收流量费吗房价下跌最惨10大城市
  • 成都网站设计得多少钱移动端网站的重要性
  • 关于icp备案信息中注销网站的通知找个可以直接看的网站
  • 免费企业网站程序asp成都搜索优化整站优化
  • 深圳做网站网络营销公司哪家好佛山自助建站软件
  • 广东手机网站制作电话合肥做网站的网络公司
  • 宠物网站 模板成都网站制作公司定制
  • 网站开发需要什么配置的电脑展示用网站模板
  • 南京百度网站制作wordpress翠珠林
  • 茂名网站建设优化seo入侵dedecms网站管理员密码
  • 网络营销有哪些方面惠州seo关键词推广
  • 运城微信网站建设奔驰高端品牌