问题背景

Skew Heaps是对Leftist Heaps的改进,Skew Heaps也是一个用于快速合并的数据结构,但无需存储NPL信息,节省了空间。虽然不能保证是左倾树,但是通过无条件交换左右子树,达到平摊意义上的左倾(因为左式堆的合并都是沿最右路径进行的,所以合并之后最右路径长度必然增加,影响操作效率,所以将其与左子树交换)。

Skew Heaps的定义

Skew Heaps可以递归地定义如下:

1、只有一个元素的堆是斜堆(base case)。

2、两个斜堆通过斜堆的合并操作,得到的结果仍然是斜堆。

Skew Heaps的merge操作

时间复杂度:摊还时间为O(logN),最坏情况为O(N)。

递归实现(和Leftist Heaps一样,只是交换变成无条件的了):

1、如果一个空左倾堆和一个非空左倾堆合并,返回非空左倾堆(递归中的base case)。

2、如果两个左倾堆都非空,那么比较两个根节点。取较小的节点为新的根节点(为了符合堆的优先级要求),合并较小根节点堆的右子堆和较大根节点堆。

3、交换右子堆和左子堆。

非递归实现(更繁琐,并且需要外部排序):

1、把所有节点的右子树分离出来。

2、把分离出来的子树按根节点元素升序(广义上的升序)排列。

3、从后向前,把倒数第二个树左右子树交换,把最后一个树作为倒数第二个树的左子树。

(可以用栈实现,如果降序排列的话就可以用堆实现)

一个有趣的事

The result of inserting keys 1 to 2^k -12​k​​−1 for any k>4k>4 in order into an initially empty skew heap is always a full binary tree.

Reference

斜堆 维基百科 (有非递归算法的介绍)

Skew Heaps相关推荐

  1. [题集]Lecture 4. Leftist Heaps and Skew Heaps

    1.A leftist heap with the null path length of the root being r must have at least 2 r + 1 − 1 2^{r+1 ...

  2. 【一看就懂】数据结构以及各种算法的可视化演示工具

    文章目录 大家好,我是只谈技术不剪发的 Tony 老师. 最近发现了一个宝藏网站:Data Structure Visualizations,提供了一个在线的可视化工具,可以交互式地演示各种数据结构和 ...

  3. 百练 2973 Skew数 解题报告

    思路: 计算出每一个skew数的不同位数表示的权值,然后用该位与权值相乘.用int数组来装权值,用char数组来装skew数. 代码: #include<stdio.h> #include ...

  4. css3价格斜切_CSS3倾斜skew()方法_CSS3教程_绿叶学习网

    9.5 倾斜skew()方法 作者(helicopter) 赞(22) 浏览(26434) 说明:原创教程,禁止转载 一.skew()方法 在CSS3中,我们可以使用skew()方法将元素倾斜显示. ...

  5. R语定义函数对宽分布(wide distribution )、有偏分布(skew distribution)的数据进行对数变换(符号对数变换函数、signed log transformation)

    R语言自定义函数对宽分布(wide distribution ).有偏分布(skew distribution)的数据进行对数变换(符号对数变换函数.signed log transformation ...

  6. 数字电路时钟问题——Jitter与Skew区别

    在博文:时序分析之静态分析基础中提到了一次时钟偏斜问题,只是一笔带过而已,这里重新拿过来看看,并且添加时钟抖动(Jitter)相关知识点,这是学习FPGA经常遇到的名词. 先贴出来时钟偏斜的定义: 时 ...

  7. 数字电路中时钟抖动 Jitter 和 偏移 Skew

    系统时序设计中对时钟信号的要求是非常严格的,因为我们所有的时序计算都是以恒定的时钟信号为基准.但实际中时钟信号往往不可能总是那么完美,会出现抖动(Jitter)和偏移(Skew)问题. 所谓抖动(ji ...

  8. Canvas之translate,scale,rotate,skew

    Canvas之translate,scale,rotate,skew Canvas大致可以分为三类: save,restore等与层相关的保存和回滚相关方法 scale,rotate,clipXXX等 ...

  9. PAT甲级1147 Heaps (30 分):[C++题解]堆、树的遍历、dfs、完全二叉树建树

    文章目录 题目分析 题目来源 题目分析 来源:acwing 分析:给定完全二叉树,判断是否是堆,需要区分大根堆,小根堆.后面是输出后序遍历. AC代码 #include<bits/stdc++. ...

  10. 怎么利用css调整区块大小,使用CSS3 transform:skew方法实现的倾斜区块分割

    CSS 语言: CSSSCSS 确定 body { background: #FF7A2E; color: white; font-family: Open sans, Helvetica Neue; ...

最新文章

  1. 推荐5最佳免费图像注释工具
  2. HH的项链 (求区间内有多少个不同的数字)
  3. Eclipse打包工具 FatJAR
  4. Mapped Statements collection does not contain value for TaskMapper.selectByPrimaryKey
  5. 从零开始入门 K8s | K8s 的应用编排与管理
  6. 傅里叶变换处理音频c++_积分变换(1)——傅里叶级数
  7. 7 个让您需要渐进式 Web 应用程序做项目开发的理由
  8. mysql 1005 - can't create table_关于创建数据表报错一例(ERROR 1005 Can’t create table (errno: 121))...
  9. 匈牙利算法-指派问题、二分图问题等
  10. Java实现正整数数组的最小拼接数
  11. 算法工程师进化-基础理论
  12. hadoop远程调试
  13. 【NLP】第6章 使用 Transformer 进行机器翻译
  14. 常用的的身份证校验方法
  15. 关于消息队列的一些思考
  16. Python刷点击率,下载量代码
  17. Vue2积分商城PC端项目(六)
  18. 【matlab应用】:生成老电影海报
  19. STM32 W5500 OTA功能 - bootloader及app的设计和实现
  20. 玉石效果?——UnityShader学习笔记

热门文章

  1. Pr 音频效果参考:其它
  2. python批量生成姓名_Python 批量生成中文姓名(百家姓)
  3. STREAM内存带宽测试工具介绍及其内部实现
  4. 刻录光驱只能读不能写怎么办?来看看!
  5. 单片机和微型计算机硬件组成的异同,单片机和嵌入式的区别是什么
  6. SecureCRT 经典配色方案
  7. java程序猿面试问缺点怎么回答_当程序员面试被问“你的缺点是什么?”你该怎么回答?...
  8. flutter微信登录集成
  9. 圆锥曲线解答题实用结论
  10. 89C51单片机内部结构深度解析