标签: 数据结构

16 个内容

笔记(15)

Go 语言中 map 的迭代顺序是不确定的,这是故意设计以避免开发者依赖特定顺序。底层实现采用哈希表,迭代顺序受哈希函数和键分布影响。若需有序遍历,应维护单独排序的键切片。迭代期间修改 map,新增或删除的键可能被访问或跳过。

Elliot Yang·
217 浏览

CRDT 是一种用于分布式系统的无冲突数据结构,基于交换律、结合律和幂等律,无需中心协调即可实现最终一致性。分为状态型(CvRDT)和操作型(CmRDT),各有优缺点。工业实现面临数据膨胀、因果维护等挑战,需采用混合逻辑时钟、向量时钟等方案解决。未来发展趋势包括机器学习驱动、硬件加速和形式化验证。

Elliot Yang·
136 浏览

堆是满足堆序性质的完全二叉树,常用数组实现。核心操作优化包括插入的`heapifyUp`修正和删除的空堆检测。应用广泛,如优先队列和Top K问题。优化手段包括Floyd建堆法和TypedArray。存在二叉堆、斐波那契堆等变体,面临并发、内存管理等挑战。未来趋势包括持久化堆和GPU加速。

Elliot Yang·
124 浏览

二叉树是重要的树形结构,包括满二叉树、完全二叉树和二叉搜索树。二叉搜索树在平衡时性能最佳,不平衡时退化。AVL树通过旋转保持平衡,查询性能优于普通二叉搜索树。红黑树、Treap和B树等新型结构适用于不同场景。序列化和优化是实际应用中的关键问题。

Elliot Yang·
101 浏览

链表反转是数据结构基础,涉及指针操作、递归思维。本文解析了双指针迭代(O(1)空间)和递归(O(n)空间)两种主流方案,对比优劣并探讨工程实践要点及进阶问题,强调生产环境优先选择迭代法。

Elliot Yang·
91 浏览

算法复杂度分析是工程师的核心技能,涵盖时间与空间复杂度。Big O notation描述函数增长上界,如O(1)、O(log n)、O(n)等。工程实践需考虑常数因子、缓存和空间换时间。前沿趋势包括量子计算影响、近似算法与异构计算优化。最终目标是编写高效代码,避免性能问题。

Elliot Yang·
173 浏览

本文深入解析 Rust 二叉堆实现,涵盖数学本质、工程优化和工业级特性。重点包括泛型、迭代优化、内存布局、动态调整、性能测试、线程安全及常见问题解决。探讨了标准库BinaryHeap的优化策略及未来演进方向,如并行堆、持久化堆和GPU加速堆。

Elliot Yang·
127 浏览

本文深入解析了 Rust 链表反转,强调了内存模型、所有权系统和工程实践。阐述了 Rust 中链表节点的设计,对比了智能指针的选择,剖析了经典反转算法,并探讨了安全操作、测试、并发、性能优化等实践要点,以及未来发展方向。

Elliot Yang·
122 浏览

本文介绍了使用 Rust 实现二叉堆(MinHeap)的数据结构。利用 Rust 的 Vector 作为底层存储,实现了`push`(上浮)和 `pop`(下沉)操作来维护堆的完全二叉树和堆性质。代码示例展示了最小堆的实现细节,包括`bubble_up`和`bubble_down`算法。

Elliot Yang·
103 浏览

本文对比了图遍历算法DFS和BFS。DFS的优点是空间复杂度低、能快速找到解,但可能非最优、易死循环;BFS能找到最短路径、遍历所有可达节点,但空间复杂度高、不适合带权重图。此外,文章还提及React Fiber使用了类似的单链表树遍历算法。

Elliot Yang·
88 浏览

Trie树(字典树)是一种用于高效字符串操作的数据结构,应用于自动补全、拼写检查等。核心操作包括插入、查询、删除和前缀查询,时间复杂度为O(m),m为字符串长度。为解决空间复杂度问题,可采用压缩或优化结构。文章还包含Rust代码示例。

Elliot Yang·
103 浏览

图是一种由顶点和边组成的非线性数据结构。顶点也称为节点,边是连接图中任意两个节点的线或弧。图由顶点集合(V)和边集合(E)组成,表示为G(E, V)。

Elliot Yang·
96 浏览

本文介绍了二叉树的基本概念和几种特殊类型的二叉树,包括完全二叉树、满二叉树、二叉搜索树和AVL树。讨论了它们的定义、性质和节点关系,以及在连续存储方式下的节点下标关系。重点在于理解不同类型二叉树的特性和适用场景。

Elliot Yang·
102 浏览

本文介绍了堆这种特殊的树形数据结构,它是一种基于数组的完全二叉树,常用于实现优先级队列。堆分为最大堆和最小堆,分别保证根节点为最大值或最小值。文章提供了最大堆的 TypeScript 实现,包括插入元素和弹出元素的 `heapifyUp` 和 `heapifyDown` 操作。

Elliot Yang·
142 浏览

本文是为面试准备的礼物,汇总了常见的JS手写题和八股文。手写题包括字符串转换对象、类型体操科里化、汉明距离总和、股票买卖、链表随机节点、二叉树迭代遍历、整数转罗马数字、字母异位词分组等。重点讨论了JS浮点数运算不精确的原因和解决方法,涉及IEEE 754标准、精度丢失等,并解释了Number.MAX_SAFE_INTEGER等特殊值。

Elliot Yang·
98 浏览

动态(1)

E
Elliot Yang
公开

A Bloom filter is a data structure designed to tell you, rapidly and memory-efficiently, whether an element is present in a set.

The price paid for this efficiency is that a Bloom filter is a probabilistic data structure: it tells us that the element either definitely is not in the set or may be in the set.

浏览:139点赞:0