双堆DEAP
记录一道遇到的考研真题

特性分析:
DEAP为一颗完全二叉树,左子树小堆,右子树大堆,故左右子树分别可以用l[]、r[]数组存储,用m和n分别表示当前两完全二叉树的结点,左右子树高度差为1,且左子树的高度始终大于等于右子树的高度。
插入情况:
当均为空二叉树或者满二叉树(m=2k-1)应该插入到小堆;小堆满后,插入到大堆。即在小堆插入要满足:

否则就要插入到大堆。
调堆情况:
在小堆m处插入节点x后,若x的值不大于大堆的m/2节点的值,则在小堆调整。否则,节点x与大堆的m/2结点交换,然后进行大堆调堆。在大堆n处插入结点x后,若x不小于小堆的n结点,则在大堆调整。否则,结点x与小堆的n结点交换,然后进行小堆调堆。
(1)插入4后

4先插入大堆,4<小堆中对应的19,和19交换。之后开始调整小堆即可。大堆显然无需调整。
(2)插入代码(有点乱,建议文字屡清楚思路)
//l[]为小堆,r[]为大堆,m、n分别为两个堆的元素个数,x为待插入元素
void insertDEPA(int l[],int r[],m,n,x)
{
if(m>=n && m!=2^k-1 && [log2m]-[log2n]<=1) //[]这里暂时代表向下取整,k为二叉树高度
{
m++;
if(x>r[m/2]) //交换
{
l[m]=r[m/2];
c=m/2;
f=c/2;
while(f>0 && r[f]<x) //调大堆
{
r[c]=r[f];
c=f;
f=c/2;
}
r[c]=x;
}
else //调小堆
{
c=m;
f=c/2;
while(f>0 && l[f]>x)
{
l[c]=l[f];
c=f;
f=c/2;
}
l[c]=x;
}
else //调大堆
{
c=n;
f=c/2;
while(f>0 && r[f]<x)
{
r[c]=r[f];
c=f;
f=c/2;
}
r[c]=x;
}
}
}
双堆DEAP的更多相关文章
- hadoop面试100道收集(带答案)
1.列出安装Hadoop流程步骤 a) 创建hadoop账号 b) 更改ip c) 安装Java 更改/etc/profile 配置环境变量 d) 修改host文件域名 e) 安装ssh 配置无密码登 ...
- php 大数据量及海量数据处理算法总结
下面的方法是我对海量数据的处理方法进行了一个一般性的总结,当然这些方法可能并不能完全覆盖所有的问题,但是这样的一些方法也基本可以处理绝大多数遇到的问题.下面的一些问题基本直接来源于公司的面试笔试题目, ...
- 《Python基础教程(第二版)》学习笔记 -> 第十章 充电时刻 之 标准库
SYS sys这个模块让你能够访问与Python解释器联系紧密的变量和函数,下面是一些sys模块中重要的函数和变量: 函数和变量 描述 argv 命令行参数,包括脚本和名称 exit([arg]) ...
- 堆排序 海量数据求前N大的值
最(大)小堆的性质: (1)是一颗完全二叉树,遵循完全二叉树的所有性质. (2)父节点的键值(大于)小于等于子节点的键值 堆的存储 一般都用数组来表示堆,i结点的父结点下标就为(i – 1) / 2. ...
- 《Mathematical Olympiad——组合数学》——操作和游戏
这篇文章,我们开始对奥数中有关操作和游戏的问题进行分析和讨论,其实在信息学竞赛中涉及到的一些博弈问题(分析必胜策略)的问题(例如巴什博弈.尼姆博弈),本质上来讲,就是组合数学当中的组合游戏,并不是真正 ...
- 网上找的hadoop面试题目及答案
1.Hadoop集群可以运行的3个模式? 单机(本地)模式 伪分布式模式全分布式模式2. 单机(本地)模式中的注意点? 在单机模式(standalone)中不会存在守护进程,所有东西都运行在一个JVM ...
- LuoGu P1168 中位数
题目描述 给出一个长度为 $ N $ 的非负整数序列 $ A_i $ ,对于所有 $ 1 ≤ k ≤ (N + 1) / 2 $ ,输出 $ A_1, A_3, -, A_{2k - 1} $ 的中位 ...
- 【集合】Java集合框架
Java类库中帮助我们在程序设计中实现了传统的数据结构.本文章跳过理论部分,主要介绍如何使用标准库中的集合类. 1 将集合的接口与实现分离 Java集合类库将接口与实现分离.以队列为例: public ...
- 2017.08.08【NOIP提高组】模拟赛B组
Summary 今天的题目也不算很难,唯一一道没做出来的题目是以前做过的,太不应该了. Problem T1 油滴扩展 题目大意 给你一堆点,你准备要在这么多的点当中滴油.你可以自己安排顺序,每次滴油 ...
随机推荐
- Javascript 判断 iframe 中的变量是否为对象
Javascript 判断 iframe 中的变量是否为对象 前言 公司之前的项目中,为了实现模块化,在 web 后端使用了 iframe 来组织框架和页面.由于当时没有很好地规划,iframe 子页 ...
- 1004. 最大连续1的个数 III
1004. 最大连续1的个数 III 给定一个由若干 0 和 1 组成的数组 A,我们最多可以将 K 个值从 0 变成 1 . 返回仅包含 1 的最长(连续)子数组的长度. 示例 1: 输入:A = ...
- PDO操作大数据对象
一般在数据库中,我们保存的都只是 int . varchar 类型的数据,一是因为现代的关系型数据库对于这些内容会有很多的优化,二是大部分的索引也无法施加在内容过多的字段上,比如说 text 类型的字 ...
- 我们也有自带的缓存系统:PHP的APCu扩展
想必大家都使用过 memcached 或者 redis 这类的缓存系统来做日常的缓存,或者用来抗流量,或者用来保存一些常用的热点数据,其实在小项目中,PHP 也已经为我们准备好了一套简单的缓存系统,完 ...
- windows2012添加ssl证书
第一步: 先下载 rewrite_x64_zh-cn.msi ,并安装 (*这个是2.0版本,千万不要安装2.1版本,否则导致网站进程池全部关闭) https://www.microsoft. ...
- 鸿蒙内核源码分析(调度故事篇) | 用故事说内核调度 | 百篇博客分析OpenHarmony源码 | v9.07
百篇博客系列篇.本篇为: v09.xx 鸿蒙内核源码分析(调度故事篇) | 用故事说内核调度过程 | 51.c.h .o 前因后果相关篇为: v08.xx 鸿蒙内核源码分析(总目录) | 百万汉字注解 ...
- 从零开始部署 Yapi(Windows+Nginx)
一.环境准备及安装 本文中是以本地 Windows 作为安装环境,Nginx 做反向代理,亲测验证可用. Yapi 运行需要的环境: Nodejs,MongoDB 安装包都在文档末尾处 1.1 安装 ...
- 如何把springboot项目部署到tomcat上
前言: 开始以为打包springboot项目为war包丢到tomcat上的webapps下面就可以访问controller层的路径了,可是调用接口却报404的错误,而打开8080的主页,不加路径却可以 ...
- Ubuntu解决安装没有候选
Ubuntu解决安装没有候选 很多初次上手的小白们最头疼的可能就是一下这种问题了 这是我也载过很多次的坑,原因是软件安装源的问题,需要去软件安装设置里更改合适的源 结局方案如下:(具体操作) 有个So ...
- T-SQL——关于表数据的复制插入
目录 0. 复制表中一列插入到另外一列 1. 复制表结构和数据到自动创建的一张新表中--select into 2. 复制表中一些字段值插入到另外一张表中--insert into 3. 将存储过过程 ...