From 7f1c31fb7f71585ccf6de003ec2adf8ff5988172 Mon Sep 17 00:00:00 2001 From: sbofgayschool <1532422769@qq.com> Date: Sun, 20 Dec 2020 16:22:30 +0800 Subject: [PATCH] Fixed typos as suggested. --- docs/ds/binary-heap.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/docs/ds/binary-heap.md b/docs/ds/binary-heap.md index 03fc97ee..129e3986 100644 --- a/docs/ds/binary-heap.md +++ b/docs/ds/binary-heap.md @@ -137,7 +137,7 @@ $$ 这个问题可以被进一步抽象成:动态维护一个序列上第 $k$ 大的数,$k$ 值可能会发生变化。 -对于此类问题,我们可以使用 **对顶堆** 这一技巧予以解决(可以避免写权值线段树或BST带来的繁琐)。 +对于此类问题,我们可以使用 **对顶堆** 这一技巧予以解决(可以避免写权值线段树或 BST 带来的繁琐)。 对顶堆由一个大根堆与一个小根堆组成,大根堆维护第 $k$ 大以及之前的数,小根堆维护第 $k$ 大之后的数。 @@ -147,9 +147,9 @@ $$ - 插入元素:若插入的元素小于等于大根堆堆顶元素,则将其插入大根堆,否则将其插入小根堆,然后维护对顶堆; - 查询第 $k$ 大元素:大根堆堆顶元素即为所求; - 删除第 $k$ 大元素:删除大根堆堆顶元素,然后维护对顶堆; -- $k$ 值 $+1/-1$ :根据新的 $k$ 值直接维护对顶堆; +- $k$ 值 $+1/-1$ :根据新的 $k$ 值直接维护对顶堆。 -显然,查询查询第 $k$ 大元素的时间复杂度时 $O(1)$ 的。由于插入、删除或调整 $k$ 值后,大根堆的大小与期望的 $k$ 值最多相差 $1$,故每次维护最多只需对大根堆与小根堆中的元素进行一次调整,因此,这些操作的时间复杂度都是 $O(\log n)$ 的。 +显然,查询第 $k$ 大元素的时间复杂度是 $O(1)$ 的。由于插入、删除或调整 $k$ 值后,大根堆的大小与期望的 $k$ 值最多相差 $1$,故每次维护最多只需对大根堆与小根堆中的元素进行一次调整,因此,这些操作的时间复杂度都是 $O(\log n)$ 的。 ??? "参考代码" ```cpp @@ -169,13 +169,13 @@ $$ priority_queue, greater > b; while (scanf("%d", &x) && x) { - // 若为查询并删除操作,输出并删除小根堆堆顶元素 + // 若为查询并删除操作,输出并删除大根堆堆顶元素 if (x == -1) { printf("%d\n", a.top()); a.pop(); } - // 若为插入操作,根据小根堆堆顶的元素值,选择合适的堆进行插入 + // 若为插入操作,根据大根堆堆顶的元素值,选择合适的堆进行插入 else { if (a.empty() || x <= a.top()) -- 2.11.0