首页 > 其他分享 >堆与二叉搜索树学习笔记

堆与二叉搜索树学习笔记

时间:2023-04-30 19:11:07浏览次数:43  
标签:优先 队列 复杂度 笔记 二叉 键值 搜索 节点

部分内容来自 OI-WIKI

1. 堆

  1. 堆的定义
    堆是一棵二叉树,满足每个节点的键值都大于等于它的父亲节点或者小于等于它的父亲节点。每个节点的键值都大于等于它的父亲节点的叫小根堆,每个节点的键值都小于等于它的父亲节点的叫大根堆。
    优先队列是一种抽象数据类型,它是一种容器,里面有一些元素,这些元素也称为队列中的节点。优先队列的节点至少要包含一种性质:有序性,也就是说任意两个节点可以比较大小。为了具体起见我们假设这些节点中都包含一个键值,节点的大小通过比较它们的键值而定。优先队列有三个基本的操作:插入节点,取得最小/大节点和删除最小/大节点。
    常见的优先队列是二叉堆。
    可并堆代表一种抽象数据结构,不仅能支持以上三种操作,还支持将两个堆合为一个的操作。但是两个二叉堆合并的时间复杂度是 \(O(n)\) 的,十分不优秀。所以存在配对堆、二项堆、左偏树等可以在 \(O(\log n)\) 甚至 \(O(1)\) 的时间复杂度内进行堆的合并。
    单次操作时间复杂度:
    image
  2. 二叉堆
  3. 配对堆
  4. 左偏树

2. 二叉搜索树

  1. 二叉搜索树的定义
  2. 笛卡尔树
  3. 旋转 Treap
  4. FHQ Treap
  5. Splay

标签:优先,队列,复杂度,笔记,二叉,键值,搜索,节点
From: https://www.cnblogs.com/qwq-qaq-tat/p/17341502.html

相关文章

  • 嵌入式学习笔记汇总
    本文整理STM32、STM8和uCOS-III的所有文章链接。STM32学习笔记目录源码:mySTM32-learnSTM32学习笔记(1)——LED和蜂鸣器STM32学习笔记(2)——按键输入实验STM32学习笔记(3)——时钟系统STM32学习笔记(4)——NVIC中断优先级管理和外部中断EXTISTM32学习笔记(5)——系统定时器SysTickS......
  • Vulnhub靶机笔记2——matrix-breakout-2-morpheus
    一、介绍一个以《黑客帝国》为背景的靶场涉及内容主机发现端口服务扫描1.2不用工具实现ffuf目录爆破一句话木马反弹shellmsf,蚁剑使用图片隐写CVE-2022-0847漏洞利用二、环境攻击机:kali靶机:matrix-breakout-2-morpheus三、过程1、信息收集1.1主机存活扫描nma......
  • 基于C#的excel笔记
    一、引用的excel库1、Microsoft.Office.Interop.Excel库效果不好,代码繁琐。在执行语句时出现不能解决的BUG,usingExcel=Microsoft.Office.Interop.Excel;...Excel.Workbookworkbook=excelApp.Workbooks.Add();//X//要生成的字符串////stringinputStri......
  • 外设驱动库开发笔记53:MAX31856热偶变送器驱动
      在我们的产品中经常有需要温度检测的地方,而热电偶温度检测电路是我们常用的。热电偶温度检测的方法很多,有时出于简单方便的考虑我们会选择热偶温度变送器来实现,这一篇我们就来讨论使用MAX31856热电偶温度变送器实现温度的检测。1、功能概述  MAX31856可以对任何类型热电偶......
  • 树分治学习笔记
    一、点分治一、概述前置知识:数的重心。假设我们要统计一棵有\(n\)个节点的树上所有点对之间距离是\(k\)的有多少对。注意树上的边有长度。\(n\le10^5,k\le10^6\)。一个朴素的算法是遍历树上的所有点对,处理出距离(也就是链的长度)。时间复杂度\(O(n^2)\)。考虑优化。......
  • 笔记本自带的office哪去了?
    登录office官网点击右上角头像点击我的Microsoft账户点击上方导航栏的服务与订阅点击已购买的产品点击安装,选择版本中选择脱机安装程序下载后右键装载,双击出现的setUp.exe......
  • 软构笔记-Java Swing学习
    JavaSwing教程JavaSwing是Java平台的一个GUI工具包,提供了各种组件和工具类,用于创建漂亮的用户界面。安装JavaSwingJavaSwing是Java标准库的一部分,因此无需安装额外的软件包。只需要安装Java开发工具包(JDK),就可以开始使用JavaSwing开发GUI应用程序了。创建......
  • 《代码大全》阅读笔记
    做任何事情都需要前期准备,在软件开发中更是如此,尽管如此,还是有很多程序员接到任务后就是想着尽快编码,很多老板不重视软件开发的前期准备。要想保证一个软件的质量,在前期准备,需求分析,架构设计,编码,测试,维护等每一个环节都要重视质量。具体程序员接到任务的时候要检查一下在你之前的......
  • Java根据Integer数组(有null值)递归构造二叉树
    二叉树:publicclassTreeNode{intval;TreeNodeleft;TreeNoderight;TreeNode(){}TreeNode(intval){this.val=val;}TreeNode(intval,TreeNodeleft,TreeNoderight){this.val=val;this.l......
  • CS231N assignment 3 _ GAN 学习笔记 & 解析
    这篇文章之所以来的比较早,是因为我们机器人比赛字符识别数据集不够,想自己造点数据集其实课程内容总结所谓GAN,原理很简单,我们有一个生成器网络和鉴别器网络,生成器生成假的数据,鉴别器分辨真假,二者知己知彼互相优化自己,从而达到博弈的效果.实际操作中,我们一般是......