环形链表入口检测算法数学解释

数学原理

  1. 假设定义:

    • 链表头到环入口的距离为 a
    • 环入口到相遇点的距离为 b
    • 相遇点到环入口的距离为 c
    • 环的长度为 b + c
  2. 第一次相遇时:

    • 慢指针走了 s = a + b
    • 快指针走了 f = a + b + n(b + c) 步,其中 n 是快指针在环内转的圈数
    • 由于快指针速度是慢指针的2倍,所以 f = 2s
  3. 代入求解:

    2(a + b) = a + b + n(b + c)
    a + b = n(b + c)
    a = n(b + c) - b
    a = (n-1)(b + c) + c
    
  4. 关键结论:

    • 当 n=1 时,a = c
    • 这意味着:从链表头到环入口的距离 = 从相遇点继续走到环入口的距离

当n不等于1时

您提出了一个很好的问题!我们确实不知道具体的 n 值(快指针绕环的圈数)。让我更清晰地解释:当入口节点很远,可能快指针早就到达环而且转了好几圈了

为什么 n 的具体值不重要

  1. 我们证明了:a = (n-1)(b+c) + c,其中 a 是头到环入口的距离,b+c 是环的周长。

  2. 关键点:无论 n 是多少(1, 2, 3…),等式右边 (n-1)(b+c) + c 都表示:

    • 先在环上走 n-1 个完整的圈(即 (n-1)(b+c))
    • 再从相遇点继续走 c 步
  3. 这意味着:从相遇点走 c 步(可能再加上若干个环的周长)一定会到达环入口。

  4. 同样,从链表头走 a 步也会到达环入口。

  5. 由于 a = (n-1)(b+c) + c,如果同时:

    • 从链表头开始走
    • 从相遇点开始走
    • 都用相同的速度(每次走1步)

    那么这两个指针会同时到达环入口!

  6. 一个放到头节点走到入口节点 另一个从相遇点走到入口节点在转了几个整圈

实际上 n 的值怎么确定

在实际的链表环检测中,n 值由快慢指针首次相遇时决定,但我们不需要计算它:

  • 在标准链表(环不会特别大)中,通常 n=1。
  • 即使 n>1,算法也能正确工作:
    • 快指针在相遇时可能多走了几圈
    • 但在第二阶段,从相遇点出发的指针会沿着相同的路径(可能走几圈)最终到达入口

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

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

相关文章

Java 基本类型与包装类详解

Java 基本类型与包装类详解 在 Java 开发中,理解 基本数据类型与包装类、字符串处理、以及高精度计算类是非常核心的能力。这不仅关系到程序性能,还影响代码的正确性和可维护性。本文将详细讲解这些知识点,并给出常见的使用技巧和陷阱。 1️…

CRYPT32!CryptMsgUpdate函数分析之CRYPT32!PkiAsn1Decode函数的作用是得到pci

第一部分: CryptMsgUpdate( #endifIN HCRYPTMSG hCryptMsg,IN const BYTE *pbData,IN DWORD cbData,IN BOOL fFinal) {ContentInfo *pci NULL;if ((PHASE_FIRST_FINAL pcmi->dwPhase) &&(0 pcmi->dwMsgType)) {if (0 …

华为交换机S5700设置acl

1.、配置ACL1.1、定义允许的ACL规则[sw1]acl number 3001[sw1-acl-adv-3001]rule permit ip source 192.168.20.0 0.0.0.255 destination 192.168.40.1 0[sw1-acl-adv-3001]rule permit ip source 192.168.30.0 0.0.0.255 destination 192.168.40.1 01.2、定义禁止的ACL规则[sw…

在使用spring ai进行llm处理的rag的时候,选择milvus还是neo4j呢?

在使用spring ai进行llm处理的rag的时候,选择milvus还是neo4j呢? 对于Spring AI中的RAG(Retrieval-Augmented Generation)应用,选择Milvus还是Neo4j,主要取决于你的数据类型以及RAG流程中对数据检索的侧重点…

计算机视觉与深度学习 | 视觉里程计技术全景解析:从原理到前沿应用

视觉里程计技术全景解析:从原理到前沿应用 一、定义与核心价值 二、技术原理与分类体系 2.1 基本工作流程 2.2 主流技术路线对比 2.3 算法范式演进 三、典型应用场景 3.1 地面移动机器人 3.2 自动驾驶领域 3.3 深空探测 3.4 增强现实 四、核心技术挑战与突破路径 4.1 主要技术…

Wireshark和USRP捕获同一信号波形差异原因

一、波形差异 在前面的博客中我对比绘制了同一信号的Wireshark和USRP两种波形: 可以看出波形差别还是挺大的,尤其是在信号分布间隔方面。 我猜想Wireshark的一条数据包在物理上并不是连续的: 而是分组发送,但在Wireshark中合并在…

Python-GEE遥感云大数据分析、可视化与Satellite Embedding应用

随着航空、航天、近地空间遥感平台的持续发展,遥感技术近年来取得显著进步。遥感数据的空间、时间、光谱分辨率及数据量均大幅提升,呈现出大数据特征。2025年7月,Google DeepMind发布了革命性的AlphaEarth Foundations模型及Satellite Embedd…

Python常见设计模式2: 结构型模式

文章目录适配器模式桥接模式组合模式外观模式代理模式适配器模式 将一个类的接口转换成客户希望的另一个接口。适配器模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。两种实现方式: 类适配器:使用多继承对象适配器:使用组合…

HDMI2.1 8K验证平台

本文推荐其中一个平台ZCU106HDMI2.1 FMC Card 一、ZCU106主要特性与优势 经过优化,可采用 Zynq Ultrascale MPSoC 快速进行应用原型设计集成型视频编解码器单元支持 H.264/H.265HDMI 视频输入输出PCIe 端点 Gen3x4、USB3、DisplayPort 和 SATADDR4 SODIMM – 64 位…

R语言使用随机森林对数据进行插补

数据插补的目的是为了恢复数据的完整性,以便后续的数据分析和挖掘工作能够顺利进行。插补方法的选择取决于数据的特点和缺失模式。常见的插补方法包括均值插补、回归插补、多重插补等。均值插补简单易行,但可能会改变数据分布;回归插补考虑了…

论文阅读:ICLR 2024 GAIA: A Benchmark for General AI Assistants

https://arxiv.org/pdf/2311.12983 https://www.doubao.com/chat/18484357054754562 GAIA: A Benchmark for General AI Assistants GAIA:通用人工智能助手基准测试 该论文介绍了GAIA(General AI Assistants)基准测试,这是一…

【Cmake】静态库(编译-链接-引用)相关函数

目录 一.file 1.1.示例一 1.2.示例二 1.2.1.GLOB 1.2.2.GLOB_RECURSE 1.3.示例三 1.3.1.GLOB 1.3.2.GLOB_RECURSE 1.4.file(GLOB)的缺点 二.add_library 示例 1:创建一个简单的静态库 示例 2:创建一个简单的共享库(动态库&#x…

【50页PPT】钢铁企业数字化工厂解决方案需求要点(附下载方式)

篇幅所限,本文只提供部分资料内容,完整资料请看下面链接 https://download.csdn.net/download/2501_92796370/91716817 资料解读:钢铁企业数字化工厂解决方案需求要点 详细资料请看本解读文章的最后内容 钢铁行业数字化转型背景与意义 当…

Java深拷贝与浅拷贝核心解析

Java深拷贝与浅拷贝的概念浅拷贝(Shallow Copy)只复制对象的引用,而不复制对象本身。拷贝后的对象和原对象共享同一块内存地址中的子对象。修改其中一个对象的非基本类型属性时,另一个对象的对应属性也会被修改。深拷贝&#xff0…

DBeaver 的 PostgreSQL 驱动包默认存储位置

在 Windows 系统中,DBeaver 的 PostgreSQL 驱动包(JDBC 驱动 JAR 文件)默认存储位置如下: ###🔍 默认驱动安装路径 C:\Users\你的用户名\AppData\Roaming\DBeaverData\drivers说明:你的用户名:…

大数据毕业设计选题推荐:基于北京市医保药品数据分析系统,Hadoop+Spark技术详解

🍊作者:计算机毕设匠心工作室 🍊简介:毕业后就一直专业从事计算机软件程序开发,至今也有8年工作经验。擅长Java、Python、微信小程序、安卓、大数据、PHP、.NET|C#、Golang等。 擅长:按照需求定制化开发项目…

Package.xml的字段说明

package.xml 的版本说明 <package format"2"></package>每一个 package.xml 都以作为 root 标签&#xff0c;其中 format 代表版本,现在主要是版本 2 为主,与版本 1 之间的差别主要是一些子标签, package.xml 的必备标签 name:功能包名 version:版本号。…

JAVA【抽象类】和【接口】

在面向对象编程中&#xff0c;接口&#xff08;Interface&#xff09;和抽象类&#xff08;Abstract Class&#xff09;都是用于实现抽象化的机制&#xff0c;但它们在设计目的、语法规则和使用场景上有显著区别。以下是它们的核心区别&#xff1a; 1. 定义与关键字接口&#x…

Mysql系列--11、使用c/c++访问mysql服务

目录 一、准备 测试 二、创建对象 三、连接Mysql服务 四、下达指令 3.1增删改 增加 编码格式 删除 修改 3.2查询结果 结构体理解 打印属性 打印数据 前面我们已经学习并练习了本地命令行形式的sql语句的使用&#xff0c;可在以后开发中我们一般 不会直接命令行操作数据库&…

CS144 lab3 tcp_sender

0. 前言 这个实验做了挺久的&#xff0c;刚开始做的时候官方的代码库还是开着的。 调着调着代码官方把仓库给删掉了&#xff0c;又去找别人的代码仓库调发现不 对都打算放弃了&#xff0c;过了几天发现了一个start-code的库 再合进去简直完美。这个实验花的时间应该是前四个里面…