您的位置:首页 > 理论基础 > 数据结构算法

8.2日讲座记录-高级数据结构

2011-08-02 15:11 218 查看
我苦逼,被我睡过去了。

ppt摘录如下:

一、二叉堆是一个严格的完全二叉树,它的特点就是可以在O(logn)的时间内对元素进行插入和删除,并且可以在O(1)的时间内找到最大元素或者最小元素。

注:

1、通常将根节点为整个树中最小元素的二叉堆叫做小根堆,反之则为大根堆。
2、堆在同层次上是无序的,也就是说堆的关系只是本节点与子节点和父节点之间的关系,与兄弟节点无关。
3、其存储结构可以是顺序存储,因为它是一个完全二叉树,已知一个节点的下标(序号),可以知道其子节点和父节点的下标(序号)。

4、一般情况下我们都采用连续一段数组的存储方式来存储二叉堆。已知一个节点n,其父节点为n/2(这里为整除),其左孩子节点为n*2,右孩子为n*2+1。
void push(int a)   //a为插入的关键字
{
int temp,w;
n++; s
=a; w=n;
while ((w!=1)&&(s[w]<s[w/2]))
{//逐层调整关键字的位置
if (s[w]<s[w/2]) {
temp=s[w];
s[w]=s[w/2];
s[w/2]=temp;
}
w=w/2;
}


二、树状数组是查询和维护时间复杂度均为O(logn)的数据结构

引入:

·在解题过程中,我们有时需要维护一个数组的前缀和S[i]=A[1]+A[2]+...+A[i]。
·但是不难发现,如果我们修改了任意一个A[i],S[i]、S[i+1]...S
都会发生变化。

·可以说,每次修改A[i]后,调整前缀和S[]在最坏情况下会需要O(n)的时间。当n非常大时,程序会运行得非常缓慢。

·“树状数组”可以较高的效率解决此类问题。


看不太懂,暂缓。


[b]

[/b]

注:1、树状数组应用实例(poj 2352)

注:看ppt的时候无语,发现老师太坑爹,一上午把这些都讲了,看不懂以下先放着........上网上找点资料再看.....

三、线段树

四、并查集
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  数据结构 存储