创建最大堆

概率论 知识图谱 + 实战案例解析 本文通过构建概率论知识图谱,系统梳理了从随机试验、概率、条件概率到随机变量与分布的核心概念及其内在联系。结合朴素贝叶斯分类器和蒙特卡洛模拟等实战案例,深入解析了条件概率、独立性及大数定律等理论如何应用于机器学习与实际问题求解,旨在帮助读者建立结构化思维,将理论有效转化为解决实际问题的能力。 阅读详情

首先来观察一颗最大堆二叉树 和一个普通序列的映射情况:在序列中从length(LIST)/2+1 -> length(LIST)的元素都对应于二叉树的叶子节点,同时也是一颗独立的树,且最大数就是自己本身。




#include<iostream>

#define LEFT(i)  (i<<2)
#define RIGHT(i)  ((i<<2)+1)

using namespace std;
void swap(int& small, int& big)
{
     int temp = small;
     small = big;
     big = temp;
}

void heap_adjust(int arr[], int root, int size)
{
	int leftchild = LEFT(root);
	int rightchild = RIGHT(root);
	int largest;

	if ( leftchild <= size && arr[leftchild] > arr[root])
		largest = leftchild;
	else
		largest = root;

	if ( rightchild <= size && arr[rightchild] > arr[root])
		largest = rightchild ;

	/*
	| 上面已经把父节点arr[root]和左右儿子节点做大小比较(arr[leftchild],arr[rightchild])
	| 当arr[leftchild]或arr[rightchild]大于父节点时,就交换他们的位置,
	| 此时这棵树就是最大堆
	|
	|但还要确保以孩子节点为根的子树也是最大二叉树堆,所以依次比较,也就是递归比较
	*/
	if ( largest != root )
	{
		swap (arr[root], arr[largest]);
		heap_adjust(arr, largest, size);
	}
}

/*
 |序列中从arr[size/2+1]开始一直到arr[size-1]
 |在映射到完全二叉树的过程中都为叶子节点,即都为一颗独立的二叉树
 |且都是只包含一个节点(即自己本身)的完全二叉树
 |
 |所以在建树的时候,从arr[size/2 : 0]反向建树,
 |这样可以确保在对构建完整的二叉树从上至下,从左至右,所遵循的次序
 |与序列中从0 -> (size-1)的循序是对应的。
*/
void build_heap(int arr[], int size)
{
     for (int i = size/2; i >= 0; i-- )
         heap_adjust(arr, i, size);
}

//创建最大堆
int main()
{
    const int size = 10;
    int iarray[size] = {15,3,4,9,25,60,87,88,92,5};
    build_heap(iarray,size-1);
    
    for (int i = 0; i < size; i++ )
    cout << iarray[i] << " ";
    
    cin.get();
    return 0;
}


































































































实战17:GCN+LSTM图卷积神经网络预警预测 完整代码数据集 阅读详情

相关推荐

单细胞转录组数据分析全流程:从原始数据到细胞注释

本文详细介绍了单细胞转录组数据分析的全流程,从原始数据读取、环境搭建、数据质控与标准化,到降维聚类、细胞类型注释,以及高级质控与多样本整合。重点阐述了如何利用Seurat等工具进行数据处理,并通过标志基因比对与自动注释方法完成细胞身份鉴定,为研究者提供了一套清晰、可操作的分析指南。

coffee的博客 553

数据结构学习记录——堆的建立(最大堆的建立、思路图解、代码实现、代码解释)

对其进行调整,调整的思路和堆的删除相似,但是要从后往前开始,在左右两个堆中进行调整;从倒数第一个没有儿子的结点开始,即从最后一个非叶子节点开始,依次进行下滤操作,将其子树调整为最大堆。因为最后一个非叶子节点的数组下标为n/2,其中n为堆中元素的个数,所以从i=n/2开始循环。Parent表示当前结点的父结点,Child表示当前结点的子结点,X表示当前结点的值。然后,从要下滤的结点开始,沿着其左右子结点中较大的一个不断下滤,具体来说,每次将要下滤的结点与其左右子结点中较大的一个进行比较,

li13437542099的博客 4956

经典损失函数——均方误差(MSE)和交叉熵误差(CEE)的python实现

损失函数(loss function)用来表示当前的神经网络对训练数据不拟合的程度。这个损失函数有很多,但是一般使用均方误差和交叉熵误差等。 1.均方误差(mean squared error) 先来看一下表达式: 用于将的求导结果变成,是神经网络的输出,是训练数据的标签值,k表示数据的维度。 用python实现: def MS...

Answer3664的博客 1万+

最大堆(创建、删除、插入和堆排序)图文详解

原文地址 我有一个不成熟的建议:老老实实花2个小时把这篇文章仔细看完,关于堆的各种操作一目了然了。 关于最大堆 什么是最大堆和最小堆?最大(小)堆是指在树中,存在一个结点而且该结点有儿子结点,该结点的data域值都不小于(大于)其儿子结点的data域值,并且它是一个完全二叉树(不是满二叉树)。注意区分选择树,因为选择树(selection tree)概念和最小堆有些类似,他们都有一个特点是“树中的根结点都表示树中的最小元素结点”。同理最大堆的根结点是树中元素最大的。那么来看具体的看一下它长什么样?(最小

页页读 2万+

自定义串口通讯协议

自定义串口通讯协议的实现方法

qq_44826038的博客 2172

用STM32F103单片机控制电调制动无刷电机

用电调控制无刷电机制作遥控飞艇 蓝牙控制 调控电调 无刷电机 用电调控制无刷电机制作遥控飞艇 代码区 mian.c #include "delay.h" #include "sys.h" #include "usart.h" #include "usart3.h" #include "timer.h" #include "led.h" #include "key.h" int main(v...

子非鱼 的博客 2万+

创建一个最大堆的两种方法

创建一个最大堆的两种方法 方法一:逐个插入来实现 (在插入数据的规程中一边插入一边调整顺序使之成为最大堆) 复杂度: O(Nlog(n)) 第一步:创建堆的结构体 constexpr int Maxsize = 20; struct Theap { int a[Maxsize];// 用数组来存储数据 int size;//显示数据的大小 int capacity;// 当前堆的容量 }; 第二步: 把堆进行初始化 Theap* creatHeap() { Theap* temp = new

fake_padraic的博客 4686

GPU硬件架构与微架构深度解析09-GPU寄存器文件深度解析

本文探讨GPU架构中大规模寄存器堆的设计与高效分配算法。寄存器文件作为GPU关键组件,支持大规模线程并行和快速数据存取。文章分析了多体寄存器堆的设计考量,包括端口数量、冲突避免和功耗管理,并比较了线性扫描、图着色等寄存器分配算法的特点。还介绍了寄存器压缩、动态分区等高级优化技术,以及NVIDIA Ampere架构的实际案例。这些技术对提升GPU计算性能和能效至关重要。

2301_79143213的博客 120

堆和哈夫曼树

堆分为最小堆和最大堆。最小堆指的是任意一个节点都有小于他的做儿子和右儿子。最大堆指的是任意一个节点大于打的左儿子右儿子。 最大堆的操作(堆得主要操作就是上滤和下滤) 插入:先将一个节点插入到堆得最后的位置然后上滤,如果他的父亲小于他,就把他父亲的值给他,继续循环,当退出循环的时候就是要插入的节点: 删除:删除堆顶元素,然后把最后一个元素拿上来做下滤;如果他的左右儿子中最大的那个大于...

Li13652558873的博客 744

【自适应调制】自适应调制解调通信链路误码率matlab仿真与分析

BPSK中的B是“Binary”的意思,也就是有两个变化状态,比如说相位上的“+90°(代表1)、-90°(代表0)”,一个状态代表的就是一个比特。QPSK的“Q”是“Quadrature”的意思,有四个变化状态,如相位上的“+45°(代表00)、-45°(代表11)、+135°(代表10)、-135°(代表01)”,那么一个状态就代表两个比特的信息,如图2所示。同理8PSK的一个状态代表三个比特。但是功率资源并不是无限的,基站总的发射功率是一定的,为了充分利用所有的功率,采用的就是AMC技术。

FPGA/MATLAB学习教程/源码/项目合作开发 1833

cuRobo 入门教程(一)基于CUDA的机器人运动规划加速库

cuRobo是一款基于CUDA加速的机器人算法库,提供运动学计算、碰撞检测、轨迹优化等功能。该库采用并行优化技术,在GPU上实现高效运算,比现有方案快60倍。cuRobo支持多种机器人模型和环境表示,包含正向/逆向运动学、无碰撞轨迹生成、模型预测控制等核心算法,并可与IsaacSim等仿真平台集成。其特点包括:1) 支持多种碰撞检测方式(长方体/网格/深度图像);2) 提供批量环境处理和实时世界更新;3) 通过CUDA Graphs加速优化迭代;4) 在Jetson Orin等平台实现毫秒级运动规划。安装支

2506_90492529的博客 1931

数据结构回顾——排序

要求:掌握算法思想,性能分析,代码实现 注:本文默认递增排序 一,排序的基本概念 1,什么是排序:将一个没有顺序的数列进行重新排列是它成为一个递增(递减)序列 2,稳定性:如果数列中有两个元素的值是相等的,排序后他们的相对位置没有发生改变,就认为该排序算法稳定。 3,内部排序:指排序期间元素全部存放在内存中的排序 外部排序:排序期间元素无法全部同时存放在内存中,必须在排序过程中根据要求不断在内,外存之间进行移动 二,直接插入排序 插入排序:每次将一个待排序的序列插入到一个前...

weixin_44841312的博客 432

【DaVinci Configurator专题】-6-将UDS&OBD诊断数据库文件CDD和PDX导入到CFG

CDD和ODX是两种诊断数据库文件。机器可读的诊断数据库其实就是将传统的Excel调查表等信息编辑成CDD或ODX文件。CDD是Vector私有的一种诊断数据库格式;ODX是国际标准的诊断数据交互格式。CANdelaStudio编辑CDD文件,以及也可以导出ODX文件;ODX Studio用于编辑ODX文件,诊断数据库的编辑其实就是诊断需求的定义。 下面以PDX为例,将其导入到DaVinci Configurator。 目录 1 打开DaVinci Configurator,导入PDX文件 2 解.

「汽车电子助手」的博客 6751

堆排序 维护最大堆 创建最大堆 排序最大堆

/* 函数:堆排序 创建最大堆 维护最大堆 排序最大堆 通过数组存储二叉树 时间:15.7.14 Jason Zhou 热爱你所写下的程序,他是你的伙伴,而不是工具. */ #include<iostream> using namespace std;//交换两个元素 int swap_data(int &a,int &b) { int tmp=a; a=b; b=tmp;

周健华的专栏 1495

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

最大堆(创建、删除、插入和堆排序)

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_34159110的博客 334

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

最大堆(创建、删除、插入和堆排序)

转自:https://www.jianshu.com/p/21bef3fc3030 关于最大堆 什么是最大堆和最小堆?最大(小)堆是指在树中,存在一个结点而且该结点有儿子结点,该结点的data域值都不小于(大于)其儿子结点的data域值,并且它是一个完全二叉树(不是满二叉树)。注意区分选择树,因为选择树(selection tree)概念和最小堆有些类似,他们都有一个特点是“树中的根结点都表示树中...

WitsMakeMen的专栏 1979

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

最大堆的创建、插入和删除

最大堆所需的头文件“treeNode.h” #ifndef TREENODE_H_INCLUDED #define TREENODE_H_INCLUDED class Node { public: char name; int data; // int degree; // int height; // int freq; Node* leftchil

qq_36099645的博客 322

最大堆的创建、插入、删除(完全二叉树)

最大堆的创建、插入、删除(完全二叉树)

qq_54731568的博客 1317

最大堆java构建_java 创建最大堆

最大堆的性质是除了根节点之外的所有节点(i)都需要满足A[PARENT(i)]>A[i],即其对应节点值小于其父节点对应值。下面实现以数组int []a构建最大堆。public class Heap {public static int Left(int i)//返回左子结点{return 2*i+1;}public static int Right(int i)//返回右子节点{retur...

weixin_28977123的博客 496

堆排序---最大堆的创建和最大推的排序

typedef struct{ int data[100+1]; int length; }Slist; void swap(Slist *L,int i,int j){ int tmp=L->data[i]; L->data[i]=L->data[j]; L->data[j]=tmp; } void HeapAdjust(Slist *L,int s,int m){ //理解

Dragon_F的专栏 1495

java 创建最大堆

最大堆的性质是除了根节点之外的所有节点(i)都需要满足A[PARENT(i)]>A[i],即其对应节点值小于其父节点对应值。 下面实现以数组int []a构建最大堆。 public class Heap {public static int Left(int i)//返回左子结点{return 2*i+1;} public static int Right(int i)//...

weixin_30780649的博客 294

最大堆的创建

 代码如下: #include &lt;cstdio&gt; #include &lt;cstring&gt; #include &lt;algorithm&gt; #include &lt;iostream&gt; using namespace std; const int maxn=1005; const int INF=0x3f3f3f3f; int n; int heap[maxn]...

zamaochick的博客 1327

最大堆的创建、插入、删除

最大堆,目的:根据优先级进行插入和删除操作; 定义:2.1 完全二叉树(保持效率为Log2N); 2.2 有序性(最大的值永远在根处, 到达终端节点的路径上有序)

JuniorChestnut的博客 254

C++创建最大堆

#include #include #include using namespace std; class Heap{ public: int heap_size; vector heap; void maxHeap(vector&heap,int i); void buildMaxHeap(vector&heap); }; void Heap::maxHeap(vector&heap,i

tiger1334的专栏 1182
上一篇: 快速排序(优化版)
下一篇: 堆排序
错_对
博客等级 码龄16年 68粉丝 80原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值