bite阶段性测试_数据结构

2024-05-01 06:28

本文主要是介绍bite阶段性测试_数据结构,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

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

什么是度

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

  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

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

这篇关于bite阶段性测试_数据结构的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/950933

相关文章

Nginx设置连接超时并进行测试的方法步骤

《Nginx设置连接超时并进行测试的方法步骤》在高并发场景下,如果客户端与服务器的连接长时间未响应,会占用大量的系统资源,影响其他正常请求的处理效率,为了解决这个问题,可以通过设置Nginx的连接... 目录设置连接超时目的操作步骤测试连接超时测试方法:总结:设置连接超时目的设置客户端与服务器之间的连接

Go语言中三种容器类型的数据结构详解

《Go语言中三种容器类型的数据结构详解》在Go语言中,有三种主要的容器类型用于存储和操作集合数据:本文主要介绍三者的使用与区别,感兴趣的小伙伴可以跟随小编一起学习一下... 目录基本概念1. 数组(Array)2. 切片(Slice)3. 映射(Map)对比总结注意事项基本概念在 Go 语言中,有三种主要

如何测试计算机的内存是否存在问题? 判断电脑内存故障的多种方法

《如何测试计算机的内存是否存在问题?判断电脑内存故障的多种方法》内存是电脑中非常重要的组件之一,如果内存出现故障,可能会导致电脑出现各种问题,如蓝屏、死机、程序崩溃等,如何判断内存是否出现故障呢?下... 如果你的电脑是崩溃、冻结还是不稳定,那么它的内存可能有问题。要进行检查,你可以使用Windows 11

性能测试介绍

性能测试是一种测试方法,旨在评估系统、应用程序或组件在现实场景中的性能表现和可靠性。它通常用于衡量系统在不同负载条件下的响应时间、吞吐量、资源利用率、稳定性和可扩展性等关键指标。 为什么要进行性能测试 通过性能测试,可以确定系统是否能够满足预期的性能要求,找出性能瓶颈和潜在的问题,并进行优化和调整。 发现性能瓶颈:性能测试可以帮助发现系统的性能瓶颈,即系统在高负载或高并发情况下可能出现的问题

字节面试 | 如何测试RocketMQ、RocketMQ?

字节面试:RocketMQ是怎么测试的呢? 答: 首先保证消息的消费正确、设计逆向用例,在验证消息内容为空等情况时的消费正确性; 推送大批量MQ,通过Admin控制台查看MQ消费的情况,是否出现消费假死、TPS是否正常等等问题。(上述都是临场发挥,但是RocketMQ真正的测试点,还真的需要探讨) 01 先了解RocketMQ 作为测试也是要简单了解RocketMQ。简单来说,就是一个分

【数据结构】——原来排序算法搞懂这些就行,轻松拿捏

前言:快速排序的实现最重要的是找基准值,下面让我们来了解如何实现找基准值 基准值的注释:在快排的过程中,每一次我们要取一个元素作为枢纽值,以这个数字来将序列划分为两部分。 在此我们采用三数取中法,也就是取左端、中间、右端三个数,然后进行排序,将中间数作为枢纽值。 快速排序实现主框架: //快速排序 void QuickSort(int* arr, int left, int rig

【测试】输入正确用户名和密码,点击登录没有响应的可能性原因

目录 一、前端问题 1. 界面交互问题 2. 输入数据校验问题 二、网络问题 1. 网络连接中断 2. 代理设置问题 三、后端问题 1. 服务器故障 2. 数据库问题 3. 权限问题: 四、其他问题 1. 缓存问题 2. 第三方服务问题 3. 配置问题 一、前端问题 1. 界面交互问题 登录按钮的点击事件未正确绑定,导致点击后无法触发登录操作。 页面可能存在

业务中14个需要进行A/B测试的时刻[信息图]

在本指南中,我们将全面了解有关 A/B测试 的所有内容。 我们将介绍不同类型的A/B测试,如何有效地规划和启动测试,如何评估测试是否成功,您应该关注哪些指标,多年来我们发现的常见错误等等。 什么是A/B测试? A/B测试(有时称为“分割测试”)是一种实验类型,其中您创建两种或多种内容变体——如登录页面、电子邮件或广告——并将它们显示给不同的受众群体,以查看哪一种效果最好。 本质上,A/B测

6.1.数据结构-c/c++堆详解下篇(堆排序,TopK问题)

上篇:6.1.数据结构-c/c++模拟实现堆上篇(向下,上调整算法,建堆,增删数据)-CSDN博客 本章重点 1.使用堆来完成堆排序 2.使用堆解决TopK问题 目录 一.堆排序 1.1 思路 1.2 代码 1.3 简单测试 二.TopK问题 2.1 思路(求最小): 2.2 C语言代码(手写堆) 2.3 C++代码(使用优先级队列 priority_queue)

《数据结构(C语言版)第二版》第八章-排序(8.3-交换排序、8.4-选择排序)

8.3 交换排序 8.3.1 冒泡排序 【算法特点】 (1) 稳定排序。 (2) 可用于链式存储结构。 (3) 移动记录次数较多,算法平均时间性能比直接插入排序差。当初始记录无序,n较大时, 此算法不宜采用。 #include <stdio.h>#include <stdlib.h>#define MAXSIZE 26typedef int KeyType;typedef char In