摘要: # 最近点对问题 **问题描述**:在 $n \ge 2$ 个点的集合 $Q$ 中寻找最近点对的问题,“最近”指的是欧几里得距离最小,即点 $p_1=(x_1, y_1)$ 和 $p_2=(x_2, y_2)$ 之间的欧几里得距离 $d=\sqrt{(x_1-x_2)^2+(y_1-y_2)^2}$ 阅读全文
posted @ 2023-06-29 21:45 gengduc 阅读(312) 评论(0) 推荐(0) 编辑
摘要: 本章将介绍图的表示和图的搜索。图的搜索指的是跟随图中的边来访问图中的每个结点。图搜索是整个图算法领域的核心。22.1介绍图的两种表示方法:邻接链表和邻接矩阵。22.2介绍广度优先搜索(BFS)。22.3介绍深度优搜索(DFS)。 # 22.1 图的表示 对于图 $G=(V, E)$,有用两种标准表示 阅读全文
posted @ 2023-06-29 21:45 gengduc 阅读(66) 评论(0) 推荐(0) 编辑
摘要: 21.1节描述不相交集合数据结构支持的各种操作,并给出一个简单的应用。21.2节使用一种简单链表结构来实现不相交集合。21.3节使用有根树来实现,使用树表示的运行时间理论上好于线性时间,然而对于所有的实际应用它确是线性的。 # 21.1 不相交集合的操作 一个**不相交集合数据结构**(disjoi 阅读全文
posted @ 2023-06-29 21:44 gengduc 阅读(49) 评论(0) 推荐(0) 编辑
摘要: 本章主要涉及理论分析,感觉第3版讲的不是很好(也有可能是翻译的语句不通顺),这里搬运了知乎上的文章。 - https://zhuanlan.zhihu.com/p/536470404 - https://zhuanlan.zhihu.com/p/577232877 - https://zhuanla 阅读全文
posted @ 2023-06-29 21:44 gengduc 阅读(184) 评论(0) 推荐(0) 编辑
摘要: 求解最优化问题时候通常要经过一串步骤,每一步都有多种选择。对于很多问题来说,用动态规划求最优解就是杀鸡用牛刀,可以使用更简单的算法。 **贪心算法**(greedy algorithm)在每一步都做出当时看起来是最佳的选择。也就是说,它综述做出局部最优的选择,希望通过局部最优解得到全局最优解。 ** 阅读全文
posted @ 2023-06-29 21:43 gengduc 阅读(68) 评论(0) 推荐(0) 编辑
摘要: **动态规划**(dynamic programming)的思想是**分治思想**和**解决冗余**。 - 与分治法相似的是 - 将原问题**分解为若干个子问题**,先求解子问题,然后从这些子问题的解得到原问题的解。 - 与分治法不同的是 - 经分解的子问题**往往不是相互独立的**。若用分治法来解 阅读全文
posted @ 2023-06-29 21:43 gengduc 阅读(71) 评论(0) 推荐(0) 编辑
摘要: 本章讨论通过扩展红黑树构造出的两种数据结构。14.1节介绍一种支持一般动态集合上顺序统计操作的数据结构。通过这种数据结构,我们可以快速地找到一个集合中的第 $i$ 小的数,或给出一个指定元素在集合的全序中的位置。14.2节抽象出数据结构的扩张过程,并给出一个简化红黑树扩张的定理。14.3节使用这个定 阅读全文
posted @ 2023-06-29 21:42 gengduc 阅读(148) 评论(0) 推荐(0) 编辑
摘要: 第12章介绍了一棵高度为$h$的二叉搜索树,它可以支持任何一种基本动态集合操作,如`SEARCH`、`PREDECESSOR`、`SUCCESSOR`、`MINIMUM`、`MAXIMUM`、`INSERT`和`DELETE`等,其时间复杂度均为$\Omicron(h)$。因此,如果搜素树的高度较低 阅读全文
posted @ 2023-06-29 21:41 gengduc 阅读(92) 评论(0) 推荐(0) 编辑
摘要: 一个包含 $n$ 个元素的集合中的第 $i$ 个**顺序统计量**指集合中的第 $i$ 小的元素。**最小值**是第 $1$ 个顺序统计量($i= 1$),**最大值**是第 $n$ 个顺序统计量($i = n$)。 9.1节将讨论从集合中找出最小值和最大值的问题。9.2节将分析一个实用的算法,它在 阅读全文
posted @ 2023-06-29 21:40 gengduc 阅读(31) 评论(0) 推荐(0) 编辑
摘要: # 7.1 快速排序的描述 对一个典型的子数组$A[p..r]$进行快速排序的三步分治过程: - **分解**:数组$A[p..r]$被划分为两个(可能为空)的子数组$A[p..q-1]$和$A[q+1..r]$,使得$A[p..q-1]$中的每一个元素都小于等于$A[q]$,而$A[q+1..r] 阅读全文
posted @ 2023-06-29 21:39 gengduc 阅读(50) 评论(0) 推荐(0) 编辑
摘要: # 前言 此前我们已经学习了几种$\Omicron(n \log n)$的排序算法,这些排序算法都有一个有趣性质,在排序的最终结果中,各元素的次序依赖于它们之间的比较,我们将这类排序称为**比较排序(comparison sort)**。 8.1节将要证明**对包含$n$个元素的输入序列,在最坏情况 阅读全文
posted @ 2023-06-29 21:38 gengduc 阅读(21) 评论(0) 推荐(0) 编辑
摘要: # 6.1 堆及堆的性质 **(二叉)堆**可以看作完全二叉树,其存储结构通常是**数组**,表示堆的数组A中有两个重要属性:$A.length$表示数组元素的个数;$A.heap-size$表示有多少个堆元素在数组中,$0 \le A.heap-size \le A.length$。 ![Figu 阅读全文
posted @ 2023-06-29 21:37 gengduc 阅读(31) 评论(0) 推荐(0) 编辑
摘要: # 回忆 在2.3.1中,归并排序使用了分治法。在分治法中,当递归地求解一个问题,在每层递归中执行如下三步骤: - 分解(Divide):将问题划分为子问题,子问题的形式与原问题一样,只是规模更小。 - 解决(Conquer):递归地求解出子问题。如果子问题的规模足够小,则停止递归,直接求解。 - 阅读全文
posted @ 2023-06-29 21:36 gengduc 阅读(35) 评论(0) 推荐(0) 编辑