bite阶段性测试_数据结构

news2025/1/10 23:50:19

解决问题之前我们要了解什么是度,特别是二叉树中的度,和图论中的度的定义是不同的

什么是度

在图论中,一个节点(或称为顶点)的是指与该节点直接相连的边的数量。度是用来衡量一个节点与其他节点连接紧密程度的指标。在无向图和有向图中,度的概念有所不同:

  1. 无向图中的度: 对于无向图,一个顶点的度简单地等于连接到该顶点的边的数量。例如,如果一个顶点与三条边相连,那么该顶点的度是3。
  2. 有向图中的度: 在有向图中,度被分为两种:
    • 入度(In-degree:入度是指指向该顶点的边的数量。
    • 出度(Out-degree:出度是指从该顶点出发指向其他顶点的边的数量。

图论和多(>=2)叉树对 度 的不同定义

二叉树中,节点的度通常是指该节点拥有的子节点的数量,而不是与该节点直接相连的边的数量。因为二叉树是一种特殊的树结构

在图论中,节点的度是指与该节点直接相连的边的数量,而不涉及子节点的概念。因此,图论中的节点度和二叉树中节点的度有所不同

二叉树中,度为0的节点通常指的是叶子节点,即没有子节点的节点,而不是脱离其他顶点的节点

回归本题

树的总节点数 ( n ) 等于所有节点的度数之和再加上1

总节点数 = 1 + 叶子节点数*0 + 度为1的节点数*1 + 度为2的节点数*2

总节点数 = 叶子节点数+度为1的节点数+度为2的节点数

399 = 叶子节点数*0 + 度为1的节点数*1 + 199*2

399 = 叶子节点数+度为1的节点数+度为2的节点数

解得:叶子节点200 度为一节点0

结论:

总结点数与所有节点度数和关系:

      1. 总节点数 = 1 + 叶子节点数*0 + 度为1的节点数*1 + 度为2的节点数*2
      2. 总节点数 = 叶子节点数+度为1的节点数+度为2的节点数//包有的方程

选择排序与堆排序

选择排序是啥,堆排序为啥基于选择排序

选择排序是什么

  •   工作原理:选择排序每次从未排序的部分选择最小(或最大)的元素,然后将其放到已排序部分的末尾。
  • 特点:在每次迭代中,选择排序只需进行一次交换操作,因此比冒泡排序的交换次数少。

选择排序和冒泡排序区别

选择排序和冒泡排序思想是一样的,只是选择排序优化了实现步骤

选择排序在每次迭代中选择未排序部分的最小(或最大)元素,并将其与当前位置交换,从而减少了交换的次数

Next指向前驱?

通常,prev叫做前驱, next叫做后继节点

筛选法是啥,筛选法建堆是怎么建堆。筛选法作用

筛选法建堆是一种在堆排序算法中用于构建堆的方法。它通常是从数组的中间向前遍历,对每个非叶子节点执行一次筛选操作,使得以该节点为根的子树满足堆的性质。

具体步骤如下:

  1. 从最后一个非叶子节点开始向前遍历,直到根节点。这些非叶子节点是数组中索引为 n/2 - 1 到 0 的元素,其中 n 是数组的长度。
  2. 对于每个非叶子节点,执行一次筛选操作(也称为下沉操作):
    • 比较该节点与其左右子节点的值,找到最大(或最小)的节点。
    • 如果子节点的值大于(或小于)该节点的值,则交换两者的位置。
    • 继续递归向下进行,直到满足堆的性质为止。

通过这样的操作,可以将一个无序的数组构建成一个堆,使得堆的根节点具有最大(或最小)的值,且满足堆的性质。

堆排序怎么排来着

上述筛选法建堆排序

六大排序稳定性?

  1. 冒泡排序(Bubble Sort):稳定。
  2. 选择排序(Selection Sort):不稳定。在选择最小元素的过程中可能破坏相等元素的相对位置。
  3. 插入排序(Insertion Sort):稳定。相等元素的相对位置在排序前后不变。
  4. 快速排序(Quick Sort):不稳定。对相等元素可能会进行交换,导致相对位置变化。
  5. 归并排序(Merge Sort):稳定。在合并过程中,相等元素的相对位置保持不变。
  6. 堆排序(Heap Sort):不稳定。在堆化的过程中可能会交换相等元素的位置,导致不稳定性。

只有快排和选择排序堆排序不稳定

插入和归并都稳定

为啥选择和冒泡基本思路相同,选择却不稳定?

举个例子,考虑序列 [2a, 3, 2b],其中元素 2a 2b 相等,但是它们的相对位置是不同的。如果选择排序先选中 2a,然后将其移动到已排序序列的末尾,那么排序后的序列可能变为 [3, 2b, 2a],导致相对位置的改变,从而不满足稳定性的要求。

--------------------------------------------------------------------------

快排

快排升序,左先走/右先走?为什么?

为啥碰到10?

当升序时,普通快排一定要右先走来保证相遇点为小于等于key的点

反之,降序左先走

普通快排code

void QuickSort1(int* a, int left, int right)

{

          // 区间只有一个值或者不存在就是最小子问题

          if (left >= right)

                   return;

          // 小区间选择走插入,可以减少90%左右的递归

          if (right - left + 1 < 10)

          {

                   InsertSort(a + left, right - left + 1);

          }

          else

          {

                   int begin = left, end = right;

                   // 100 200,注意的是left不一定是0

                   // [left, right]区间中的随机数做key

                   //int randi = rand() % (right - left + 1);

                   //randi += left;

                   //Swap(&a[left], &a[randi]);

                   // 三数取中

                   int midi = GetMidi(a, left, right);

                   //printf("%d\n", midi);

                   Swap(&a[left], &a[midi]);

                   //PrintArray(a+left, right-left+1);

                   int keyi = left;

                   while (left < right)

                   {

                             // right先走,找小

                             while (left < right && a[right] >= a[keyi])

                             {

                                      --right;

                             }

                             // left再走,找大

                             while (left < right && a[left] <= a[keyi])

                             {

                                      ++left;

                             }

                             Swap(&a[left], &a[right]);

                   }

                   Swap(&a[left], &a[keyi]);

                   keyi = left;

                   // [begin, keyi-1]keyi[keyi+1, end]

                   QuickSort1(a, begin, keyi - 1);

                   QuickSort1(a, keyi + 1, end);

          }

}

挖坑法

前后指针法

-------------------------------------------------------------------------------

归并排序code

大体思路没问题,还差一点没写完不影响理解

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1636052.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

CSS移动端弹性布局

一级标题 二倍图 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>背景图片</title><styl…

一个单例模式中使用std::unique_ptr引起的莫名其妙的COFF损坏的问题(未解决)

使用static std::unique_ptr和static std::shared_ptr都不行struct IElementAgendaEvents {//! Called to allow listeners to modify the agenda by adding/removing entries before applying tool operation. Return true if entries added or invalidated.virtual bool …

【机器学习】视觉基础模型的三维意识:前沿探索与局限

视觉基础模型的三维意识&#xff1a;前沿探索与局限 一、引言二、视觉基础模型的三维意识三、当前模型的局限性四、实验与结果五、总结与展望 大规模预训练的进展已经产生了具有强大能力的视觉基础模型。最近的模型不仅可以推广到任意图像的训练任务&#xff0c;而且它们的中间…

spring boot 基础案例【3】构建RESTful API与单元测试

教程1 案例教程 案例仓库 在线编程 教程2 基础教程 教程仓库 在线编程 本案例所在的仓库 本案例所在的文档 进入正文 1.文件目录 1. Chapter21Application.java 地址&#xff1a;chapter2-1/src/main/java/com/didispace/chapter21/Chapter21Application.java package com.d…

CSS @keyframes 动画:颜色变化、背景旋转与放大缩小

在CSS中&#xff0c;keyframes 是一个强大的工具&#xff0c;它允许我们创建复杂的动画效果。今天&#xff0c;我们将一起探索如何使用 keyframes 来实现颜色变化、背景旋转以及放大缩小的动画效果。 动画会在 2 秒内循环播放&#xff0c;并在不同的时间点改变盒子的背景颜色和…

【JVM】简述类加载器及双亲委派机制

双亲委派模型&#xff0c;是加载class文件的一种机制。在介绍双亲委派模型之前&#xff0c;我需要先介绍几种类加载器&#xff08;Class Loader&#xff09;。 1&#xff0c;类加载器 Bootstrap&#xff0c;加载lib/rt.jar&#xff0c;charset.jar等中的核心类&#xff0c;由…

VS code 同步odata服务

在做UI5得开发过程中&#xff0c;经常会出现odata需要更新 那么已经加载过得项目如何去跟新odata服务呢 可以通过如下步骤 1.右键打开应用信息 2.找到manage service models 3.点击编辑 4.选中 刷新并保存

前端发起网络请求的几种常见方式(XMLHttpRequest、FetchApi、jQueryAjax、Axios)

摘要 前端发起网络请求的几种常见方式包括&#xff1a; XMLHttpRequest (XHR)&#xff1a; 这是最传统和最常见的方式之一。它允许客户端与服务器进行异步通信。XHR API 提供了一个在后台发送 HTTP 请求和接收响应的机制&#xff0c;使得页面能够在不刷新的情况下更新部分内容…

【YOLOv9改进[Conv]】使用基于Haar的小波变换Down_wt处理替换模型结构中的Conv和ADown 实践

目录 一 基于Haar的小波变换 二 使用基于Haar的小波变换Down_wt处理替换模型结构中的Conv和ADown 实践 1 整体修改 2 配置文件 3 训练 三 报错处理 一 基于Haar的小波变换 Haar小波是最简单的小波形式之一&#xff0c;具有易于计算和实现的优点。使用二维离散小波变换&a…

TCP重传,滑动窗口,流量控制,拥塞控制

TCP重传&#xff0c;滑动窗口&#xff0c;流量控制&#xff0c;拥塞控制 TCP重传机制&#xff1a; 超时重传快速重传SACKD-SACK 通过序列号与确认应答判断是否要重传 超时重传&#xff1a; 超过指定时间没有收到确认应答报文&#xff0c;就会重发该数据 触发超时重传的情况…

k8s 资源组版本支持列表

1 kubernetes的资源注册表 kube-apiserver组件启动后的第一件事情是将Kubernetes所支持的资源注册到Scheme资源注册表中,这样后面启动的逻辑才能够从Scheme资源注册表中拿到资源信息并启动和运行API服务。 kube-apiserver资源注册分为两步:第1步,初始化Scheme资源注册表;…

【论文笔记】Training language models to follow instructions with human feedback A部分

Training language models to follow instructions with human feedback A 部分 回顾一下第一代 GPT-1 &#xff1a; 设计思路是 “海量无标记文本进行无监督预训练少量有标签文本有监督微调” 范式&#xff1b;模型架构是基于 Transformer 的叠加解码器&#xff08;掩码自注意…

【百度Apollo】探索自动驾驶:百度Apollo视觉感知模块的实践与创新

&#x1f3ac; 鸽芷咕&#xff1a;个人主页 &#x1f525; 个人专栏: 《linux深造日志》《粉丝福利》 ⛺️生活的理想&#xff0c;就是为了理想的生活! 文章目录 引入一、百度Apollo视觉感知模块概述二、启动感知模块步骤一&#xff1a;进入 Docker 环境并启动 Dreamview步骤二…

请编写函数fun,该函数的功能是:统计各年龄段的人数。N个年龄通过调用随机函数获得,并放在主函数的age数组中;

本文收录于专栏:算法之翼 https://blog.csdn.net/weixin_52908342/category_10943144.html 订阅后本专栏全部文章可见。 本文含有题目的题干、解题思路、解题思路、解题代码、代码解析。本文分别包含C语言、C++、Java、Python四种语言的解法完整代码和详细的解析。 题干 请编…

我开始接单/兼职/搞副业/建设个人社区,为自己谋后路了。

我开始接单/兼职/搞副业/建设个人社区&#xff0c;为自己谋后路了。 简述 大家好&#xff0c;我是小荣&#xff0c;一个前端开发程序员。我最近开始在业余时间接私单了&#xff0c;也在想一些能够带来成长&#xff0c;收入的副业&#xff0c;主要也是为了自己谋后路&#xff…

ctfshow——SQL注入

文章目录 SQL注入基本流程普通SQL注入布尔盲注时间盲注报错注入——extractvalue()报错注入——updataxml()Sqlmap的用法 web 171——正常联合查询web 172——查看源代码、联合查询web 173——查看源代码、联合查询web 174——布尔盲注web 176web 177——过滤空格web 178——过…

【算法刷题 | 贪心算法09】4.30(单调递增的数字)

文章目录 16.单调递增的数字16.1题目16.2解法&#xff1a;贪心16.2.1贪心思路16.2.2代码实现 16.单调递增的数字 16.1题目 当且仅当每个相邻位数上的数字 x 和 y 满足 x < y 时&#xff0c;我们称这个整数是单调递增的。 给定一个整数 n &#xff0c;返回 小于或等于 n 的…

jenkins转载文本

基于Docker容器DevOps应用方案 企业业务代码发布系统 一、企业业务代码发布方式 1.1 传统方式 以物理机或虚拟机为颗粒度部署部署环境比较复杂&#xff0c;需要有先进的自动化运维手段出现问题后重新部署成本大&#xff0c;一般采用集群方式部署部署后以静态方式展现 1.2 容…

ubuntu部署sonar与windows下使用sonar-scanner

ubuntu部署sonar与windows下使用sonar-scanner sonar部署java安装mysql安装配置sonarqube 插件安装sonar-scanner使用简单使用 sonar部署 使用的是sonarqube-7.5&#xff0c;支持的java环境是jdk8&#xff0c;且MySQL版本 >5.6 && <8.0 java安装 打开终端&…

【初识Redis】

初识Redis Redis&#xff08;Remote Dictionary Server&#xff09;是一个开源的内存数据库&#xff0c;它提供了一个高性能的键值存储系统&#xff0c;并且支持多种数据结构&#xff0c;包括字符串、哈希、列表、集合和有序集合等。Redis的特点包括&#xff1a; 内存存储&…