- 博客(108)
- 收藏
- 关注
原创 Redis存储(15)Redis的应用_分布式锁_Lua脚本/Redlock算法
分布式锁是解决分布式系统中资源互斥访问的关键技术。本文详细介绍了基于Redis的分布式锁实现方案:1)通过setnx命令实现基础锁机制;2)引入过期时间防止死锁;3)添加服务器ID校验避免误删;4)使用Lua脚本保证原子性;5)采用watchdog机制动态续约;6)通过Redlock算法应对集群故障场景。文章还探讨了锁的可重入性、公平性等扩展特性,并指出实际开发中应优先使用成熟的分布式锁库。该方案有效解决了分布式环境下的资源共享问题,具有较高的实用价值。
2026-02-07 15:18:34
610
原创 Redis存储(14)Redis的应用_缓存_预热/穿透/雪崩/击穿
摘要:本文系统介绍了计算机缓存的概念及其应用。通过身份证存取的生活案例,阐释了缓存"快速访问热点数据"的核心思想,分析了硬件访问速度的层级关系。重点讲解了Redis作为MySQL数据库缓存的使用场景和优势,包括其内存存储特性、简单数据结构带来的性能提升。详细阐述了缓存的更新策略(定期/实时生成)、淘汰算法(FIFO/LRU/LFU等)以及Redis内置策略。最后深入剖析了缓存使用中的四大问题:预热、穿透、雪崩和击穿,并给出了相应的解决方案。全文从原理到实践,全面呈现了缓存技术在提升系统性
2026-02-07 15:09:17
594
原创 Redis存储(13)Redis集群_扩展存储空间
Redis集群通过数据分片解决存储空间不足问题,采用多组Master/Slave存储数据子集。核心是数据分片算法:哈希求余简单但扩容成本高;一致性哈希降低扩容开销但数据分布不均;Redis采用哈希槽算法(16384个槽位),兼顾扩容效率与数据均匀性。主节点故障时通过心跳检测、主观/客观下线判定及Raft算法选举新主节点,确保集群高可用。建议集群分片不超过1000个,以平衡性能与可靠性。
2026-02-07 13:50:52
643
原创 Redis存储(12)哨兵Sentinel_高可用实现方案
Redis哨兵机制是实现高可用的关键解决方案。它通过部署多个哨兵节点监控主从节点状态,当主节点故障时自动完成故障检测、选举新主节点和通知客户端等操作,避免了人工干预的延迟问题。哨兵采用Raft算法选举领导者,根据优先级、复制偏移量等规则选择新主节点,确保系统持续可用。建议部署奇数个哨兵节点以提高选举效率和可靠性。哨兵机制虽解决了高可用问题,但仍存在数据丢失风险和存储容量限制,后续需要通过Redis集群扩展存储空间。
2026-02-06 19:08:14
553
原创 Redis存储(11)主从复制_分布式系统解决单点问题
Redis主从复制是一种分布式数据同步机制,通过建立主节点(master)与从节点(slave)的复制关系,实现数据的多副本存储。主节点负责写操作,从节点负责读操作,有效提升读性能并增强系统可用性。复制过程分为全量复制和部分复制:全量复制在初次同步时进行,主节点将完整数据发送给从节点;部分复制则在网络中断恢复后,仅同步丢失的数据。Redis支持三种拓扑结构:一主一从、一主多从和树状结构,可根据业务需求选择。主从复制通过心跳机制维护连接状态,并提供了复制积压缓冲区来优化网络中断时的数据恢复。该机制是Redis
2026-02-06 18:16:55
673
原创 Redis存储(10)Redis的事务_弱化的原子性
MySQL和Redis事务对比:MySQL事务严格遵循ACID特性(原子性、一致性、隔离性、持久性),支持回滚机制。Redis事务本质是命令队列批量执行,仅保证命令连续性,不满足ACID:无回滚机制(弱化原子性)、不保证一致性(无约束检查)、无需隔离性(单线程串行执行)、持久性依赖独立配置。Redis通过WATCH实现乐观锁机制防止并发修改,适用于简单批量操作场景。两者差异源于设计目标不同:MySQL强调数据安全,Redis侧重高性能。
2026-02-06 17:22:23
626
原创 Redis存储(9)Redis的持久化_RDB和AOF
本文详细介绍了Redis的两种持久化机制:RDB和AOF。RDB通过定期生成数据快照(dump.rdb)实现持久化,具有恢复速度快、文件紧凑等优点,但可能丢失两次快照间的数据。AOF通过记录所有写命令实现持久化,支持实时备份,但文件较大且恢复较慢。两者都利用fork创建子进程来减少主进程影响,其中RDB适合备份场景,AOF适合高可用场景。文章还深入分析了RDB的手动/自动触发机制、bgsave流程,以及AOF的缓冲区策略、重写机制和混合持久化等特性,为不同业务场景下的持久化方案选择提供了指导。
2026-02-05 22:31:07
453
原创 Redis存储(8)Redis的C++客户端安装和使用
本文介绍了使用redis-plus-plus C++库操作Redis的完整指南。主要内容包括:1) 安装指南,详细说明Ubuntu和CentOS系统下编译安装hiredis和redis-plus-plus的步骤;2) 基础使用示例,展示如何建立连接和执行基本命令;3) 各类数据结构的操作示例,包括字符串、哈希、列表、集合和有序集合的完整测试代码;4) 实用工具函数和Makefile配置。文章提供了从环境搭建到实际应用的全流程指导,特别强调了C++17特性使用和跨平台注意事项,适合需要高效Redis操作的C+
2026-02-05 18:48:02
613
原创 Redis存储(7)其它数据类型+渐进式遍历+数据库管理
Redis除了五种基本数据类型外,还提供了特殊用途的数据类型:Stream(消息流处理)、Geospatial(地理坐标存储)、HyperLogLog(基数统计)、Bitmap(位操作)和Bitfield(自定义位字段)。此外,Redis采用渐进式遍历命令scan来避免keys命令的阻塞问题,支持分批获取键。数据库管理方面,Redis支持16个隔离的数据库,但推荐使用单一数据库;提供了flushdb和flushall清除命令,但严禁在生产环境使用。这些特性使Redis能适应消息队列、地理定位、大数据统计等多
2026-02-05 16:06:19
563
原创 Redis存储(6)Redis五大数据类型之 Zset
Redis有序集合(Zset)是一种特殊数据结构,兼具集合去重和元素排序特性。每个元素关联一个分数(score),通过分数实现自动排序。Zset支持添加/删除元素(zadd/zrem)、范围查询(zrange/zrevrange)、排名查询(zrank/zrevrank)等操作,时间复杂度多为O(logN)。内部采用跳表(skiplist)或压缩列表(ziplist)实现,根据元素数量和大小自动选择编码方式。典型应用场景包括排行榜系统,可实现点赞统计、用户排名展示等功能。Zset还支持集合间的交集(zint
2026-02-05 15:38:05
582
原创 Redis存储(5)Redis五大数据类型之 List 和 Set。
Redis列表(List)和集合(Set)数据结构详解 列表(List)特性: 有序元素集合,支持重复元素 两端操作:lpush/rpush(插入)、lpop/rpop(删除) 常用命令:lrange(范围查询)、lindex(索引查询)、llen(长度查询) 应用场景:消息队列、微博Timeline分页 集合(Set)特性: 无序元素集合,元素唯一 支持交(sinter)、并(sunion)、差(sdiff)集运算 常用命令:sadd(添加)、smembers(查询)、srem(删除) 应用场景:标签系统
2026-02-04 20:07:49
655
原创 Redis存储(4)Redis五大数据类型之String和Hash
Redis字符串类型是基础数据结构,支持字符串、数字和二进制数据存储(最大512MB)。常用命令包括SET/GET/MSET/MGET等批量操作,以及INCR/DECR等计数命令。字符串内部编码根据数据动态选择int、embstr或raw格式。典型应用场景包括:1)缓存层加速读写,缓解后端压力;2)视频播放计数等统计功能;3)集中管理分布式Session;4)实现短信验证码频控。相比直接使用多个键或JSON序列化,字符串类型在简单缓存场景中更高效,但复杂结构化数据建议使用哈希类型。使用时需注意大键值对可能导
2026-02-04 10:59:46
655
原创 Redis存储(3)Redis基本命令+内部编号和架构
本文介绍了Redis命令行客户端的基本操作和核心机制。主要内容包括:1. 客户端连接方式(交互式和命令式)及基本命令(set/get);2. 全局命令详解(keys、exists、del、expire、ttl、type等);3. 数据结构的内部编码实现机制;4. 单线程架构的优势(内存访问、简单操作、非阻塞IO)及执行模型。文章着重分析了Redis高性能的关键因素,包括内存操作、单线程避免竞争、IO多路复用等技术特点,并解释了过期键删除策略和不同类型数据结构的底层实现差异。
2026-02-03 21:15:19
505
原创 Redis存储(2)Redis的概念+特性+应用+安装
Redis是一款高性能的键值对NoSQL数据库,支持多种数据结构如字符串、哈希、列表等。其特性包括内存存储、单线程模型、持久化机制和丰富功能如发布订阅、Lua脚本等。Redis广泛应用于缓存、排行榜、计数器等场景,并有完善的主从复制和集群功能。文章详细介绍了Redis的发展历程、版本特性演变及在Ubuntu上的安装配置方法。Redis凭借其简单稳定、高性能等特点,已成为现代互联网应用中不可或缺的基础组件。
2026-02-03 20:08:59
623
原创 Redis存储(1)高并发分布式架构演进
本文系统介绍了软件架构的基本概念、评价指标和演进路径。首先定义了应用、模块、分布式、主从、中间件等核心概念,然后阐述了可用性、响应时长、吞吐量等关键指标。重点梳理了从单机架构到容器编排的九种演进阶段:单机→应用数据分离→应用集群→读写分离→引入缓存→垂直分库→微服务→容器化。每个阶段都针对特定瓶颈提出解决方案,如负载均衡解决应用层瓶颈、主从分离缓解数据库压力等。文章强调架构演进需结合实际业务需求,平衡性能、成本和团队能力,避免过度设计。最后指出大数据架构与业务架构的区别,为后续Redis学习做铺垫。
2026-02-03 19:03:26
531
原创 网络和Linux网络-15(IO多路转接)reactor编程-服务器
本文介绍了一个基于epoll的Reactor模式服务器实现。核心包括Epoll类封装epoll系统调用、Connection类管理客户端连接状态和缓冲区、TcpServer类实现事件循环和回调机制。服务器采用ET模式,通过非阻塞I/O处理并发连接,使用自定义协议(X分隔)解决粘包问题,并实现序列化/反序列化功能。主要流程包括:1)创建监听套接字并注册到epoll;2)事件循环处理就绪事件;3)Accepter接收新连接;4)Recver/Sender处理I/O;5)Excepter处理异常。服务器支持定制业
2026-02-03 17:40:27
777
1
原创 网络和Linux网络-14(IO多路转接)poll和epoll编程-服务器
本文主要介绍了三种I/O多路转接技术:poll、epoll及其工作原理。poll解决了select的文件描述符数量限制问题,通过pollfd结构体分离用户和内核空间,但仍需遍历检测就绪事件。epoll在poll基础上改进,采用红黑树管理文件描述符,通过回调机制将就绪事件加入队列,实现了O(1)时间复杂度的高效处理。文章详细阐述了epoll的三种系统调用(create、ctl、wait)和两种工作模式(水平触发LT和边缘触发ET),比较了它们的优缺点。最后通过简易服务器代码示例展示了epoll的实际应用,并指
2026-02-02 11:12:42
626
原创 网络和Linux网络-13(高级IO+多路转接)五种IO模型+select编程
本文深入解析了五种I/O模型:阻塞I/O、非阻塞I/O、信号驱动I/O、多路复用I/O和异步I/O。通过钓鱼的比喻形象说明了不同模型的特点,重点分析了select系统调用的实现原理和使用方法。文章详细介绍了select函数的参数、工作机制,并实现了一个简易的select服务器示例。最后总结了select的优缺点:虽然能高效处理大量连接,但存在文件描述符数量限制、需要维护第三方数组、遍历成本高、数据拷贝开销大等缺陷。这些分析为后续学习更先进的poll和epoll多路复用技术奠定了基础。
2026-02-02 07:28:04
656
原创 网络和Linux网络-12(网络其它协议和技术)DNS+ICMP+NAT/NAPT+代理服务器
在讲解网络通信的时候,都是说的IP地址,但是我们生活中访问一些网站时都用的域名,如www.baidu.com访问的就是百度的服务器。 在整个网络通信的协议栈中我们也并没有看到和域名有关的任何东西,因为网络通信的实现就是通过IP地址,并不是域名,域名也需要转换成IP地址,然后再进行通信。 对于使用网络的人来说,IP地址并不方便记忆,因为它是数字性的东西,所以将域名和IP地址映射起来,形成壹壹对应的关系,在使用的时候直接使用域名字符串就行。 最初,在每个人的主机上都存在一个hosts文件,该
2026-02-01 22:37:15
627
原创 算法基础—组合数学
本文介绍了组合数学中的计数原理、排列组合概念以及多种计算组合数的方法。首先阐述了加法原理和乘法原理的基本应用,然后详细讲解了四种组合数计算方法:循环法(适用于小范围查询)、杨辉三角法(适用于多次查询且n≤2000)、阶乘逆元法(适用于大范围查询且n≤1e6)以及卢卡斯定理(适用于超大数n,m≤1e18)。最后通过NOIP2016提高组的组合数问题,展示了如何利用杨辉三角和前缀和矩阵高效解决实际问题。各种方法均附有代码实现,并分析了时间复杂度,为不同场景下的组合数计算提供了实用解决方案。
2026-02-01 21:59:08
680
原创 算法基础(数论)—费马小定理
本文摘要: 本文系统介绍了数论中的核心概念与算法,主要包括: 费马小定理及其应用 同余运算的性质(同加性、同乘性) 快速幂算法实现(O(logn)时间复杂度) 解决除法取模问题的逆元计算方法 欧拉定理扩展应用 欧拉函数计算与快速幂结合 处理超大指数问题的降幂技巧 递归求解固定余数问题 裴蜀定理与扩展欧几里得算法 求解二元一次不定方程 计算同余方程的最小正整数解 解决青蛙约会等实际问题 乘法逆元的三种求法 费马小定理法(要求模数为质数) 扩展欧几里得法(更通用) 线性递推法(批量求逆元) 文中通过洛谷、牛客等
2025-12-28 08:03:11
859
原创 算法基础(数论)—欧拉函数
摘要:本文介绍了欧拉函数的定义与性质,并给出两种计算欧拉函数的实现方法。欧拉函数φ(n)表示1~n中与n互质的数的个数,具有积性函数特性。文中提供了单点计算的phi函数和线性筛预处理1~n欧拉函数的方法,时间复杂度分别为O(√n)和O(n)。最后通过仪仗队和GCD两道例题展示了欧拉函数的应用:前者统计互质坐标对,后者计算gcd为素数的数对数量,均通过预处理欧拉函数前缀和来优化计算。
2025-12-25 11:32:33
605
原创 算法基础(数论)—约数
本文介绍了求整数约数的两种主要方法:试除法和倍数法。试除法通过枚举1到√n的数,利用约数成对性高效求解单个数的约数及和,时间复杂度为O(√n)。倍数法适用于求1到n每个数的约数集合,通过枚举约数的倍数实现,时间复杂度为O(nlogn)。文章还给出了牛客网两道典型题目的解法:求自然数N的约数之和采用试除法;求1到n所有数约数个数之和则通过统计每个数作为约数出现的次数来优化计算。两种方法各具优势,适用于不同场景的约数计算需求。
2025-12-25 10:19:59
810
原创 算法基础(数论)—算法基本定理
本文介绍了算术基本定理及其在编程中的实现方法。主要内容包括: 算术基本定理的概念:任何大于1的自然数都可以唯一分解为有限个质数的乘积 质因数分解的代码实现,包括试除法分解质因数的方法 两个阶乘分解的算法题解: 对于N≤10000的情况,采用逐个分解的方法 对于N≤1e6的情况,使用欧拉筛法先筛出质数,再通过数学公式计算各质数在阶乘中的次数 提供了完整的C++代码实现,包含详细的注释说明 文章通过具体题目示例,展示了如何高效实现大数阶乘的质因数分解,并分析了不同解法的时间复杂度。
2025-12-25 09:45:54
310
原创 算法基础(数学)—数论
本文系统介绍了算法竞赛中常用的数学知识,重点讲解了数论、组合数学、线性代数等核心内容。在数论部分详细阐述了最大公约数、最小公倍数的计算方法和欧几里得算法实现,并通过两道例题展示具体应用。质数判定部分介绍了试除法判断质数的方法,并对比了埃氏筛法和线性筛法两种质数筛法,分析了它们的时间复杂度差异。文章还提供了多个典型例题的参考代码,包括素数密度等较难题目,强调实践操作的重要性,建议读者通过纸笔练习加深理解。这些数学工具和算法是解决竞赛问题的基础,掌握它们对提升算法能力至关重要。
2025-12-25 08:54:51
1024
原创 算法基础-多源最短路
摘要:本文介绍了多源最短路问题及其Floyd算法实现。Floyd算法通过动态规划思想,以O(n³)时间复杂度计算图中所有点对的最短路径,适用于带权有向/无向图(允许负权边但不含负环)。文章详细讲解了Floyd的状态表示(f[k][i][j])、状态转移方程(分是否经过k点两种情况)和空间优化技巧,并提供了四个典型例题的解法:1)模板题直接应用Floyd;2)寻宝问题累加路径和;3)灾后重建问题按时间动态更新;4)无向图最小环问题利用Floyd特性求解。每个问题均附完整代码实现,展现了Floyd算法的灵活应用
2025-12-23 18:21:41
740
原创 算法基础-单源最短路
本文系统讲解了单源最短路径算法,包括Dijkstra算法(常规版和堆优化版)、Bellman-Ford算法和SPFA算法。Dijkstra适用于非负权图,通过贪心策略逐步确定最短路径;堆优化版利用优先队列提高效率。Bellman-Ford和SPFA能处理负权边,SPFA是对BF算法的队列优化。文章还提供了多个经典例题的代码实现,如邮递员送信、采购特价商品等,涵盖最短路径问题的常见应用场景和解题技巧。
2025-12-23 09:49:19
867
原创 算法基础(图论)—拓扑排序
拓扑排序拓扑排序1有向⽆环图若⼀个有向图中,则称为(directed acycline graph),简称 DAG 图。2.AOV ⽹举⼀个现实中的例⼦:课程的学习是有优先次序的,如果规划不当会严重影响学习效果。课程间的先 后次序可以⽤有向图表⽰:ViVjViVjAOV ⽹中不能有回路,否则就不能确定回路中的活动究竟哪个先实施。3拓扑排序拓扑排序的⽬标是将,使得。在课程问题中,相当于就是找到⼀个排课的合法顺序。具体流程可借助进⾏:1.将图中所有⼊度为 0 的点,加⼊到队列中;2.
2025-12-22 09:43:16
844
原创 算法基础-图论基础
本文系统介绍了图论的基本概念、存储方式和常见算法。主要内容包括:1. 图的基本定义与分类(有向/无向图、简单/多重图、稠密/稀疏图);2. 图的存储方法(邻接矩阵、vector数组、链式前向星);3. 图的遍历算法(DFS和BFS);4. 最小生成树算法(Prim和Kruskal)及其应用实例。文章通过代码实现详细讲解了每种算法的具体应用,并提供了洛谷相关题目的参考解答,适合作为图论学习的入门资料。
2025-12-21 21:29:29
910
原创 算法基础(区间DP)
区间DP是一种动态规划方法,通过小区间推导大区间的解。本文介绍了几个经典区间DP问题:1. 回文字串问题(P1435)通过动态规划计算将字符串变为回文所需最少插入字符数;2. 零食售卖问题(P2858)利用区间DP求环形零食售卖顺序的最大收益;3. 石子合并问题(P1775和P1880)分别处理线性和环形情况,计算合并相邻石子的最小/最大代价;4. 数字合并游戏(P3146)通过相邻相同数字合并获得更高数字,求最大可能值。这些问题都采用区间DP思想,通过枚举区间长度、端点和分割点进行状态转移。
2025-12-21 12:24:36
553
原创 算法基础(背包问题)—分组背包和混合背包
本文介绍了三种背包问题的变体解法:1. 分组背包问题(洛谷P1757):将物品分组后每组最多选一件,使用二维DP状态表示,通过逆序遍历重量避免重复选择。2. 排兵布阵问题(洛谷P5322):将每个城堡视为一组,对敌方兵力排序后转化为分组背包问题,通过状态转移计算最大得分。3. 混合背包问题(洛谷P1833):处理包含01背包、完全背包和多重背包的混合情况,根据物品类型分别采用正序或逆序遍历。4. 多维费用背包(洛谷P1910):在01背包基础上增加伪装能力和工资两个维度,使用三维DP状态进行求解。各解法均通
2025-12-20 18:45:15
979
1
原创 算法基础(背包问题)-多重背包
摘要:本文解析了两个典型动态规划问题。多重背包问题要求在不超承重限制下最大化背包价值,提供常规解法和二进制优化解法(转换为01背包)。摆花问题则要求计算恰好摆放m盆花的方案数,属于多重背包求方案数模型,强调不可使用二进制优化以避免重复统计。两题均采用动态规划思想,通过状态转移方程求解,但需注意不同问题的特性(如优化限制)和初始化条件(如摆花问题中dp[0][0]=1的起始状态)。
2025-12-20 17:20:48
633
原创 算法基础(背包问题)-完全背包
本文介绍了完全背包问题的三种典型应用场景及解法。首先通过牛客网模板题讲解基础完全背包的两种状态(不超过容量和恰好装满),给出状态转移方程和初始化技巧。其次以洛谷P1616为例展示完全背包在采药问题中的简单应用。最后通过P2918和P5662两道题,分别演示了完全背包在"至少重量"限制和动态规划与贪心结合的场景下的解法。所有解法均包含状态表示、转移方程、初始化和空间优化思路,并附参考代码实现。文章通过具体题目展现了完全背包问题的灵活应用和变通解法。
2025-12-20 10:43:04
978
原创 算法基础-背包问题(01背包问题)
本文系统介绍了背包问题及其经典变体,重点解析了01背包问题的解题思路与实现方法。文章首先概述了背包问题的基本形式(在容量限制下选择物品使价值最大)及其六种主要变体(01背包、完全背包、多重背包等),指出01背包是其他变体的基础。通过牛客网例题详细讲解了01背包的两类解法:不要求装满和必须恰好装满的情况,包括状态表示、转移方程、初始化和空间优化技巧。随后展示了三个经典题目(采药、点菜、奶牛飞盘队)的代码实现,分别对应价值最大化、方案计数和模数约束等不同需求。全文强调动态规划在解决背包问题中的核心作用,通过状态
2025-12-20 09:13:18
962
原创 算法基础-路径类dp
本文介绍了路径类动态规划(DP)及其典型应用,包括矩阵最小路径和、迷雾森林、过河卒、方格取数等问题,以及经典线性DP问题如最长上升子序列(LIS)和最长公共子序列(LCS)。路径类DP通过状态表示、转移方程、初始化和填表顺序四个步骤解决矩阵中的行走规则问题。经典线性DP则通过优化状态表示(如四维降三维)和利用贪心+二分等技巧提升效率。文章提供了每个问题的详细解法、代码实现和复杂度分析,涵盖从入门到进阶的DP应用场景,帮助读者掌握动态规划的核心思想与解题方法。
2025-12-17 22:50:47
668
原创 算法基础-动态规划
本文系统讲解了动态规划算法的核心思想与解题方法。首先指出动态规划是算法学习中的难点,具有入门难、题型多、题目难三大特点。文章通过斐波那契数列问题,循序渐进地介绍了从记忆化搜索到递推式动态规划的转化过程,并详细解释了状态表示、状态转移方程和初始化等核心概念。随后,通过下楼梯、数字三角形、台阶问题、最大子段和、传球游戏和乌龟棋等经典例题,展示了如何运用动态规划解决实际问题。每个例题都包含完整的状态分析、转移方程推导和代码实现,其中特别强调了空间优化技巧。文章最后指出,动态规划虽然复杂,但通过大量练习和循序渐进的
2025-12-17 19:23:31
685
原创 算法基础-字典树
本文介绍了字典树(Trie树)的概念、作用及实现方法。字典树是一种高效存储和查询字符串的数据结构,利用公共前缀组织成树形结构。文章详细讲解了字典树的插入、查询字符串出现次数和前缀查询的实现代码,并提供了三个典型应用案例:1)模板题展示字典树基本操作;2)点名系统实现名字查重;3)利用字典树求解最大异或对问题。每个案例都包含题目解析和完整参考代码,展示了字典树在不同场景下的应用方式。
2025-12-16 15:02:56
718
原创 算法基础-字符串哈希
字符串哈希字符串哈希1.回忆:哈希函数与哈希冲突2.字符串哈希定义⼀个把字符串映射到整数的函数hash,这就是字符串哈希。说⽩了,就是将⼀个字符串⽤⼀个 整数表⽰。3.字符串哈希中的哈希函数在字符串哈希中,有⼀种冲突概率较⼩的哈希函数,将字符串映射成p进制数字:hashs) =si] ×pi=0 ∑n−1n−i−1modM其中p, 通常取质数131 或者13331。如果把哈希值定义为类型,在 C++ 中,溢出就会⾃动取模。
2025-12-16 14:03:37
621
原创 算法基础-并查集
本文介绍了并查集数据结构及其应用。主要内容包括:1. 基本概念:使用双亲表示法实现森林结构,支持集合查询、合并和判断操作。2. 实现方法:初始化时每个元素自成一个集合,通过路径压缩优化查询效率,时间复杂度接近O(1)。3. 典型应用:解决亲戚关系判断、水塘计数、程序约束验证等问题。4. 扩展形式:包括扩展域并查集(处理多种关系)和带权并查集(维护元素间距离信息)。5. 实际案例:给出团伙问题、食物链问题和银河英雄传说等经典题目的代码实现。并查集是一种高效处理集合合并与查询问题的数据结构,在算法竞赛和实际问题
2025-12-16 09:04:16
659
原创 算法基础-(单调队列)
本文介绍了单调队列及其应用。单调队列是一种元素单调递增或递减的双端队列,主要用于解决滑动窗口的最值问题。通过洛谷P1886和P2251两个例题,展示了如何使用单调队列高效求解滑动窗口内的最小值和最大值。文章详细解析了算法实现步骤:维护单调性队列、控制窗口范围、输出队首最值,并提供了完整的C++代码实现。该算法时间复杂度为O(n),适用于大规模数据(n≤10^6),是处理滑动窗口问题的经典方法。
2025-12-15 21:10:19
903
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅