当前位置: 首页 > news >正文

有 100W 个数,有一个函数是可以高效查找并删除某个数,问应该用什么数据结构去存这 100W 个数

问题

有 100W 个数,有一个函数是可以高效查找并删除某个数,问应该用什么数据结构去存这 100W 个数

我的回答

首先,哈希表(HashSet/HashMap)是一个很好的选择。在平均情况下,哈希表的查找和删除操作时间复杂度都是O(1),非常高效。对于100万个数据,现代计算机的内存完全足够存储哈希表。不过哈希表有个缺点,就是在最坏情况下(哈希冲突严重时),性能可能退化到O(n),但这种情况在实际应用中比较少见,现代哈希表实现通常会采用各种策略来减少冲突。

另一个选择是平衡二叉搜索树,比如红黑树、AVL树,或者C++中的std::set、Java中的TreeSet。这些数据结构的查找和删除操作时间复杂度都是O(log n),对于100万个数据,大约需要log₂(10⁶)≈20次比较,也是相当高效的。平衡树的优势在于它能保证最坏情况下的性能,而且可以保持元素的有序性,如果后续操作需要有序访问数据,这会很有用。

如果数据范围有限且比较集中,比如都是0到10⁷范围内的整数,那么位图(Bitmap)也是个不错的选择。位图用一个bit位表示一个数是否存在,查找和删除都是O(1)的,而且空间效率极高。不过位图只适用于数据范围有限且没有重复的情况。如果数据有重复,可以用计数位图(每个位置不是0/1,而是计数器)

如果内存有限而且数据量特别大,可以考虑布隆过滤器(Bloom Filter),它是一种空间效率很高的概率型数据结构,用于判断一个元素是否在集合中。不过布隆过滤器有一定的误判率,而且不支持删除操作(除非使用计数布隆过滤器)。

http://www.dtcms.com/a/352002.html

相关文章:

  • 文献阅读笔记【雷达信号分选】:基于机器学习的雷达信号分选方法综述
  • 在python 代码中调用rust 源码库操作步骤
  • Excel跨sheet检索提取信息
  • 最简洁yolov8 C++配置教程
  • Leetcode+Java+dpI
  • 汇智焕彩,聚势创新 - openKylin 2.0 SP2正式发布!
  • 企业云办公安全指南:如何构建高效无忧的云办公环境?
  • 在Godot中为您的游戏添加并控制游戏角色的完整技术指南
  • 集成电路学习:什么是MobileNet
  • 在数据同步过程中,RustFS如何平衡RDMA的高吞吐和金融级数据校验的开销?
  • 深分页优化:高效解决方案全解析
  • golang7 数组切片
  • RocketMQ 消息存储机制-消息刷盘
  • TorchInductor - Autotune
  • 【牛客刷题】链表指定区间反转:两种高效解法详解,轻松掌握面试高频题!
  • 互联网医院品牌定位与差异化策略
  • 地下蚁国 全DLC(Empires of the Undergrowth)免安装中文版 在蚂蚁的世界里建立你的帝国
  • 马斯克的「巨硬」: MacroHard
  • 机器学习模型可解释库的介绍:Shapash (一)
  • TRO冻结卷土重来?Keith律所代理Ronald Kuang版权再维权
  • Spring Bean 生命周期高阶用法:从回调到框架级扩展
  • Android系统学习2——Android.Utils.Log模块讨论
  • Android 系统属性添加篇
  • StandardScaler()进行0,1标准化时fit_transform与transform的区别
  • MIME类型与文件上传漏洞 - 网络安全视角
  • 【Jetson】基于llama.cpp部署gpt-oss-20b(推理与GUI交互)
  • 多地闭店上热搜,中产的白月光无印良品怎么了?
  • 项目管理进阶——项目经理任职资格评定聘任及考核管理办法
  • 支持向量机(SVM)核心概念总结
  • Tensor常见操作