首页
文章列表
标签墙
返回找工具啦
数据结构
共 36 篇文章
哈希表负载因子与冲突解决:开放寻址与链地址法的渐进复杂度对比
2026-07-14 14:42:16
哈希表负载因子与冲突解决:开放寻址与链地址法的渐进复杂度对比 哈希表是一种通过键(Key)直接访问值(Value)的数据结构。它的核心是哈希函数,负责将键映射到数组的索引位置。但不同的键可能映射到相同的索引,这被称为冲突。解决冲突主要有两种经典方法:开放寻址法和链地址法。负载因子是衡量哈希表拥挤程度
哈希表
负载因子
冲突解决
47
0
为什么哈希表查找是O(1):均匀散列假设与冲突处理的代价
2026-07-09 12:37:29
为什么哈希表查找是O1:均匀散列假设与冲突处理的代价 哈希表(Hash Table)是一种神奇的数据结构,它允许我们在平均情况下以常数时间 O1 的复杂度来查找、插入和删除数据。这是如何做到的?关键在于一个理想化的数学假设和一套精巧处理“冲突”的机制。 理解哈希表的基本原理 1. 创建一个固定大小的
哈希表
数据结构
算法复杂度
74
0
稀疏矩阵的压缩存储格式COO、CSR与CSC的内存效率对比
2026-07-02 20:37:47
稀疏矩阵的压缩存储格式COO、CSR与CSC的内存效率对比 理解问题:为什么要用压缩格式? 观察一个大型矩阵。你会发现,如果这个矩阵的大部分元素都是零,就像一个巨大的电子表格,但几乎都是空白,只在零星几个位置有数字。这就是“稀疏矩阵”。 存储整个矩阵会浪费大量内存。例如,一个 $10000 \tim
稀疏矩阵
压缩存储
COO格式
76
0
Redis Sorted Set实现排行榜的内存与性能优化
2026-06-15 00:43:47
Redis Sorted Set实现排行榜的内存与性能优化 Redis Sorted Set 有序集合,简称 ZSet 是实现排行榜功能的利器,它通过 score 为每个元素提供自动排序。然而,当数据量激增(如百万用户)或需要毫秒级响应时,直接使用往往面临内存占用过高和性能瓶颈。本指南将提供一套清晰
Redis
排行榜
内存优化
74
0
Elasticsearch的倒排索引与分词器原理
2026-05-31 16:24:13
Elasticsearch的倒排索引与分词器原理 要真正用好Elasticsearch,必须理解其核心数据结构——倒排索引,以及倒排索引构建的前提——分词器。本文将拆解这两个核心概念的工作原理,并展示它们如何协同工作,让你能高效地进行全文搜索。 理解倒排索引:从“图书目录”说起 想象一本没有目录的厚
Elasticsearch
倒排索引
分词器
64
0
Redis Stream的消费者组与消息确认机制
2026-05-31 04:14:19
Redis Stream的消费者组与消息确认机制 核心概念解析 Redis Stream是一种强大的数据结构,用于处理消息队列。要高效且安全地消费消息,必须理解其两大核心机制:消费者组和消息确认。 消费者组 允许你将消息流划分给多个消费者。每个消费者组独立维护一个“游标”,记录该组已消费到的位置。组
RedisStream
消费者组
消息确认
94
0
Python heapq模块实现优先队列与Top-K问题
2026-05-19 21:13:28
Python heapq模块实现优先队列与TopK问题 在处理数据时,我们常遇到两种典型需求:一是需要一个能自动排序并快速取出最值的数据结构(优先队列);二是从海量数据中快速找出前K大或前K小的元素(TopK问题)。Python内置的heapq模块正是解决这类问题的利器。 本文将用最直接的方式,带你
Python
heapq模块
优先队列
122
0
C++ STL容器的选择:vector、list、deque各自的优势场景
2026-05-17 06:12:23
C++ STL容器的选择:vector、list、deque各自的优势场景 编写高效C++程序的核心在于选对数据结构。标准模板库(STL)提供了序列容器 vector、list 和 deque,它们各有千秋。盲目使用不仅会导致性能下降,还会增加内存消耗。以下指南将帮助你根据具体场景做出最优选择。 1
C++
STL
容器
104
0
Redis ZSet底层跳表与压缩列表的切换条件
2026-05-10 21:27:16
Redis ZSet底层跳表与压缩列表的切换条件 Redis的有序集合(Sorted Set,简称ZSet)是一种非常强大的数据结构,它结合了哈希表和跳表的优点,既能通过键快速定位,又能对成员进行排序。ZSet的底层实现并非一成不变,它会根据数据规模和元素大小,在压缩列表(ziplist)和跳表(s
Redis
ZSet
跳表
128
0
C++ std::array和C数组的区别:为什么推荐用std::array
2026-05-10 01:26:49
C++ std::array和C数组的区别:为什么推荐用std::array C 数组是 C 和 C++ 中的基础数据结构,但 C++ 标准库提供了 std::array,一个更现代、更安全的替代品。本文将对比两者,并解释为什么在 C++ 中优先选择 std::array。 什么是 C 数组? C
C++
std::array
C数组
120
0
Redis OBJECT ENCODING查看数据结构底层编码类型
2026-05-07 12:16:05
Redis 中的 5 种基础数据类型(String、List、Hash、Set、ZSet)在底层实现上并不单一。为了平衡内存占用与读写性能,Redis 会根据数据量的大小、元素的长度等因素,自动在多种底层数据结构(编码类型)之间进行切换。理解这些编码类型是进行 Redis 性能调优和内存优化的关键。
Redis
数据结构
底层编码
131
0
Python字典的底层实现:为什么Python3.7+字典是有序的
2026-05-04 10:18:11
Python字典的底层实现:为什么Python3.7+字典是有序的 在Python 3.7之前,字典是无序的,遍历字典的顺序取决于键的哈希值和碰撞情况。从Python 3.7开始,字典不仅变得有序,而且内存占用减少了20%25%。这一变化的核心在于底层实现从“稀疏数组”转变为“紧凑数组”。理解这一机
Python字典
底层实现
有序字典
124
0
Java Deque双端队列实现栈与队列的最佳实践
2026-05-04 04:16:05
Java Deque双端队列实现栈与队列的最佳实践 Java中的 Deque Double Ended Queue 接口是一种支持在两端插入和删除元素的线性集合。它不仅实现了标准的队列(FIFO)功能,还能完美模拟栈(LIFO)操作。相比于早期的 Stack 类和 Vector,ArrayDeque
Java
数据结构
双端队列
108
0
Python weakref.WeakKeyDictionary在缓存键对象回收时的行为
2026-04-29 16:22:32
Python weakref.WeakKeyDictionary在缓存键对象回收时的行为 1. WeakKeyDictionary基本概念 创建 weakref.WeakKeyDictionary 是Python标准库中提供的一种特殊字典,它使用弱引用来存储键。与普通字典不同,当键对象没有被其他引用
Python
弱引用
缓存
115
0
Python collections.deque与list在队列操作中的性能对比
2026-04-26 18:14:46
Python collections.deque与list在队列操作中的性能对比 在Python中,处理数据序列时,list 是最常用的数据结构。然而,当涉及到队列操作——即先进先出(FIFO)的场景时,内置的 list 往往不是最佳选择。Python 标准库中的 collections.deque
Python
collections.deque
list
139
0
Go语言Map的扩容机制与rehash过程的并发安全性
2026-04-21 06:13:21
Go语言Map的扩容机制与rehash过程的并发安全性 Go语言中的 map 是开发中最常用的数据结构之一,但其内部实现机制涉及复杂的内存管理和并发控制。理解其扩容与迁移过程,对于编写高性能、高并发程序至关重要。 1. 理解 Map 的基础结构 在深入扩容机制之前,必须先了解 Go map 的核心数
Go语言
Map
扩容机制
129
0
Go语言sync.Map的read与dirty双map结构设计
2026-04-20 16:26:17
Go语言sync.Map的read与dirty双map结构设计 在Go语言中,并发安全的数据结构一直是开发者关注的问题。sync.Map作为标准库提供的并发安全map实现,其核心创新在于read与dirty双map结构设计。这种设计巧妙地平衡了读多写少场景下的性能问题。 1. 背景与问题 在Go 1
Go语言
sync.Map
并发安全
108
0
R 数据结构:向量、矩阵、数据框
2026-04-19 06:25:59
R 数据结构:向量、矩阵、数据框 R 语言处理数据的核心在于掌握其基础数据结构。理解并熟练使用向量、矩阵和数据框,是进行复杂数据分析的前提。以下指南将带你直接通过代码掌握这三种结构的创建与操作。 1. 向量 向量是 R 中最基本的数据结构,可以将其理解为一组有序的元素集合。所有向量中的元素必须是相同
R语言
数据结构
向量
107
0
C++ STL 容器:vector、list、map 的使用
2026-04-18 19:24:25
C++ STL 容器:vector、list、map 的使用 C++ 标准模板库(STL)提供了三种最核心的容器:vector(动态数组)、list(双向链表)和 map(映射)。掌握它们的使用是编写高效 C++ 代码的基础。以下指南将直接展示如何在代码中应用它们,涵盖定义、增删改查及适用场景。 1
C++
STL
容器
106
0
Java 集合框架:ArrayList 与 LinkedList 的性能对比
2026-04-15 03:26:53
Java 集合框架:ArrayList 与 LinkedList 的性能对比 在 Java 开发中,ArrayList 和 LinkedList 是 List 接口最常用的两个实现类。尽管它们存储数据的方式相似,但在底层原理和性能表现上却有着天壤之别。选择错误的集合类型可能会导致程序在处理大量数据时
Java
集合框架
性能对比
95
0
1
2
下一页