ACM竞赛所用数据结构.ppt

二叉堆 一种特殊的树形数据结构,每个结点都有一个值。二叉堆的特点是根结点的值最小(或最大),且根结点的两个子树也是一个堆。 建堆 O(n*log(n))/ O(n); 插入元素 log(n); 删除最大/最小元素log(n); 无论是插入还是删除,最关键的都在于调整。 STL heap make_heap(a,a+n,cmp) 默认是最大堆化,即cmp为真时a做叶子 pop_heap(a,a+n,cmp) 将堆顶元素移至a[n-1]且a[0:n-2]仍为堆 push_heap(a,a+n,cmp) 将a[n-1]加入堆a[0:n-2] sort_heap(a,a+n,cmp) 将堆a[n-1]化为排序好的数组a[n-1] bool cmp(int x,int y){ return xy; //最大堆 } a[0]为堆顶元素。 映射2分堆 二项堆不能删除任意元素 在二项堆的基础上,加上一个索引之后,就成了映射2分堆,这时候就可以在log(n)的时间内删除元素。 而Fibonacci堆也支持插入、删除、查找最大最小元素,算法复杂度都很低,但是编程复杂度却很高。 几种堆的比较 优先队列 #includequeue #includevector priority_queue int, vectorint, greaterint q3; Priori

文档评论(0)

1亿VIP精品文档

相关文档