数据结构与稀疏矩阵操作基础
1. 二叉搜索树
不同的二叉搜索树(Binary Search Tree, BST)可以关联同一组元素。例如,图中展示的两个 BST 与另一个 BST 具有相同的元素集,但形态有所不同。其中一个看起来更“伸展”,另一个则更“紧凑”,这是因为它们的高度不同。
节点的高度定义为该节点到树的根节点的唯一路径的长度。而二叉搜索树的高度是其所有节点高度的最大值。搜索元素所需的时间与树的高度相关, bfs_search() 函数的时间复杂度为 $O(h)$,其中 $h$ 是二叉搜索树的高度。
如果二叉搜索树的高度为 $O(log N)$($N$ 是 BST 中的元素数量),则称该树是平衡的。在平衡的二叉搜索树中,访问、插入、删除和搜索操作的平均时间复杂度为 $O(log N)$。平衡的二叉搜索树适合存储需要频繁访问和更新的数据,并且在许多图算法中都有应用。
2. 二叉堆
在很多应用中,需要找出集合中的最大或最小元素。例如,在 Dijkstra 算法中,计算加权图中的最短路径时,每一步都需要从未访问的节点中选择距离源节点最近的节点。
如果将未访问节点列表存储在数组中,每次查找最小距离元素都需要扫描整个数组,时间复杂度为 $O(N)$。若将数组按距离升序排序,虽然可以直接获取最小距离元素,但每次更新节点距离后都需要重新排序,时间复杂度为 $O(N log N)$,比未排序数组的线性搜索更差。
此时,可以使用二叉堆(Binary Heap)。二叉堆是一种数据结构,它保证以 $O(1)$ 的时间复杂度访问和提取集合中的最小(或最大)元素,并需要 $O(log
超级会员免费看
订阅专栏 解锁全文

1528

被折叠的 条评论
为什么被折叠?



