Loading docs/ds/heap.md→docs/ds/heap/binary-heap.md +2 −32 Original line number Diff line number Diff line ## 堆 堆是一种数据结构,维护一个数的集合(或者,一个支持比较的元素的集合)。 主要功能有:insert, getmin, deletemin, decreasekey。 注意:简单起见,我们这里讨论的都是维护最小值的堆,也叫小根堆,与之相对的叫做大根堆。 一些功能强大的堆还能(高效地)支持 merge 等操作。 一些功能更强大的堆还支持可持久化,也就是对任意历史版本进行查询或者操作,产生新的版本。 ## 堆的分类 一个有趣的事实是,这些堆都是用基于树的数据结构实现的。 在 NOIP 中,我们只要求一个能支持主要操作的堆就行,也就是二叉堆。 - 二叉堆_(binary heap)_ 最基础的堆,不支持 merge 和可持久化,所有操作的复杂度都是 $O(\log n)$ 的。 - 二项堆_(binomial heap)_ 支持 merge 的堆,(也能可持久化),所有操作的复杂度都是 $O(\log n)$ 。 - Fib 堆_(Fibonacci heap)_ 除了不能可持久化,支持全部功能,而且除了 deletemin 以外都是均摊 $O(1)$ 的。 ## 二叉堆 ### 结构 Loading docs/ds/heap/heap.md 0 → 100644 +24 −0 Original line number Diff line number Diff line 堆是一种数据结构,维护一个数的集合(或者,一个支持比较的元素的集合)。 主要功能有:insert, getmin, deletemin, decreasekey。 注意:简单起见,我们这里讨论的都是维护最小值的堆,也叫小根堆,与之相对的叫做大根堆。 一些功能强大的堆还能(高效地)支持 merge 等操作。 一些功能更强大的堆还支持可持久化,也就是对任意历史版本进行查询或者操作,产生新的版本。 ## 堆的分类 | 操作\数据结构 | 配对堆 | 二叉堆 | 左偏树 | 二项堆 | 斐波那契堆 | | :-----------------------------: | :----------------------------------------------------------: | :------------------: | :------------------: | :------------------: | -------------------- | | 插入(insert) | $ O(1)$ | $ O(\log n)$ | $ O(\log n)$ | $O(1)$ | $ O(1)$ | | 查询最小值(find-min) | $ O(1)$ | $ O(1)$ | $ O(1)$ | $O(\log n)$ | $O(1)$ | | 删除最小值(delete-min) | $ O(\log n)$ | $ O(\log n)$ | $ O(\log n)$ | $O(\log n)$ | $ O(\log n)$ | | 合并 (merge) | $ O(1)$ | $ O(n)$ | $ O(\log n)$ | $O(\log n)$ | $ O(1)$ | | 减小一个元素的值 (decrease-key) | $o(\log n) (下界\Omega(\log \log n) ,\\\\上界 O(2^{2\sqrt{\log \log n}}) )$ | $ O(\log n)$ | $ O(logn)$ | $O(\log n)$ | $ O(1)$ | | 是否支持可持久化 | $\times$ | $\checkmark$ | $\checkmark$ | | $\times$ | 一个有趣的事实是,这些堆都是用基于树的数据结构实现的。 在 OI 中,最常用的堆是二叉堆,习惯上不加限定提到“堆”时往往也指二叉堆。 No newline at end of file docs/ds/heap/pairing-heap.md 0 → 100644 +2 −0 Original line number Diff line number Diff line mkdocs.yml +10 −4 Original line number Diff line number Diff line Loading @@ -151,7 +151,10 @@ nav: - 链表: ds/linked-list.md - 哈希表: ds/hash.md - 并查集: ds/dsu.md - 堆: ds/heap.md - 堆: - 堆简介: ds/heap/heap.md - 二叉堆: ds/heap/binary-heap.md - 配对堆: ds/heap/pairing-heap.md - 块状数据结构: - 分块思想: ds/square-root-decomposition.md - 块状链表: ds/block-list.md Loading Loading @@ -256,7 +259,10 @@ nav: # Theme theme: name: 'material' name: null custom_dir: 'mkdocs-material/material' static_templates: - 404.html language: 'zh' palette: primary: 'white' Loading @@ -281,12 +287,12 @@ extra: copyright: '<a href="https://creativecommons.org/licenses/by-sa/4.0/deed.zh">CC BY-SA 4.0</a> 和 <a href="https://github.com/zTrix/sata-license">SATA</a>' pagetime: 'on' manifest: 'manifest.webmanifest' githash: '' githash: 'ed60f96' extra_javascript: - 'https://cdnjs.loli.net/ajax/libs/Han/3.3.0/han.min.js' - '_static/js/extra.js?v=10' - 'https://cdnjs.loli.net/ajax/libs/mathjax/2.7.5/MathJax.js?config=TeX-MML-AM_CHTML' extra_css: Loading Loading
docs/ds/heap.md→docs/ds/heap/binary-heap.md +2 −32 Original line number Diff line number Diff line ## 堆 堆是一种数据结构,维护一个数的集合(或者,一个支持比较的元素的集合)。 主要功能有:insert, getmin, deletemin, decreasekey。 注意:简单起见,我们这里讨论的都是维护最小值的堆,也叫小根堆,与之相对的叫做大根堆。 一些功能强大的堆还能(高效地)支持 merge 等操作。 一些功能更强大的堆还支持可持久化,也就是对任意历史版本进行查询或者操作,产生新的版本。 ## 堆的分类 一个有趣的事实是,这些堆都是用基于树的数据结构实现的。 在 NOIP 中,我们只要求一个能支持主要操作的堆就行,也就是二叉堆。 - 二叉堆_(binary heap)_ 最基础的堆,不支持 merge 和可持久化,所有操作的复杂度都是 $O(\log n)$ 的。 - 二项堆_(binomial heap)_ 支持 merge 的堆,(也能可持久化),所有操作的复杂度都是 $O(\log n)$ 。 - Fib 堆_(Fibonacci heap)_ 除了不能可持久化,支持全部功能,而且除了 deletemin 以外都是均摊 $O(1)$ 的。 ## 二叉堆 ### 结构 Loading
docs/ds/heap/heap.md 0 → 100644 +24 −0 Original line number Diff line number Diff line 堆是一种数据结构,维护一个数的集合(或者,一个支持比较的元素的集合)。 主要功能有:insert, getmin, deletemin, decreasekey。 注意:简单起见,我们这里讨论的都是维护最小值的堆,也叫小根堆,与之相对的叫做大根堆。 一些功能强大的堆还能(高效地)支持 merge 等操作。 一些功能更强大的堆还支持可持久化,也就是对任意历史版本进行查询或者操作,产生新的版本。 ## 堆的分类 | 操作\数据结构 | 配对堆 | 二叉堆 | 左偏树 | 二项堆 | 斐波那契堆 | | :-----------------------------: | :----------------------------------------------------------: | :------------------: | :------------------: | :------------------: | -------------------- | | 插入(insert) | $ O(1)$ | $ O(\log n)$ | $ O(\log n)$ | $O(1)$ | $ O(1)$ | | 查询最小值(find-min) | $ O(1)$ | $ O(1)$ | $ O(1)$ | $O(\log n)$ | $O(1)$ | | 删除最小值(delete-min) | $ O(\log n)$ | $ O(\log n)$ | $ O(\log n)$ | $O(\log n)$ | $ O(\log n)$ | | 合并 (merge) | $ O(1)$ | $ O(n)$ | $ O(\log n)$ | $O(\log n)$ | $ O(1)$ | | 减小一个元素的值 (decrease-key) | $o(\log n) (下界\Omega(\log \log n) ,\\\\上界 O(2^{2\sqrt{\log \log n}}) )$ | $ O(\log n)$ | $ O(logn)$ | $O(\log n)$ | $ O(1)$ | | 是否支持可持久化 | $\times$ | $\checkmark$ | $\checkmark$ | | $\times$ | 一个有趣的事实是,这些堆都是用基于树的数据结构实现的。 在 OI 中,最常用的堆是二叉堆,习惯上不加限定提到“堆”时往往也指二叉堆。 No newline at end of file
mkdocs.yml +10 −4 Original line number Diff line number Diff line Loading @@ -151,7 +151,10 @@ nav: - 链表: ds/linked-list.md - 哈希表: ds/hash.md - 并查集: ds/dsu.md - 堆: ds/heap.md - 堆: - 堆简介: ds/heap/heap.md - 二叉堆: ds/heap/binary-heap.md - 配对堆: ds/heap/pairing-heap.md - 块状数据结构: - 分块思想: ds/square-root-decomposition.md - 块状链表: ds/block-list.md Loading Loading @@ -256,7 +259,10 @@ nav: # Theme theme: name: 'material' name: null custom_dir: 'mkdocs-material/material' static_templates: - 404.html language: 'zh' palette: primary: 'white' Loading @@ -281,12 +287,12 @@ extra: copyright: '<a href="https://creativecommons.org/licenses/by-sa/4.0/deed.zh">CC BY-SA 4.0</a> 和 <a href="https://github.com/zTrix/sata-license">SATA</a>' pagetime: 'on' manifest: 'manifest.webmanifest' githash: '' githash: 'ed60f96' extra_javascript: - 'https://cdnjs.loli.net/ajax/libs/Han/3.3.0/han.min.js' - '_static/js/extra.js?v=10' - 'https://cdnjs.loli.net/ajax/libs/mathjax/2.7.5/MathJax.js?config=TeX-MML-AM_CHTML' extra_css: Loading