建堆的算法复杂度分析 O(n)
来源:互联网 发布:数据脱敏 指导 编辑:程序博客网 时间:2024/06/04 17:48
代码:
template<class T> inline void MaxHeap<T>::make_heap(vector<T> & v) { if (heap_.size() != 0) heap_.clear(); heap_ = v; // start with last parent, and reheapify_down back to root for (int i = parent(v.size() - 1); i >= 0; i--) reheapify_down(i); v = heap_; }
template<class T> inline void MaxHeap<T>::reheapify_down(int i) { if (heap_.empty()) return; int current = i, max = i; int left = 1, right = 2; int size = heap_.size(); do { current = max; left = left_child(current); right = right_child(current); if (left < size && heap_[left] > heap_[current]) max = left; if (right < size && heap_[right] > heap_[max]) max = right; if (max != current) swap(heap_[current], heap_[max]); } while (max != current); }
看似建堆(make_heap)的复杂度为O(nlogn),实则为O(n),reheapify_down不会touch到每个节点,所以不算简单的递归,只能算叠加。证明如下:
因为堆构建的是一颗平衡二叉树。于是有:
1. 一棵拥有n个节点的平衡二叉树,树高 h 约为 lg n 。
2. 树的第 i 层 最多有节点 2^i 个。注意,第 i 层的高度为 i + 1。如第0层的高度为1,拥有1个根节点。
那么做reheapify_down时,最底层(h-1)的节点不会动,倒数第二层(h-2)的节点最多往下移动一次,倒数第三层(h-3)的节点最多往下移动2次....第0层的节点往下最多移动(h-1)次。
所以,最坏情况下,每层所有节点都会往下移到最底层。
则,所有操作总和为 S = 2^(h-1)*0 + 2^(h-2)*1 + 2^(h-3) * 2 + ... + 2^1*(h-2) + 2^0*(h-1) ----- (1)
把(1)式乘以2,再减去(1)式, 可得
S = 2^(h-1) + 2^(h-2) + ... + 2^1 - 2^0*(h-1) = 2(1-2^(h-1))/(1-2) - (h-1) = 2^h - h- 1 ---- (2)
把h = lg n 代入 (2)式, 得 S = n - lgn - 1 <= n (n >=1)
故而, 建堆复杂度为O(n) 。
0 0
- 建堆的算法复杂度分析 O(n)
- 建堆的算法复杂度分析 O(n)
- 堆排序中--建堆的算法复杂度分析O(n)
- 建堆的时间复杂度O(N)
- 堆排序建堆复杂度为O(n)的证明
- 为什么建堆的时间复杂度是O(n)?
- 建堆O(n)时间复杂度证明
- 起泡算法的最佳复杂度O(N)
- O(n)复杂度的排序算法
- 一个O(n)复杂度的排序算法
- 算法复杂度函数级T(n)非O(n)分析
- 堆排序建堆复杂度为O(n)的证…
- 算法时间复杂度的表示法O(n²)、O(n)、O(1)、O(nlogn)
- 时间复杂度为O(n)的排序算法--计数算法
- 约瑟夫问题,从o(n*m)到o(n)乃至o(m)的算法复杂度进阶
- 一个时间复杂度为O(n),空间复杂度为O(1)的排序算法
- 时间复杂度为O(N),空间复杂度为O(1)的排序算法
- 用一个复杂度为O(n)的算法找出回文
- JAVA基础一大堆0802拷贝文件流+网络连接
- 文本分块切割
- MO and MMO
- 03_Android NDK中C语言调用Java代码,javah的使用,javap的使用以及生成签名,Android.mk的编写,C代码的编写
- UVA129 —— Krypton Factor (氪因素)
- 建堆的算法复杂度分析 O(n)
- STRUTS2为ACTION配置METHOD属性
- 抽象工厂模式
- 使用Jedis无法访问Redis的问题
- Unreal 关于优化
- hdu 2577 How to Type dp
- 【图的连通性】poj2117Electricity
- Photoshop 意境文字效果图片制作
- 《MFC游戏开发》笔记一 系列简介