倍增求 LCA

news2024/11/19 3:39:10

1. 树上倍增——倍增求 LCA

        LCA 指的是最近的公共祖先,倍增法求解 LCA 的步骤如下。

(1)预处理

        a. 求深度:对于每个节点 dfs 预处理处节点深度;

        b.  求倍增祖先:计算出每个节点向父元素跳 2^{0},2^{1},2^{2},...,2^{k} 步所到达的节点(在这里 2^{k} 大于整棵树的最大深度)

        备注:

        a. 设 f [ x ,  k ] 表示节点 x 向上跳 2^{k} 步能到达的祖先, f [ x ,  0 ] 表示 x 的父元素,如对应节点不存在 f [ x ,  k ] = 0。

        b. 将路径长度 2^{k} 分为两半,x 跳 2^{k} 次到的祖先 = x 跳 2^{k-1} 次到的祖先再跳 2^{k-1} 次。

        因此可得: f [ x ,  k ] = f [ f [ x ] [ k-1 ] , k-1 ]。

        c. 有 n 个节点,每个节点能向上跳的最大次数为 log_{N} ,因此预处理的时间复杂度为 n*log_{n}

(2)查询

        对于多次查询节点 x 和 y 的公共祖先:

        a. 如果 x 的深度 < y 的深度,则交换 x y,使得 x 更深;

        b. 采用二进制拆分的思想,根据两个节点的深度差,让 x 快速跳转到和 y 一样深;

        c. 如果此时 x==y,可得 LCA;

        d. 如果不相等,采用二进制拆分的思想,让 x y 倍增上跳,直到 x 的父相遇(因为跳出根以上, f [ x ] [ y ] = 0,因此如果让 x 和 y 相遇,可能结果为 0 ),可得 LCA;

        备注:单词查询的时间复杂度为 log_{N}

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

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

相关文章

@网安人,欢度国庆,共享盛世!

一、网络安全&#xff1a;时代发展的关键基石 网络安全在当今数字化时代的重要性不言而喻&#xff0c;它如同坚实的基石&#xff0c;支撑着国家的稳定、经济的发展和社会的和谐。 &#xff08;一&#xff09;国家安全的关键防线 在当今世界&#xff0c;网络空间的战略地位愈…

Linux中配置docker环境

1.基础信息了解 &#xff08;1&#xff09;docker信息了解&#xff0c;docker官网 https://www.docker.com/&#xff0c;docker中文网 https://dockerdocs.cn/&#xff0c;还可以了解下虚拟化和容器化的知识&#xff0c;虚拟化和容器化 &#xff08;2&#xff09;查看当前Lin…

PyCharm vs VSCode,是时候改变你的 IDE 了!

在编程世界中&#xff0c;选择一个合适的 IDE (集成开发环境) 对开发者来说至关重要&#xff0c;直接影响开发效率和体验。 在软件开发的世界里&#xff0c;选择一个合适的集成开发环境&#xff08;IDE&#xff09;就如同为自己找到了一把趁手的工具。PyCharm 和 VSCode 是两款…

springboot厨房达人美食分享平台(源码+文档+调试+答疑)

文章目录 前言一、主要技术&#xff1f;二、项目内容1.整体介绍&#xff08;示范&#xff09;2.运行截图3.部分代码介绍 总结更多项目 前言 厨房达人美食分享平台的目的是让使用者可以更方便的将人、设备和场景更立体的连接在一起。能让用户以更科幻的方式使用产品&#xff0c…

uniapp中在web端如何友好的展示app当前的版本等信息

一个小技巧&#xff0c;分享下在webapp中友好展示当前app信息的方法 实现效果 代码实现 导入 import {version,name} from ./package.json应用声明周期中处理 onLaunch: function() { // #ifdef H5console.log(%c hello uniapp %c v${version} ,background:#35495e ; paddin…

YOLOv11改进策略【损失函数篇】| Slide Loss,解决简单样本和困难样本之间的不平衡问题

一、本文介绍 本文记录的是改进YOLOv11的损失函数&#xff0c;将其替换成Slide Loss&#xff0c;并详细说明了优化原因&#xff0c;注意事项等。Slide Loss函数可以有效地解决样本不平衡问题&#xff0c;为困难样本赋予更高的权重&#xff0c;使模型在训练过程中更加关注困难样…

第十七章:c语言内存函数

1. memcpy使⽤和模拟实现 2. memmove使⽤ 3. memset函数的使⽤ 4. memcmp函数的使⽤ 天行健 君子以自强不息一、memcpy的使用和模拟实现 作用&#xff1a; 1. 函数memcpy从source的位置向后复制num个字节的数据到destination指向的内存位置。 2. 这个函数在遇到‘\0’的时…

如何创建出更鲁棒、更值得信赖的大模型

尽管深度学习取得了令人瞩目的成就&#xff0c;提供了各种各样的产品和功能&#xff0c;但它还没有跨过最后的障碍。 随着复杂的神经网络越来越多地应用于任务关键型和安全关键型应用中&#xff0c;围绕其鲁棒性出现的问题也越来越多。 许多深度学习算法的黑箱性质让精通安全的…

【完-网络安全】Windows注册表

文章目录 注册表启动项及常见作用五个根节点常见入侵方式 注册表 注册表在windows系统的配置和控制方面扮演了一个非常关键的角色&#xff0c;它既是系统全局设置的存储仓库&#xff0c;也是每个用户的设置信息的存储仓库。 启动项及常见作用 快捷键 WinR打开运行窗口&#x…

谱减法和维纳滤波的关系

目录 一、基本原理二、谱减法与维纳滤波的联系三、实际应用中的对比四、优缺点分析五、两者的融合与改进六、举例说明七、总结与展望 谱减法和维纳滤波是两种常见的语音增强算法&#xff0c;在信号处理领域中&#xff0c;特别是语音降噪方面有着广泛的应用。它们各自具有独特的…

【Python|接口自动化测试】使用requests发送http请求时添加headers

文章目录 1.前言2.HTTP请求头的作用3.在不添加headers时4.反爬虫是什么&#xff1f;5.在请求时添加headers 1.前言 本篇文章主要讲解如何使用requests请求时添加headers&#xff0c;为什么要加headers呢&#xff1f;是因为有些接口不添加headers时&#xff0c;请求会失败。 2…

执行力怎么培养?

执行力怎么培养&#xff1f; 并行&#xff1a;适合在初期养成习惯&#xff0c;不抱对结果的期望天才就是强迫症&#xff1a;适合中期修身&#xff1a;适合高级 并行&#xff1a;适合在初期养成习惯&#xff0c;不抱对结果的期望 在你开始做任何事情的时候&#xff0c;不要一开…

【STM32】 TCP/IP通信协议(1)--LwIP介绍

一、前言 TCP/IP是干啥的&#xff1f;它跟SPI、IIC、CAN有什么区别&#xff1f;它如何实现stm32的通讯&#xff1f;如何去配置&#xff1f;为了搞懂这些问题&#xff0c;查询资料可解决如下疑问&#xff1a; 1.为什么要用以太网通信? 以太网(Ethernet) 是指遵守 IEEE 802.3 …

基于Springboot+Vue的视频点播系统设计与实现登录 (含源码数据库)

1.开发环境 开发系统:Windows10/11 架构模式:MVC/前后端分离 JDK版本: Java JDK1.8 开发工具:IDEA 数据库版本: mysql5.7或8.0 数据库可视化工具: navicat 服务器: SpringBoot自带 apache tomcat 主要技术: Java,Springboot,mybatis,mysql,vue 2.视频演示地址 3.功能 系统中…

springboot工伤事故管理系统-计算机毕业设计源码04050

摘 要 工伤事故管理系统是为了提高企业对工伤事故的管理和处理能力而设计的。该系统主要利用现代技术手段构建一个全面、高效的工伤事故管理平台&#xff0c;帮助企业实现工伤事故的预防、记录、报告和分析。通过工伤事故管理系统&#xff0c;企业可以进行工伤事故的登记和记录…

pycharm汉化插件无法使用也无法卸载的解决方法

pycharm汉化插件无法使用也无法卸载的解决方法 本文目录&#xff1a; 一、故障描述 二、故障解决 零、时光宝盒 学习没有可能一帆风顺&#xff0c;我们都是在不断遇到的各种突发问题&#xff0c;不断努力解决的过程中成长。 前几天&#xff0c;我发现家里的网络晚上12点左右开…

VUE 开发——Node.js学习(一)

一、认识Node.js Node.js是一个跨平台JavaScript运行环境&#xff0c;使开发者可以搭建服务器端的JavaScript应用程序 使用Node.js编写服务器端程序——编写数据接口、前端工程化&#xff1b; Node.js环境没有BOM和DOM&#xff1b; Node.js安装&#xff1a;下载node-v16.19…

APO v0.5.0 发布:可视化配置告警规则;优化时间筛选器;支持自建的ClickHouse和VictoriaMetrics

APO 新版本 v0.5.0 正式发布&#xff01;本次更新主要包含以下内容&#xff1a; 新增页面配置告警规则和通知 在之前的版本中&#xff0c;APO 平台仅支持展示配置文件中的告警规则&#xff0c;若用户需要添加或调整这些规则&#xff0c;必须手动编辑配置文件。而在新版本中&a…

如何构建一个生产级的AI平台(4)?

书接上回&#xff0c;继续往下讲,本节会说一下复杂逻辑&#xff0c;可观测性和Pipeline 添加复杂逻辑和写入操作 到目前为止&#xff0c;我们讨论的应用程序具有相当简单的流程。 基础模型生成的输出大多返回给用户&#xff08;除非它们没有通过护栏&#xff09;。 但是&…

工业交换机的RMON

工业交换机在现代网络中扮演着至关重要的角色&#xff0c;它不仅负责数据的高效传输&#xff0c;还具备强大的监控和管理能力。其中&#xff0c;RMON&#xff08;远程监控&#xff09;功能使得交换机的性能得以进一步提升&#xff0c;成为网络管理的重要工具。RMON提供了一种先…