- 1、本文档共36页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
NOIP中常用的数据结构
NOIP中常用的数据结构
清华大学 钱桥
主要内容:
堆
单调队列
并查集
例:首先给你n个数,之后进行n次操作,操作有两种:
1、询问最小值,并将它删除
2、插入一个新的数x
堆
思路1:用数组存这些数
询问时,扫描一遍最小值,并将它删除 O(n)
插入时,将它放在数组最后 O(1)
总时间复杂度 O(n^2)
思路2:仍然用数组存这些数,排序!从小到大存储
询问时,第一个即最小值 O(1)
删除最小值时,标记前移 O(1)
插入时,可通过二分找到插入位置 O(LogN)
但插入这个数后,后面的数要整体平移 O(n)
时间复杂度 O(n^2)
思路3:用链表存这些数,从小到大有序存储
询问时,第一个即是最小值,并将它删除 O(1)
插入时,若找到位置,可直接插入 O(1)
但链表上无法二分查找,查找需整体扫描 O(n)
总时间复杂度 O(n^2)
例:首先给你n个数,之后进行n次操作,操作有两种:
1、询问最小值,并将它删除
2、插入一个新的数x
堆
堆~闪亮登场!
插入一个数 O(LogN)
删除一个数 O(LogN)
查询最小值 O(1)
总时间复杂度 O(NLogN)
堆
堆是一棵完全二叉树
深度为LogN!
给节点顺序标号1~n
i
2*i
2*i+1
只需用数组A[1]~A[n]存储
堆
从根到每个叶节点的路径都是单调递增的
最小值是根! O(1)查找最小值
接下来我们的任务是:
1、插入一个数,在O(LogN)时间内,把结构恢复成堆
2、删除最小值,在O(LogN)时间内,把结构恢复成堆
*3、删除一个指定元素,在O(LogN)时间内,把结构恢复成堆
堆
1、插入一个元素z
不关心大小,只关心位置
如何调整?
显然,xy
x
y
情况1:z=x
完美结束
z
情况2:zx
堆
1、插入一个元素z
不关心大小,只关心位置
如何调整?
显然,xy
z
y
情况1:z=x
完美结束
x
情况2:zx
将x和z互换位置,显然zy,以z为根的子树一定是堆
翻页继续!
1、插入一个元素z
x
y
z
堆
显然,uw
情况1:z=u
完美结束
情况2:zu
u
w
1、插入一个元素z
x
y
u
堆
显然,uw
情况1:z=u
完美结束
情况2:zu
将u和z互换位置,显然zw,以z为根的子树一定是堆
继续操作,直至某次“完美结束”或z被移动到根为止。
z
w
最多做LogN次!
堆
1、插入一个元素z 程序实现
n++; a[n]=z;
i = n;
while (i1) {
if (a[i] a[i/2]) {
t = a[i]; a[i] = a[i/2]; a[i/2] = t;
i = i / 2;
} else break;
}
n++; i =n
while (i1) {
if (z a[i 1]) {
a[i] = a[i 1];
i = i 1;
} else break;
}
a[i] = z;
堆
2、删除最小值
最小值是谁?
删除一个数后结构是什么样?
第一步:删除最小值
第二步:把下面的数z移动上来
第三部:调整
您可能关注的文档
- Al2O3含量对高炉炉渣流动性影响的实验研究.pdf
- Al2O3对唐钢高炉炉渣性能的影响.pdf
- ASM中水质特性参数测定方法的研究进展.pdf
- Br-离子选择性电极法测定地表水化学需氧量的研究.pdf
- BP算法在高炉煤气流分布模式识别中的应用.pdf
- Black carbon and polycyclic aromatic hydrocarbons (PAHs) in surface sediments of China's marginal seas.pdf
- CASS工艺在生活污水处理及回用中的应用.pdf
- CCD辐射图像三维温度场可视化重构.pdf
- CCl4体外引发自由基反应的简易实验方法.pdf
- CF2ClBr在短紫外光照射下光解离过程的研究.pdf
文档评论(0)