算法 Hw7

Hw 7 Graph Algorithm

  • 1 Edge detection
  • 2 Reachability
  • 3 Bitonic shortest paths

1 Edge detection

  • Cut Property 可知:如果 e 是从某个集合 S 到补集 V−S 的开销最小的边,则 e 一定所有最小生成树中。

  • Cycle Property 可知:如果 e 是某个环 C 上开销最大的边,则 e 一定不在最小生成树中。

所以,根据以上两点可以知道判断边 e = (v, w) 是否属于 G 最小生成树的条件:
当且仅当 vw 可以通过完全由比 e 开销更小的边组成的路径连接时,边 e 不属于 G 的最小生成树。

基于此设计算法:

  1. 从图 G 中删除所有开销大于等于 e 的所有边,形成图 G' 。这一步骤的运行时间是 O ( m + n ) O(m+n) O(m+n)
  2. 通过 BFSDFS 确定在 G' 中是否存在从 vw 的路径。这一步骤的运行时间是 O ( m + n ) O(m+n) O(m+n)
    • 若没有这样的路径,边 e 属于 G 的最小生成树。
    • 若有这样的路径,边 e 不属于 G 的最小生成树。

通过以上算法可以判断 e 是否属于 G 的最小生成树,且运行时间是 O ( m + n ) O(m+n) O(m+n)


2 Reachability

  • 先通过强连通分支算法获取图 G 的连通分支图 G',并将 G' 内所有点的值标记为 G' 中 点的最小值。运行时间是 O ( V + E ) O(V+E) O(V+E)

  • 对于图 G',执行以下函数,该函数至多被执行 V + E V+E V+E 次。运行时间是 O ( V + E ) O(V+E) O(V+E)

REACHABILITY(u)u.min = u.labelfor each v ∈ Adj[u]u.min = min(u.min, REACHABILITY(v))return u.min
  • 对于图 Gmin(u) 的值为:G' 图中的 min(u')

3 Bitonic shortest paths

根据 Bellman-Ford算法进行改进,以执行更少的松弛操作。

在任何一个双调路径中,最多有两个不同的递增序列和两个不同的递减序列。因此,通过路径松弛性质,按照权重递增的顺序松弛边两次,再按照权重递减的顺序松弛边两次,就可以确保对于 ∀ v ∈ V \forall v \in V vV v . d = δ ( s , v ) v.d=\delta(s, v) v.d=δ(s,v)

此时有运行时间:

  • 对边进行排序: O ( E lg ⁡ E ) O(E\lg E) O(ElgE)
  • 总共四次松弛: O ( E ) O(E) O(E)

所以,总共的运行时间是 O ( E lg ⁡ E ) + O ( E ) = O ( E lg ⁡ E ) O(E\lg E) + O(E) = O(E\lg E) O(ElgE)+O(E)=O(ElgE),相比普通 Bellman-Ford算法的 O ( V E ) O(VE) O(VE) 更快。


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

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

相关文章

Gradle常见问题及总结

使用android studio开发项目,难免遇到gradle相关的错误,在此总结。 gradle插件与gradle home版本关系错误 参考更新 Gradle Gradle下载太慢 Index of /gradle/ (tencent.com) 是国内下载地址,手动下载对应版本即可 缓存不刷新 问题描述 maven发布…

jenkins插件之xunit

分析测试工具执行的结果,并图形化,比如phpunit,phpstan,可分析junit格式的结果 安装jenkins插件 搜索xunit并安装 项目配置 配置 - Build Steps 您的项目 - 配置 - Build Steps, 新增 Run with timeout 超时时间根据实际情况配置 Build…

Day38 贪心算法part05

LC435无重叠区间(未掌握) 思路:先对数组进行排序,找到非重叠的区间的个数,然后区间的总数减去非重叠区间的个数即是需要移除的区间的个数与LC452用最少数量的箭引爆气球类似,但是不同的是[1,2]和[2,3]在此题并不是重叠区间但是在…

oracle怎么处理json格式

向数据库导入json相关jar包 loadjava -r -f -u bsuser/XXXX192.168.10.31/bsorcl json.jar 要删除的话,删除指定jar dropjava -u bsuser/XXXX192.168.10.31/bsorcl json.jar select * from user_java_classes 然后我们就可以取到json串中任意节点的值

Linux完整版命令大全(四)

2. linux系统设置命令 alias 功能说明:设置指令的别名。语  法:alias[别名][指令名称]补充说明:用户可利用alias,自定指令的别名。若仅输入alias,则可列出目前所有的别名设置。 alias的效力仅及于该次登入的操作。…

行列视(RCV)部署在互联网还是部署在企业内部?

行列视(RCV)的部署方式可以根据企业的具体需求和情况来灵活选择。它既可以部署在互联网上,也可以部署在企业内部。 对于希望实现远程访问、多地点协同工作或者与第三方服务集成等需求的企业,可以选择将行列视(RCV&…

Postgresql源码(129)JIT函数中如何使用PG的类型llvmjit_types

0 总结 llvmjit_types文件分三部分 类型定义:llvm通过变量找到对应结构体的定义,在通过结构体内的偏移量宏使用成员变量。模版函数定义: 第一:AttributeTemplate被当做一个函数属性的模板(例如nofree、nosync等clang…

SpringBoot项目中redis序列化和反序列化LocalDateTime失败

实体类中包含了LocalDateTime 类型的属性,把实体类数据存入Redis后变成这样: 此时,存入redis不会报错,但是从redis获取的时候,会报错: com.fasterxml.jackson.databind.exc.InvalidDefinitionException: Ca…

Springboot项目打包:将依赖的jar包输出到指定目录

场景 公司要对springboot项目依赖的jar包进行升级,但是遇到一个问题,项目打包之后,没办法看到他里面依赖的jar包,版本到底是不是升上去了,没办法看到。 下面是项目打的jar包 我们通过反编译工具jdgui,来…

VUE3和VUE2

VUE3和VUE2 上一篇文章中,我们对VUE3进行了一个初步的认识了解,本篇文章我们来进一步学习一下,顺便看一下VUE2的写法VUE3是否能做到兼容😀。 一、新建组件 我们在components中新建一个组件,名称为Peron,…

缓存降级

当Redis缓存出现问题或者无法正常工作时,需要有一种应对措施,避免直接访问数据库而导致整个系统瘫痪。缓存降级就是这样一种机制。 主要的缓存降级策略包括: 本地缓存降级 当Redis缓存不可用时,可以先尝试使用本地进程内缓存,如Guava Cache或Caffeine等。这样可以减少对Redis…

阴影映射(线段树)

实时阴影是电子游戏中最为重要的画面效果之一。在计算机图形学中,通常使用阴影映射方法来实现实时阴影。 游戏开发部正在开发一款 2D 游戏,同时希望能够在 2D 游戏中模仿 3D 游戏的光影效果,请帮帮游戏开发部! 给定 x-y 平面上的…

再次学习History.scrollRestoration

再次学习History.scrollRestoration 之前在react.dev的源代码中了解到了这个HIstory的属性,当时写了一篇笔记来记录我对它的理解,现在看来还是一知半解。所以今天打算重新学习一下这个属性,主要从属性以及所属对象的介绍、使用方法&#xff0…

每日一题(2)——100~200间的素数

方法一&#xff1a; public class suCount {public static void main(String[] args){int sum0;c1:for(int i100;i<200;i){for(int j2;j<i;j){if(i%j0)continue c1;//continue中断循环&#xff0c;且返回外层循环&#xff0c;进入下一次遍历else if(ji-1){System.out.pr…

Linux信号:信号的保存

目录 一、信号在内核中的表示 二、sigset_t 2.1sigset_t的概念和意义 2.2信号集操作数 三、信号集操作数的使用 3.1sigprocmask 3.2sigpending 3.3sigemptyset 四、代码演示 一、信号在内核中的表示 实际执行信号的处理动作称为信号 递达(Delivery) 。 信号从产生到递达…

Mysql数据库——DML操作

目录 添加数据&#xff08;INSERT&#xff09; 修改数据&#xff08;UPDATE&#xff09; 删除数据&#xff08;DELETE&#xff09; 添加数据&#xff1a; &#xff08;1). 给指定字段添加数据 &#xff08;2). 给全部字段添加数据 &#xff08;3). 批量添加数据 修改数据: 案例…

【STM32】HAL库点灯

【STM32】HAL库点灯 一、探究目标二、探究原理2.1 ST开发库2.1.1 直接配置寄存器2.1.2 标准外设库2.1.3 HAL库2.2 HAL开发2.2.1 环境配置2.2.2 时钟配置2.2.3 GPIO配置2.2.4 工程创建2.2.5 KEIL代码![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/bf1c95d5c6724a6a…

NextGen Mirth Connect XStream反序列化远程代码执行漏洞(CVE-2023-43208)

0x01 产品简介 NextGen Mirth Connect是是美国NextGen公司的一个医疗集成引擎,主要用于医疗领域的系统集成和数据交换,支持多种协议和标准。 0x02 漏洞概述 NextGen Mirth Connect 4.4.1之前版本存在远程代码执行漏洞,未经身份认证的攻击者可利用该漏洞远程执行代码。 0…

混合组网VS传统网络:智能硬件混合组网优劣势浅要解析

智能硬件混合组网是一种利用多种通信技术相结合的方法&#xff0c;以实现更灵活、更可靠的网络连接。通过蓝牙、Wi-Fi、LoRa、4G相互之间的不同通讯方式&#xff0c;根据应用场景的不同以及现场实际环境&#xff0c;优选最佳物联网混合组网方案&#xff0c;以达到部署最便捷性价…

一张SSL证书如何同时保护多个域名及其子域名?

在互联网时代&#xff0c;数据安全和隐私保护变得至关重要&#xff0c;而SSL证书作为确保网站安全的重要工具&#xff0c;其重要性不言而喻。本文将详细探讨一种特殊的SSL证书——多域名通配符SSL证书&#xff0c;它为网站管理员提供了一种高效、经济的方式来保护多个域名及其子…