首页 > 其他分享 >CS61B学习日记2

CS61B学习日记2

时间:2023-09-08 12:56:20浏览次数:37  
标签:结点 插入 BST CS61B 旋转 学习 链接 2.2 日记

今天学习了B树和红黑树的概念
总结:
1.在cs61b中B树分为2-3树和2-3-4树:

  1. 其中主要的关键点是定L的大小。L是指一个节点最多拥有的元素个数。
  2. B树的不变量(我记作为限制):
    2.1) 每个叶子结点到根的路径数相同。
    2.2) 每个包含元素个数为k的非叶子结点,其必有链接k+1个叶子结点
    2.本课程中将的红黑树称为左倾红黑树(LLRBT:Left-Leaning Red Black Tree)。
    其思想是利用旋转方法使LLRBT能够转变为BST,并且每条左红链接能够和一个2-3数进行对应。
    2.1 限制:
    1.在2-3树的基础之上
    2 每个新插入的节点都使用红链接线。
    LLRBT的高度不超过(对应2-3树的树高X2+1)
    2.2 旋转思想:
    1)旋转:
    1.1)左上旋:将旋转点作为右子树的左孩子(其中右子树的原本的左孩子作为旋转点的右孩子)
    1.2)右下旋:将旋转点作为左子树的右孩子(其中左子树的原本的右孩子作为旋转点的左孩子)
    2.3 新插入点安装BST插入后树的形状需要进行调整的情况:
    2.1)插入点使树变为右倾:此时利用左上旋将其转变为左倾
    2.2)插入点连续左倾:此时利用右旋将其连续左倾节点变为同兄弟节点
    2.3)颜色反转:也就是接2.2情况进行调整树后,因为在LLRBT中没有右红链接线,我们将把子链接的红链接线变为黑链接线,而父结点的与爷结点的黑链接线转变为左红链接线
    不过需要注意的是,在红黑树中新插入点需要进行转换的情况会有很多。需要根据情况不断调整树的形状为BST。
    最主要的是,经过这些树的不断变形,其结点仍符合BST的节点规则(左孩子值<父结点值<右孩子值)。
    复杂度的话为logN。
    ps:小感叹一下前辈们巧妙的思想。

标签:结点,插入,BST,CS61B,旋转,学习,链接,2.2,日记
From: https://www.cnblogs.com/duuuuu17/p/17687288.html

相关文章

  • 安装强化学习包gym报错问题及解决方法
    安装命令pipinstallgymnasium[all]如遇如下报错error:command'swig.exe'failed:Nosuchfileordirectory[endofoutput]note:Thiserrororiginatesfromasubprocess,andislikelynotaproblemwithpip.ERROR:Failedbuildingwheelfo......
  • 机器学习算法原理实现——使用梯度下降求解Lasso回归和岭回归
    本文本质上是在线性回归的基础上进行扩展,加入了正则化而已!机器学习算法原理实现——使用梯度下降求解线性回归 正则化在机器学习中是一种防止过拟合的技术,它通过在损失函数中添加一个惩罚项来限制模型的复杂度。举一个实际的例子,假设你正在训练一个机器学习模型来预测房价。你......
  • Python学习日记 京东工单信息获取
    importrequestsimportcsvimportrandomf=open('vc.csv',mode='a',encoding='utf-8',newline='')csv_writer=csv.DictWriter(f,fieldnames=['客户姓名','订单编号','pin'])csv_wri......
  • 学习鸿蒙应用开发
    鸿蒙应用开发是华为公司推出的一种全场景分布式操作系统,它提供了丰富的开发框架和工具,用于开发应用程序。应用程序生命周期:在鸿蒙应用开发中,应用程序的生命周期是指应用程序从启动到关闭的整个过程。鸿蒙应用的生命周期包括以下几个阶段:应用创建:当用户启动应用程序时,系统会创建应......
  • Tomcat架构学习
    1、Tomcat的两个核心功能:处理Socket连接,负责负责网络字节流与Request和Response对象的转化。加载和管理Servlet,以及处理具体Request请求。Tomct设计了两个核心组件连接器(Connector)和容器(Container)来分别做这两件事情。连接器负责对外交流,容器负责对内处理。单独的连接器或者容......
  • 学习使用双指针(leetcode)
    一、K和数对的最大数目(JAVA)给你一个整数数组nums和一个整数k。每一步操作中,你需要从数组中选出和为k的两个整数,并将它们移出数组。返回你可以对数组执行的最大操作数。示例1:输入:nums=[1,2,3,4],k=5输出:2解释:开始时nums=[1,2,3,4]:-移出1和4,......
  • Go学习笔记3
    九、错误处理1.defer+recover机制处理异常错误展示错误:发现:程序中出现错误/恐慌以后,程序被中断,无法继续执行。错误处理/捕获机制:内置函数recover:2.自定义错误需要调用errors包下的New函数:函数返回error类型3.panic有一种情况:程序出现错误以后,后续代码就没有必要执......
  • Qemu源码分析(1)—Apple的学习笔记
    一,前言开始qemu源码学习之路。从简书切换到此,真的是一键导入,太快了。二,从某个点开始分析源码Type_new函数就是把TypeInfo内容复制到TypeImpl。1.总的来说type_register_internal就是创建一个TypeImpl类,然后添加到hash表中。staticTypeImpl*type_register_internal(constTypeInfo......
  • 《Linux从入门到精通》(第2版 刘忆智 等著) 学习感受
    这本书确实是一本非常基础的入门书籍,网上评价比较高,但是它的内容是否真的有那么好,我感觉也就那样了,毕竟是非常基础的书籍,怎么写也很难写出花来。对于基本的使用不同的书籍描述应该也差不多(我没有认真看过其他书籍......
  • 关于传统迁移学习的一点概念
    (来源于一位学姐的口述)迁移学习的目标:训练数据集A迁移到测试数据集B,它们的数据分布不一样。方法1:特征空间的对齐。比如重要性采样,强行让两个分布比较接近。方法2:把特征分为领域无关、领域相关的部分,把这两部分提取出来。领域就是图片风格之类的东西,一些可能会影响数据......