请输入您要查询的百科知识:

 

词条
释义

累积在一起的东西; 累积在一起;聚积在一起;量词,用于成堆的物或成群的人

基本信息

拼音:duī

注音:ㄉㄨㄟˉ

部首:土

五笔输入法:fwyg

笔画数:11

笔顺编号:12132411121

汉字释义

基本解释

1、累积在一起的东西:堆栈。堆房。土堆。

2、累积在一起,聚积在一起:堆积。堆放。堆垒。堆摞。堆砌。

3、量词,用于成堆的物或成群的人:一堆人。

详细解释

【名】

1、形声。字从土,从隹(zhuī),隹亦声。“隹”为“锥”省。“土”与“隹”联合起来表示“锥形土包”。本义:锥形土包。

2、土堆;土墩,沙墩或水中聚集的礁石。

逾陇堆兮渡漠。——《楚辞·疾世》

激堆埼。——司马相如《上林赋》

呼水中沙堆为墠。——《尔雅·释水》注

3、常为排列的整齐有序的叠堆。如:草堆;柴火堆;堆云(形容密集众多);堆堆(久久不动的样子;形容累积得很多的样子)。

【动】

堆积。堆,聚土。——《说文》

【量】

用来计量成堆的东西。卷起千堆雪。——宋·苏轼《念奴娇·赤壁怀古》

常用词语

1.堆冰 duībīng

[pack ice] 由大小浮冰推挤在一起形成混杂体的海上冰块

2.堆叠 duīdié

[pile up] 一层一层地码起来

案上堆叠着一摞新教材

3.堆垛 duīduò

[rick] 堆积成垛(如干草)

4.堆房 duīfáng

[storeroom;wareroom] 堆放杂物或货物的贮藏室

5.堆放 duīfàng

(1)[pile up]∶把货物放到或扔到堆上

采来的条石堆放在屋檐下

(2)[stack]∶成堆地放置大量的东西,尤其是整整齐齐地存放

把稻草堆放在打谷场上

6.堆肥 duīféi

[stock manure;compost] 一种通常是把粪便、杂草、茎叶泥土等堆起来发酵后制成,其大部分是由腐败的有机物组成的混合物,用作肥料和改良土质

7.堆谷场 duīgǔchǎng

[stackyard] 堆放禾杆或谷物的场地或田地

8.堆焊 duīhàn

[repair welding] 把金属熔化堆在工具或机器零件上的焊接法。用来修复机件的磨损、崩裂部分(常用电焊或气焊法)

9.堆积 duījī

(1)[heap up]∶把事物堆集成堆粮食堆积如山

(2)[store]∶集中成堆放置

林荫路中心常用来堆积冬天从路面上扫出来的雪

10.堆集 duījí

[heap] 成堆地聚在一起;堆积

案头堆集着画轴

11.堆集如山 duījí-rúshān

(1)[lie in a heap;pile up like a mountain] 东西堆积得像山一样。形容极多

每遇冬月,诸乡纳粟秆草,牛车阗塞道路,车尾相衔,数千万辆不绝,场内堆集如山。——宋· 孟元老《东京梦华录·外诸司》

(2)亦作“堆积如山”

12.堆金积玉 duījīn-jīyù

[amass a fortune] 形容财产多,非常富有

13.堆聚 duījù

[heap up] 堆积;聚集

堆聚成山

14.堆垒 duīlěi

[pile up] 堆叠

15.堆内 duīnèi

[in-pile] 表示在反应堆内进行实验或安放设备的术语

16.堆砌 duīqì

[pad;(fig) load one's writing with fancy phrases] 垒积砖石并用泥灰黏合,比喻写文章使用大量华丽而无用的词语,以扩大或加长篇幅(如书籍、杂志的文章、讲话)

17.堆土 duītǔ

[bank] 沿[正在成长的庄稼如芹菜的]埂堆土以保护植物或使之不见阳光而变白

18.堆笑 duīxiào

[showing all smiles] 显露笑容

满脸堆笑

19.堆栈 duīzhàn

[storehouse;warehouse;godown] 临时寄存货物的地方

堆 程序

程序

在程序中,堆用于动态分配和释放程序所使用的对象。在以下情况中调用堆操作:

1.事先不知道程序所需对象的数量和大小。

2.对象太大,不适合使用堆栈分配器。

堆使用运行期间分配给代码和堆栈以外的部分内存。

传统上,操作系统和运行时库随附了堆实现。当进程开始时,操作系统创建称为进程堆的默认堆。如果没有使用其他堆,则使用进程堆分配块。语言运行时库也可在一个进程内创建单独的堆。(例如,C 运行时库创建自己的堆。)除这些专用堆外,应用程序或许多加载的动态链接库 (DLL) 之一也可以创建并使用单独的堆。Win32 提供了一组丰富的 API 用于创建和使用专用堆。有关堆函数的优秀教程,请参阅 MSDN 平台 SDK 节点。

当应用程序或 DLL 创建专用堆时,这些堆驻留于进程空间中并且在进程范围内是可访问的。某一给定堆分配的任何数据应为同一堆所释放。(从一个堆分配并释放给另一个堆没有意义。)

在所有虚拟内存系统中,堆位于操作系统的虚拟内存管理器之上。语言运行时堆也驻留在虚拟内存之上。某些情况下,这些堆在操作系统堆的上层,但语言运行时堆通过分配大的块来执行自己的内存管理。绕开操作系统堆来使用虚拟内存函数可使堆更好地分配和使用块。

典型的堆实现由前端分配器和后端分配器组成。前端分配器维护固定大小块的自由列表。当堆收到分配调用后,它尝试从前端列表中查找自由块。如果此操作失败,则堆将被迫从后端(保留和提交虚拟内存)分配一个大块来满足请求。通常的实现具有每个块分配的开销,这花费了执行周期,也减少了可用存储区。

Windows NT 的实现(Windows NT 4.0 版及更高版本)使用 127 个从 8 到 1,024 字节不等的 8 字节对齐块的自由列表和 1 个混合列表。混合列表(自由列表【0】)包含大小超过 1,024 字节的块。自由列表包含在双向链接表中链接在一起的对象。默认情况下,进程堆执行合并操作。(合并操作是组合相邻的自由块以生成更大的块的操作。)合并操作花费了额外的周期,但减少了堆块的内部碎片。

单个全局锁可防止多线程同时使用堆。此锁主要用于保护堆数据结构不受多线程的任意访问。当堆操作过于频繁时,此锁会对性能造成负面影响。

算法思想

不必将值一个个地插入堆中,通过交换形成堆。假设根的左、右子树都已是堆,并且根的元素名为R。这种情况下,有两种可能:

(1) R的值小于或等于其两个子女,此时堆已完成;

(2) R的值大于其某一个或全部两个子女的值,此时R应与两个子女中值较小的一个交换,结果得到一个堆,除非R仍然大于其新子女的一个或全部的两个。这种情况下,我们只需简单地继续这种将R“拉下来”的过程,直至到达某一个层使它小于它的子女,或者它成了叶结点。

筛选法

首先将要排序的所有关键码放到一棵完全二叉树的各个结点中(这时的完全二叉树并不具备堆的特性)。显然,所有的结点Ki都没有子女结点,因此以这样的Ki为根的子树已经是堆,然后从 的结点Ki开始,逐步把以为根的子树排成堆,直到以K0为根的子树排成堆,就完成了建堆过程。

在考虑将以Ki为根的子树排成堆时,以Ki+1,Ki+2,…,Kn-1为根的子树已经是堆,所以这时如果有Ki≤K2i+1和Ki≤K2i+2,则不必改变任何结点的位置,以Ki为根的子树就已经是堆;否则就要适当调整子树中结点的位置以满足堆的定义。由于Ki的左、右子树都已经是堆,根结点是堆中最小的结点,所以调整后Ki的值必定是原来K2i+1和K2i+2中较小的一个。不妨假定K2+1较小,将Ki与K2i+1交换位置,这样调整后Ki≤K2i,Ki≤K2i+1,并且以K2i+2为根的子树原来已经是堆,不必再作任何调整,只有以K2i+1为根的子树由于K2i+1的值已经发生变化(与Ki交换了),所以有可能不满足堆的定义(当K2i+1的左、右子树已经是堆)。这时可重复上述过程,考虑将K2i+1以为根的子树排成堆。如此一层一层递推下去,最多可以一直进行到树叶。由于每步都保证将子树中最小的结点交换到子树的根部,所以这个过程是不会反馈的。它就像过筛一样,把最小的关键码一层一层选择出来。

建堆效率

n个结点的堆,高度d =。根为第0层,则第i层结点个数为2i,考虑一个元素在堆中向下移动的距离。大约一半的结点深度为d-1,不移动(叶)。四分之一的结点深度为d-2,而它们至多能向下移动一层。树中每向上一层,结点的数目为前一层的一半,而子树高度加一。

这种算法时间代价为Ο(n)

由于堆有log n层深,插入结点、删除普通元素和删除最小元素的平均时间代价和最差时间代价都是

Ο(log n)。

堆 (数据结构)

在计算机科学中,堆是一种经过排序的树形数据结构,每个结点都有一个值。通常我们所说的堆的数据结构,是指二叉堆。堆的特点是根结点的值最小(或最大),且根结点的两个子树也是一个堆。 总结数据结构中的堆是一颗树而不是一个数组。

随便看

 

百科全书收录4421916条中文百科知识,基本涵盖了大多数领域的百科知识,是一部内容开放、自由的电子版百科全书。

 

Copyright © 2004-2023 Cnenc.net All Rights Reserved
更新时间:2025/1/31 10:26:27