一、时间复杂度基础
- 时间复杂度是衡量算法效率的指标,用大O表示法(如O(1)、O(n)、O(n^2))。数值越小,算法效率越高。
- O(1):无循环的简单操作,如赋值、基本运算、数组下标访问。
- O(n):单层循环操作,时间消耗随n线性增长。
- O(n^2):嵌套双层循环操作,时间消耗随n平方增长。
二、哈希表底层结构与查找效率
- 哈希表底层物理结构是数组,利用数组下标访问的O(1)特性,实现哈希表查找的高效性。
三、哈希存储与哈希函数
- 存储数据时,通过**哈希函数(取模运算)**将数据映射到数组下标。例如数组长度为8时,数字5直接存在下标5的位置;数字8通过8 \% 8 = 0,存在下标0的位置。
四、哈希冲突
- 定义:不同数据经哈希函数映射后得到相同下标,导致冲突。如8、16、32对8取模都得0。
- 解决方法(链地址法):将哈希冲突的元素串联成链表,哈希表升级为链表数组(数组每个元素是链表头指针)。
五、负载因子与Rehash
- 负载因子:公式为 元素个数 / 数组长度 。当负载因子过大(如大于5),哈希表会出现大量长链表,查找效率退化。
- Rehash(重新哈希):数组扩容为原来的2倍,所有元素重新通过哈希函数映射,分散链表元素,避免长链表。
- 渐进式Rehash:避免一次性Rehash导致的性能波动,将Rehash过程分散到程序运行的多个阶段,逐步完成元素重新映射。
六、哈希表长度的优化
- 哈希表长度设计为2的幂,利用**位运算(与运算)**优化取模操作。因为x \% 2^n等价于x \& (2^n - 1),位运算效率高于取模运算。
面试常见问题之剖析哈希表
张小明
前端开发工程师
从中心化到混合架构:数字资产交易所的技术革命与生态重构
引言:一场静默的金融基础设施革命当全球数字资产市值突破5万亿美元大关,当Coinbase单日交易量超越纽约证券交易所,当Solana链上衍生品合约规模直追传统金融市场——这场由区块链技术驱动的金融革命,正在重塑人类社会的价值交换方式…
2.运放选型调试方法论
一般学习过模电的同学,懂负反馈、虚短虚断、会计算,但是还是不会具体应用。接下来先根据需求锁定关键参数,再通过规范调试排除问题。一、 运放选型:从需求出发,按优先级筛选参数选型的核心是 **“按需取舍”—— 没有万…
基于STM32单片机汽车防盗报警GSM短信GPS北斗定位地图APP设计37(设计源文件+万字报告+讲解)(支持资料、图片参考_相关定制)_文章底部可以扫码**
基于STM32单片机汽车防盗报警GSM短信GPS北斗定位地图APP设计37(设计源文件万字报告讲解)(支持资料、图片参考_相关定制)_文章底部可以扫码 STM32单片机电动车防盗报警GSM短信上报GPS定位37 产品功能描述: 本系统由STM32F103C8T6单片机核心板、…
SpringBoot学习:整合Quartz实现定时任务
在应用开发中,经常会遇到需要定时执行操作的场景,例如日志清理、邮件发送、订单处理等。SpringBoot支持多种定时任务实现方式,包括Timer、ScheduledExecutorService、SpringTask、Quartz以及xxljob等。本文将重点介绍如何使用Quartz框架实现可…
Kubernetes平滑部署全景实战指南
在Kubernetes中实现平滑部署(亦称无损发布或零宕机部署)的核心原理在于:必须确保新Pod已启动并通过就绪检查、能够接收流量后,再终止旧Pod。若这一顺序被打破,则可能引发服务闪断、请求丢失或短暂不可用。 一、实现平…
什么网盘能够解决超大文件传输难题?
一、超大文件传输为何成为难题?现代社会的数字化程度从未像今天这样深刻影响我们的生活和工作。先做一个简单的思维试验:每次需要传输视频文件、设计素材、数据库备份或者超大文档时,你是不是曾经历过以下这些问题?电子邮件容量有…