核工业华南建设集团网站珠海seo海网站建设

张小明 2026/1/15 19:05:34
核工业华南建设集团网站,珠海seo海网站建设,杭州网站建设外包,做网站需要的大图1. 堆的基本原理 堆是一棵完全二叉树。 大根堆#xff1a;任意节点的值 $\ge$ 其子节点的值#xff08;堆顶最大#xff09;。 小根堆#xff1a;任意节点的值 $\le$ 其子节点的值#xff08;堆顶最小#xff09;。 存储方式 我们使用一个数组 heap[] 来存储堆…1. 堆的基本原理堆是一棵完全二叉树。大根堆任意节点的值 $\ge$ 其子节点的值堆顶最大。小根堆任意节点的值 $\le$ 其子节点的值堆顶最小。存储方式我们使用一个数组heap[]来存储堆索引从1开始这样对于任意节点now父节点now / 2(或now 1)左子节点now * 2(或now 1)右子节点now * 2 1(或now 1 | 1)2. 核心操作详解2.1 入堆 (Push) —— 上浮操作思路将新元素插入到堆的末尾(heapsize)。将该元素与其父节点比较。如果新元素 父节点则交换两者swap并继续向上比较。直到无法交换满足堆性质或到达堆顶。void h_push(int k){ heap[heapsize]k;//插入末尾 int nowheapsize; while(now1){ int parentsnow1;//寻找父节点 if(heap[now]heap[parents]){//子大则交换 swap(heap[now],heap[parents]); nowparents;//继续向上 }else break;//满足性质退出 } }2.2 出堆 (Pop) —— 下沉操作思路取出堆顶元素即最大值。为了保持完全二叉树的形态将堆底元素移动到堆顶并将堆长度减 1。从新的堆顶开始与其左右子节点中较大的那个进行比较。如果当前节点 较大的子节点则交换并继续向下比较。直到无法交换或沉到底部。注意在判断左右儿子大小时要确保逻辑独立先选出最大的儿子再和父节点比较。int h_pop(){ int ansheap[1];//记录最大值 swap(heap[1],heap[heapsize]);//堆尾移至堆顶 heapsize--;//长度减1 int now1; while(now*2heapsize){//只要有左儿子 int nxtnow*2;//默认较大的儿子是左儿子 //如果右儿子存在且右儿子左儿子则较大的儿子是右儿子 if(nxt1heapsizeheap[nxt1]heap[nxt]) nxt; //比较如果当前节点较大的儿子则下沉 if(heap[now]heap[nxt]){ swap(heap[now],heap[nxt]); nownxt;//继续向下 }else break;//满足堆性质停止 } return ans; }3. 完整代码实现#includeiostream #includealgorithm using namespace std; const int MAXN100;//适当扩大数组防止越界 int heap[MAXN]; int heapsize0; //打印堆调试用 void print(){ for(int i1;iheapsize;i)coutheap[i] ; coutendl; } //入堆上浮 void h_push(int k){ heap[heapsize]k; int nowheapsize; while(now1){ int parentsnow1; if(heap[now]heap[parents]){ swap(heap[now],heap[parents]); nowparents; }else break; } } //出堆下沉 int h_pop(){ if(heapsize0)return -1;//空堆保护 int ansheap[1]; swap(heap[1],heap[heapsize]); heapsize--; int now1; while(now*2heapsize){ int nxtnow*2;//左儿子 //判断是否存在右儿子且右儿子更大 if(nxt1heapsizeheap[nxt1]heap[nxt]) nxt; //与较大的儿子比较 if(heap[nxt]heap[now]){ swap(heap[nxt],heap[now]); nownxt; }else break; } return ans; } int main(){ //模拟输入9个数字 coutPlease enter 9 integers:endl; for(int i1;i9;i){ int tmp; cintmp; h_push(tmp); } coutCurrent Heap: ; print(); coutPopped Max Element: h_pop()endl; coutHeap after Pop: ; print(); return 0; }4. 复杂度分析时间复杂度h_push: 最坏情况是从叶子浮到根高度为 log N所以是 O(log N)。h_pop: 最坏情况是从根沉到叶子高度为 log N所以是 O(log N)。空间复杂度O(N)用于存储数组。5. 总结手动实现堆的关键在于理解“完全二叉树”的数组映射关系。上浮 (Up)用于插入确保新来的“大将”能坐到正确的高位。下沉 (Down)用于删除旧王退位选出的新王可能能力不足需要退居到合适的位置。掌握这套逻辑后不仅能手写优先队列还能轻松解决“Top K 问题”或手写“堆排序”。附原始代码/* //手动实现堆操作 堆的增加 大根堆 #include iostream using namespace std; int heap[10];//堆 int heapsize;//堆长度 void print(){ for(int i1;i9;i) coutheap[i] ; } void h_push(int k){ heap[heapsize]k; int nowheapsize;//当前存入元素在堆的末尾 int parents; while(now1){//当now1时已经没有父节点 parentsnow/2; if(heap[now]heap[parents])//当now节点大于父节点就交换彼此位置 { swap(heap[now],heap[parents]); nowparents; } else break;//当不大于父节点时就直接退出循环了 } } int main() { for(int i1;i9;i){ int tmp; cintmp; h_push(tmp);//每次给堆增加一个元素 } print(); return 0; } */ //手动实现堆操作 堆的删除 大根堆 先创建堆然后再删除堆顶元素删除堆顶元素需要先把堆顶和堆底交换然后heapsize--就删除了原始堆顶接下来需要把堆下沉,即把堆顶元素和子节点比较如果子节点大于当前元素就交换递归下去如果大于等于就结束每次输出被弹出的元素 #include iostream using namespace std; int heap[10]; int heapsize; int h_pop(){//删除堆顶元素 int ansheap[1]; swap(heap[1],heap[heapsize]);//先把堆顶和堆底交换 heapsize--;//删除堆底元素 //接下来从堆顶now节点开始与儿子节点进行比较因为是大根堆所以与儿子中较大值进行交换如果now节点小于now儿子较大值 int now1;//堆顶 while(now*2heapsize){//左儿子小于堆长 int nxtnow*2;//now节点左儿子 if(nxt1heapsize heap[nxt1]heap[nxt]){//如果右儿子也小于等于堆长且右儿子大于左儿子 nxt;//那么较大值为右儿子 否则较大值就还是左儿子 } if(heap[nxt]heap[now]){//如果儿子大于now节点 swap(heap[nxt],heap[now]); nownxt; } else break;//now节点大于儿子中较大值结束循环 } return ans; } void print(){ for(int i1;iheapsize;i) coutheap[i] ; } void h_push(int k){ heap[heapsize]k; int nowheapsize; while(now1){ int parentsnow1; if(heap[now]heap[parents]){ swap(heap[now],heap[parents]); nowparents; } else break; } } int main(){ for(int i1;i9;i){ int tmp; cintmp; h_push(tmp); } print(); coutendl; couth_pop()endl;//删除堆顶元素 print(); }
版权声明:本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

自己建立公司网站电子商务网站建设php

C 的本质第 10 篇 C 的本质总结:为什么它永远不会死 👑 核心命题 零成本抽象 极致控制 持续进化 永恒的王者 在过去的 40 年里,无数语言宣称要取代 C,但直到 2025 年,从大模型的底层算子、游戏引擎的渲染核心&#…

张小明 2026/1/10 9:28:07 网站建设

谷歌网站为何打不开深圳南山住房和建设局网站官网

作者贡献介绍 💗CSDN从事毕设辅导第一人,本着诚信、靠谱、质量在业界获得优秀口碑,在此非常希望和行业内的前辈交流学习,欢迎成考学历咨询老师、大学老师前来合作交流💗 2013年,正式踏入技术写作领域&…

张小明 2026/1/10 9:28:08 网站建设

展示网站方案怎么使自己的网站

你是否担心自己的Windows系统被植入DoublePulsar后门?这个由NSA开发的恶意软件曾在2017年的"永恒之蓝"勒索软件攻击中肆虐全球。现在,有了doublepulsar-detection-script这个开源工具,你可以轻松检测并清除这个隐形威胁&#xff01…

张小明 2026/1/10 9:28:32 网站建设

基于o2o的旅游网站建设惠州搜索引擎seo

文章摘要坐标变换在不同“参考系”里看同一个点/物体。 具体干的三件事: 平移:整体挪个位置;旋转:整体转个角度;缩放:整体放大缩小。 在数学里,这是解析几何 线性代数的核心; 在游戏…

张小明 2026/1/10 9:28:08 网站建设

小程序导航网站开发梦幻西游网页版登录

本文分析了C端产品经理转型大模型产品经理的能力优劣势、需补充的知识领域及必备心态,提出专业化、平台化、生态化三种发展方向。同时提供系统化学习路线和丰富资源,帮助产品经理快速掌握大模型技术,实现职业转型,成为大模型时代的…

张小明 2026/1/10 9:35:55 网站建设

个人域名备案 网站名称国开行网站毕业申请怎么做

阴阳师自动化工具:5大场景智能托管方案深度解析 【免费下载链接】SmartOnmyoji 阴阳师后台代肝脚本,支持所有类似阴阳师的卡牌游戏(点点点游戏)自动找图-点击…(支持后台运行、支持多开、支持模拟器) 项目…

张小明 2026/1/10 9:28:13 网站建设