当前位置: 首页 > news >正文

排序学习整理(1)

1.排序的概念及运用

1.1概念

排序:所谓排序,就是使⼀串记录,按照其中的某个或某些关键字的大小,递增或递减的排列起来的操作,以便更容易查找、组织或分析数据。

1.2运用

 购物筛选排序

院校排名

1.3常见排序算法

2.实现常见排序算法

int a[] = {5, 3, 9, 6, 2, 4, 7, 1, 8};

2.1 插入排序

把待排序的记录按其关键码值的大小逐个插入到⼀个已经排好序的有序序列中,直到所有的记录插入完为止,得到⼀个新的有序序列 。

2.1.1 直接插入排序

直接插入排序(Direct Insertion Sort)是一种简单直观的排序算法,它通过逐步构建有序序列,将未排序部分的元素插入到已排序部分的适当位置,直到整个数组排序完成。

基本思想

1.将数组分为 已排序部分 和 未排序部分。

                初始时,已排序部分只有第一个元素。

                未排序部分为剩余的元素。

2.依次从未排序部分取出一个元素,插入到已排序部分的正确位置。

3.重复以上操作,直到未排序部分为空。

算法步骤

1.从数组的第二个元素(索引为 1)开始,依次向后遍历。

                对当前元素,在已排序部分从后向前查找其插入位置:

                如果已排序部分的元素大于当前元素,则将其向后移动。

2.找到插入位置后,将当前元素放入。

3.重复此过程,直到所有元素排序完成。

当插入第 i(i>=1) 个元素时,前⾯的 array[0],array[1],…,array[i-1] 已经排好序,此时用 array[i] 的排序码与 array[i-1],array[i-2],… 的排序码顺序进行比较,找到插入位置即将 array[i] 插入,原来位置上的元素顺序后移
代码实现
void InsertSort(int* a, int n) {for (int i = 1; i < n; i++) {// 当前要插入的元素int tmp = a[i];// 已排序部分的最后一个元素的索引int j = i - 1;// 从后向前查找插入位置while (j >= 0 && a[j] > tmp) {a[j + 1] = a[j]; // 后移元素j--;}// 将当前元素插入到正确的位置a[j + 1] = tmp;}
}
特性总结
算法复杂度
  1. 时间复杂度
    • 最坏情况(数组逆序):O(n^2)
    • 最好情况(数组已排序):O(n)
    • 平均情况:O(n^2)
  2. 空间复杂度:原地排序,不需要额外的辅助空间,空间复杂度为 O(1)
  3. 稳定性:直接插入排序是稳定的,因为在插入过程中不会改变相等元素的相对顺序。

优缺点

优点

  1. 简单直观:实现容易,适合小规模数据。
  2. 性能良好:当数组接近有序时,插入排序的效率很高,接近 O(n)

缺点:

  1. 效率低下:对大规模、随机分布的数组排序效率较低,时间复杂度较高。
  2. 大量数据移动:当数组逆序时,几乎每次插入都需要移动大量元素。

适用场景
  1. 数据量较小(如 n <= 100)时,插入排序是一种简单有效的选择。
  2. 数据本身接近有序时(如几乎按升序排列),插入排序效率很高。

2.1.2 希尔排序 

希尔排序又称缩小增量法是一种基于插入排序的改进算法,得名于其发明者 Donald Shell。它通过分组和逐步缩小分组间距(增量),使得数据能够更快地接近有序,从而提高排序效率。

基本思想

先选定⼀个整数(通常是gap = n/3 + 1),把待排序文件所有记录分成各组,所有的距离相等的记录分在同⼀组内,并对每⼀组内的记录进⾏排序,然后gap = gap/3 + 1得到下⼀个整数,再将数组分成各组,进入插入排序,当gap = 1时,就相当于直接插入排序。

它是在直接插入排序算法的基础上进行改进而来的,综合来说它的效率肯定是要高于直接插入排序算法的。

算法步骤
  1. 初始化 gap = n / 3 + 1,其中 n 是数组的长度。
  2. 按照当前的 gap 将数组分组,对每组进行插入排序。
  3. 缩小 gap,继续分组排序,直到 gap = 1
  4. gap = 1 时,进行最后一次插入排序,数组有序。

 

代码实现
void ShellSort(int* a, int n) {int gap = n;// 缩小增量,直到 gap == 1while (gap > 1) {gap = gap / 3 + 1;// 分组for (int group = 0; group < gap; group++) { // 控制每组// 每组独立进行插入排序for (int i = group + gap; i < n; i += gap) {int tmp = a[i];int j = i - gap;while (j >= group && a[j] > tmp) {a[j + gap] = a[j];j -= gap;}a[j + gap] = tmp;}}}
}

显式地将数组分组,每组独立排序后再继续调整增量 gap,这种更好理解分组排序的原理,但代码稍显冗长,所以我一般用这种

void ShellSort1(int* a, int n) {int gap = n;// 缩小增量,直到 gap == 1while (gap > 1) {gap = gap / 3 + 1;// 从 gap 开始,模拟插入排序for (int i = gap; i < n; i++) {int tmp = a[i]; // 当前待插入的元素int j = i - gap;// 插入排序逻辑,按 gap 步长比较和移动while (j >= 0 && a[j] > tmp) { // 在同组中向前查找a[j + gap] = a[j]; // 将较大的元素后移j -= gap; // 按 gap 步长继续比较}a[j + gap] = tmp; // 插入到合适位置}}
}

这种方法也叫“简单希尔排序”(Simple Shell Sort),或者直接叫并着走,它直接在外层控制增量 gap,然后在整个数组中按步长进行插入排序,逻辑比较直观,效率高。这种实现方法更贴近希尔排序的本质,适合直接应用于实际场景。

它的核心思想是

  • 希尔排序的分组本质上是用 步长 gap 控制哪些元素属于一个组。

    • 在并着走的实现中,假设 gap = 3
      • 对于索引为 0, 3, 6, 9... 的元素,它们属于第一组。
      • 对于索引为 1, 4, 7, 10... 的元素,它们属于第二组。
      • 对于索引为 2, 5, 8, 11... 的元素,它们属于第三组。
    • 并着走的逻辑是遍历整个数组,隐式地让这些组在同一个循环中排序。
  • gap 的控制下:

    • 每个位置 i 的元素 a[i],都会和同组的前一个元素(位置 i - gap)进行比较。
    • 如果需要交换位置,就不断向前检查,直到找到合适位置。
特性总结
算法复杂度

1.时间复杂度

                最坏情况:O(n^2)(不理想的增量序列)。

                平均情况:O(n^(3/2)) 或更优(根据增量序列)。

                最好情况:接近 O(n)

可以分成内外层来分析

外层循环(控制增量 gap):应该能直接看出来吧,无疑问的O(log(n)),就是增量序列的长度。

内层循环(分组插入排序):

假设⼀共有n个数据,合计gap组,则每组为n / gap个;在每组中,插入移动的次数最坏的情况下为 1 + 2 + 3 + .... + ( n / gap− 1)),⼀共是gap组,因此: 1 + 2 + 3 + .... + ( n / gap− 1))
总计最坏情况下移动总数为: gap ∗ (1 + 2 + 3 + .... + (n / gap − 1 ))
gap取值有(以除3为例):n / 3  n / 9  n / 27 ......  2  1
  • 当gap为n / 3时,移动总数为: n / 3 * (1 + 2) = n
  • 当gap为n / 9时,移动总数为: n / 9 * (1 + 2 + 3 + .... + 8) = (n / 9) * (8 (1 + 8) / 2)= 4n
  • 最后⼀趟,gap=1,即直接插入排序,内层循环排序消耗为n

可知,比较次数是先增加再下降的,或者画一张曲线图更好理解

因此,希尔排序在最初和最后的排序的次数都为n,即前⼀阶段排序次数是逐渐上升的状态,当到达某⼀顶点时,排序次数逐渐下降至n,而该顶点的计算暂时无法给出具体的计算过程
所以,目前其实没有明确的希尔排序的时间复杂度,普遍认为的话是在 O(n^1.3) ,这里我们引用充当教科书较多的 《数据结构(C语言版)》--- 严蔚敏书中给出的时间复杂度的解释

 

2.空间复杂度:使用原地排序,额外空间复杂度为 O(1)

3.稳定性不稳定,因为在分组时可能会打乱相同元素的相对顺序。


优缺点

优点

  1. 简单易实现。
  2. 对中等规模的数组(如 1 万以下)性能较好。
  3. 在基本有序的数组上效率较高。

缺点

  1. 不稳定,不能保证相同元素的顺序。
  2. 对非常大的数组,效率不如快速排序。

增量序列的选择
  • 希尔增量gap = gap / 3 + 1
  • Hibbard增量gap = 2^k - 1
  • Sedgewick增量gap = 9 * 4^i - 9 * 2^i + 1 等。
  • 增量序列的选择会显著影响希尔排序的性能。

适用场景
  1. 数据规模适中(几百到几万)。
  2. 数据分布无规律,但需要排序效率较高的场景。
  3. 对性能要求高,但稳定性不重要的场景。

2.2 选择排序 

每⼀次从待排序的数据元素中选出最小或最大的一个元素,存放在序列的起始位置,直到全部待排序的数据元素排完 。

2.2.1 直接选择排序 

直接选择排序(Selection Sort)是一种简单的排序算法,其基本思想是每次从待排序的序列中选择最小(或最大)元素,将其放到已排序序列的末尾。该算法属于交换排序类,通过多次选择最小(或最大)元素并与当前序列中的元素交换来逐步完成排序。

基本思想
  1. 选择最小元素:在每一轮中,找到剩余未排序部分的最小元素。
  2. 交换位置:将找到的最小元素与当前已排序部分的末尾元素交换位置。
  3. 重复:每次排好一个元素后,缩小待排序部分的范围,继续执行选择和交换操作,直到所有元素排序完成。
算法步骤 
  1. 假设数组长度为 n,开始时将整个数组看作未排序部分。
  2. 从第一个元素开始,扫描剩余部分,找到最小的元素。
  3. 将最小元素与当前待排序部分的第一个元素交换。
  4. 重复此过程,直到排序完成。
1. 在元素集合 array[i]--array[n-1] 中选择关键码最大(小)的数据元素
2. 若它不是这组元素中的最后一个(第一个)元素,则将它与这组元素中的最后一个(第一个)元素
交换
3. 在剩余的 array[i]--array[n-2](array[i+1]--array[n-1]) 集合中,重复上述步骤,直到集合剩余 1 个元素
代码实现
void SelectionSort(int* a, int n) {// 外层循环控制已排序部分的末尾for (int i = 0; i < n - 1; i++) {int minIndex = i;// 内层循环在未排序部分中寻找最小值for (int j = i + 1; j < n; j++) {if (a[j] < a[minIndex]) {minIndex = j;  // 记录最小元素的索引}}// 交换最小元素与当前已排序部分的下一个元素if (minIndex != i) {int temp = a[i];a[i] = a[minIndex];a[minIndex] = temp;}}
}
特性总结
算法复杂度

1.时间复杂度

                最坏情况(数组逆序):O(n^2)

                最好情况(数组已排序):O(n^2)(即数组已经排序,选择排序仍需执行完整的循环)

                平均情况O(n^2)

2.空间复杂度原地排序:不需要额外的辅助空间,空间复杂度为 O(1)

3.稳定性不稳定:在排序过程中可能会改变相等元素的相对顺序,因为会交换位置。


优缺点

优点

  1. 简单直观:直接选择排序算法的实现简单,易于理解,适合小规模数据。
  2. 空间效率高:只使用常数级的额外空间,内存开销小。

缺点

  1. 效率低下:由于时间复杂度为 O(n^2),对于大规模数据,性能较差。
  2. 不稳定:相同元素的顺序可能被改变,导致排序不稳定。
  3. 交换次数较多:每次找到最小元素后都会交换,可能导致不必要的交换操作。

适用场景
  1. 数据量较小(如 n <= 100)时,选择排序是一种简单有效的排序方法,适合小规模数据的排序。
  2. 数据本身接近有序时,直接选择排序的性能相对较好,尽管时间复杂度为 O(n^2),但相较于其他 O(n^2) 算法,选择排序的交换次数较少。

2.2.2 堆排序

堆排序(Heap Sort)是一种基于堆数据结构的排序算法,堆是一种完全二叉树,满足堆的性质:

  • 最大堆(Max Heap):父节点的值大于或等于其子节点的值,根节点是最大元素。
  • 最小堆(Min Heap):父节点的值小于或等于其子节点的值,根节点是最小元素。

堆排序利用堆的性质,每次从堆中提取根节点(最大或最小),然后调整堆结构,从而实现排序。

基本思想 
  1. 构建堆:将待排序数组转换成一个堆结构(可以是最大堆或最小堆),通常构建最大堆。
  2. 交换根节点与最后一个节点:将堆顶(最大元素)与堆的最后一个元素交换,这样最大元素就被放置到了正确的位置。
  3. 调整堆:交换后,堆的结构可能被破坏,需要重新调整堆,使其恢复堆的性质。
  4. 重复:将剩下的部分继续调整为堆,再次进行交换,直到所有元素都排序完成。
算法步骤
  1. 建堆:将给定的数组转换成一个最大堆。
  2. 交换根节点和最后一个节点:把堆顶元素(最大值)交换到数组的末尾。
  3. 调整堆:将剩余部分重新调整为最大堆。
  4. 重复交换和调整过程,直到堆的大小减小为1。
代码实现 
#include <stdio.h>// 调整堆结构
void AdjustDown(int* a, int n, int parent) {int child = parent * 2 + 1;  // 左子节点的索引while (child < n) {// 如果有右子节点,且右子节点更大,则选择右子节点if (child + 1 < n && a[child + 1] > a[child]) {child++;}// 如果父节点小于最大子节点,则交换if (a[child] > a[parent]) {int temp = a[parent];a[parent] = a[child];a[child] = temp;parent = child;child = parent * 2 + 1;  // 继续向下调整} else {break;  // 如果父节点大于等于最大子节点,则结束}}
}// 堆排序主函数
void HeapSort(int* a, int n) {// 建堆(从最后一个非叶子节点开始调整堆)for (int i = (n - 1) / 2; i >= 0; --i) {AdjustDown(a, n, i);}// 交换根节点(最大元素)和最后一个元素,然后调整堆int end = n - 1;while (end > 0) {// 交换根节点与堆的最后一个元素int temp = a[0];a[0] = a[end];a[end] = temp;// 重新调整堆AdjustDown(a, end, 0);--end;}
}// 打印数组
void PrintArray(int* a, int n) {for (int i = 0; i < n; ++i) {printf("%d ", a[i]);}printf("\n");
}int main() {int arr[] = {4, 10, 3, 5, 1};int n = sizeof(arr) / sizeof(arr[0]);HeapSort(arr, n);PrintArray(arr, n);return 0;
}
堆排序的步骤演示

假设我们有一个数组 [4, 10, 3, 5, 1],我们来逐步演示堆排序的过程。

1.建堆:首先将数组转换为最大堆:

      AdjustDown 会从最后一个非叶子节点开始,调整堆结构。

                经过调整,最大堆应该是 [10, 5, 3, 4, 1]

2.交换根节点和最后一个元素:交换根节点 10 和数组末尾的元素 1,得到 [1, 5, 3, 4, 10]

                通过 AdjustDown 调整堆,使其重新恢复堆的性质,得到 [5, 4, 3, 1, 10]

3.再次交换根节点和最后一个元素:交换根节点 5 和倒数第二个元素 1,得到 [1, 4, 3, 5, 10]

                通过 AdjustDown 调整堆,得到 [4, 1, 3, 5, 10]

4.重复:继续交换并调整堆,直到整个数组排好序:

                交换后得到 [3, 1, 4, 5, 10]

                调整后得到 [3, 1, 4, 5, 10]

                最终得到排序结果 [1, 3, 4, 5, 10]

特性总结
算法复杂度

1.时间复杂度

                最坏情况(数组逆序):O(n log n)

                最好情况(数组已排序):O(n log n)

                平均情况O(n log n)

2.空间复杂度原地排序:堆排序不需要额外的辅助空间,空间复杂度为 O(1)

3.稳定性不稳定:堆排序在排序过程中可能改变相等元素的相对顺序,因此是一个不稳定的排序算法。


优缺点

优点

  1. 时间复杂度稳定:无论在最坏、最好还是平均情况下,堆排序的时间复杂度始终为 O(n log n),表现稳定。
  2. 原地排序:堆排序只使用常数级额外空间,空间复杂度为 O(1),内存开销小。
  3. 适用于大规模数据:由于堆排序的时间复杂度较为稳定,因此适合用于处理大规模数据的排序任务。

缺点

  1. 不稳定:堆排序不保持相等元素的相对顺序,因此不适用于需要稳定排序的场景。
  2. 常数因子较大:虽然时间复杂度为 O(n log n),但堆排序的常数因子较大,通常会比其他如快速排序的实际性能稍差。

适用场景
  1. 大规模数据的排序:堆排序在处理大数据时较为稳定,尤其是在对时间复杂度有较高要求时。
  2. 内存有限的情况:堆排序是原地排序,不需要额外的内存,适用于内存受限的情况。
  3. 需要稳定时间复杂度的场景:当不关心排序的稳定性时,堆排序是一个不错的选择,尤其是在无法预测输入数据分布的情况下。

下一章应该是介绍冒泡和快速排序(

那几种快速排序够写很多了(

相关文章:

排序学习整理(1)

1.排序的概念及运用 1.1概念 排序&#xff1a;所谓排序&#xff0c;就是使⼀串记录&#xff0c;按照其中的某个或某些关键字的大小&#xff0c;递增或递减的排列起来的操作&#xff0c;以便更容易查找、组织或分析数据。 1.2运用 购物筛选排序 院校排名 1.3常见排序算法 2.实…...

《深入探究 Java 中的 boolean 类型》

在 Java 编程语言的世界里&#xff0c;boolean 类型虽然看似简单&#xff0c;却在程序的逻辑控制和决策中起着至关重要的作用。本文将带你深入了解 Java 中的 boolean 类型&#xff0c;从其基本概念、用法到实际应用场景&#xff0c;以及一些常见的注意事项。 一、boolean 类型…...

智享 AI 自动无人直播系统:打破地域与时间枷锁中小微企业的营销破局利器

中小微企业&#xff0c;在商业浪潮中恰似逐浪扁舟&#xff0c;常面临营销成本高、推广渠道窄、专业人才缺等 “暗礁”&#xff0c;而智享 AI 自动无人直播系统恰如精准导航的灯塔&#xff0c;助其破浪前行、突出重围。 成本维度&#xff0c;传统直播人力成本让中小微企业望而却…...

接口测试工具:reqable

背景 在众多接口测试工具中挑选出一个比较好用的接口测试工具。使用过很多工具&#xff0c;如Postman、Apifox、ApiPost等&#xff0c;基本上是同类产品&#xff0c;一般主要使用到的功能就是API接口和cURL&#xff0c;其他的功能目前还暂未使用到。 对比 性能方面&#xff…...

同时多平台git配置:GitHub和Gitee生成不同的SSH Key

文章目录 GitHub和Gitee生成不同的SSH Key步骤1&#xff1a;生成SSH Key步骤2&#xff1a;配置SSH配置文件步骤3&#xff1a;查看SSH公钥步骤4&#xff1a;将SSH公钥添加到GitHub和Gitee步骤5&#xff1a;测试SSH连接步骤6&#xff1a;添加remote远程库 GitHub和Gitee生成不同的…...

刷题计划day24 回溯(三)【复原 IP 地址】【子集】【子集 II】

⚡刷题计划day24 回溯&#xff08;三&#xff09;继续&#xff0c;回溯一共会有五个专题&#xff0c;敬请期待关注&#xff0c;可以点个免费的赞哦~ 往期可看专栏&#xff0c;关注不迷路&#xff0c; 您的支持是我的最大动力&#x1f339;~ 目录 题目一&#xff1a;复原 IP…...

从“找三角形”讲“等腰三角形”

【题目】 周长为11&#xff0c;且各边长均为整数的三角形有哪些&#xff1f; 【答案】 四种&#xff0c;边长分别为&#xff1a; 2 4 5 3 3 5 1 5 5 3 4 4 【解析】 讲解等腰三角形的概念时&#xff0c;传统方法一般向学生展示一个等腰三角形的实物模型&#xff0c;这…...

Java中的泛型方法和泛型类

在Java编程语言中&#xff0c;泛型&#xff08;Generics&#xff09;是一个强大的特性&#xff0c;它使得类、接口和方法能够灵活地操作各种数据类型&#xff0c;同时保持类型安全。泛型主要通过类型参数&#xff08;Type Parameters&#xff09;来实现&#xff0c;这些类型参数…...

springboot学习-spring-boot-data-jdbc分页/排序/多表查询的例子

上次使用的是JdbcTemplate实现的&#xff0c;是比较老的方式&#xff0c;重新用spring boot data jdbc和jdbc client 实现一遍。也比较一下这几种的编码差异。数据库方面JAVA给了太多选择&#xff0c;反而不好选了。 上次就试图直接用&#xff1a; public interface UserRepo…...

通信与网络基础

1.网络通信基本概念 通信&#xff1a;人、物通过某种介质和行为进行信息传递与交流 网络通信&#xff1a;终端设备之间通过计算机网络进行通信 两个终端通过网线传递文件 多个终端通过路由器传递文件 终端通过Internet下载文件 2.信息传递过程 图1-1 假定A计算机访问B的web…...

【3.存储系统】综合大题

【考点】存储系统综合大题 【2011年408真题】某计算机存储器按字节编址&#xff0c;虚拟(逻辑)地址空间大小为16 MB&#xff0c;主存(物理)地址空间大小为1 MB&#xff0c;页面大小为4 KB&#xff1b;Cache采用直接映射方式&#xff0c;共8行&#xff1b;主存与Cache之间交换的…...

【Linux】【字符设备驱动】深入解析

Linux字符设备驱动程序用于控制不支持随机访问的硬件设备&#xff0c;如串行端口、打印机、调制解调器等。这类设备通常以字符流的形式与用户空间程序进行交互。本节将深入探讨字符设备驱动的设计原理、实现细节及其与内核其他组件的交互。 1. 引言 字符设备驱动程序是Linux内…...

【JavaEE】多线程(2)

一、线程安全 1.1 线程安全的概念 线程是随机调度执行的&#xff0c;如果多线程环境下的程序运行的结果符合我们预期则说明线程安全&#xff0c;反之&#xff0c;如果遇到其他结果甚至引起了bug则说明线程不安全 1.2 经典例子与解释 下面举一个经典的线程不安全的例子&…...

mac下Gpt Chrome升级成GptBrowser书签和保存的密码恢复

cd /Users/自己的用户名/Library/Application\ Support/ 目录下有 GPT\ Chrome/ Google/ GptBrowser/ GPT\ Chrome 为原来的chrome浏览器的文件存储目录. GptBrowser 为升级后chrome浏览器存储目录 书签所在的文件 Bookmarks 登录账号Login 相关的文件 拷贝到GptBrow…...

使用Grafana K6来测测你的系统负载能力

背景 近期我们有个号称会有很高很高并发的系统要上线&#xff0c;为了测试一下自己开发的系统的负载能力&#xff0c;准备了点海克斯科技&#xff0c;来看看抗不抗的住。 之前笔者写过用Apache JMeter进行压力测试的文章&#xff08;传送门&#x1f449;&#xff1a;https://…...

【论文复现】基于BERT的语义分析实现

&#x1f4dd;个人主页&#x1f339;&#xff1a;Eternity._ &#x1f339;&#x1f339;期待您的关注 &#x1f339;&#x1f339; ❀ WRN: 宽度残差网络 概述语义分类文本分类情感分类 实现原理 核心逻辑pre_deal.pytrain.pytest_demo.py 实现方式&演示效果训练阶段测试阶…...

CTF-RE: STL逆向 [NewStarCTF 2023 公开赛道 STL] WP

多看看STL题就会了,很简单 int __fastcall main(int argc, const char **argv, const char **envp) {__int64 v3; // rbx__int64 v4; // raxchar v5; // bl_BYTE *v6; // rax_QWORD *v7; // rax__int64 v8; // rax__int64 v9; // raxint i; // [rsp0h] [rbp-250h]int j; // [r…...

实习冲刺第三十六天

46.全排列 给定一个不含重复数字的数组 nums &#xff0c;返回其 所有可能的全排列 。你可以 按任意顺序 返回答案。 示例 1&#xff1a; 输入&#xff1a;nums [1,2,3] 输出&#xff1a;[[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]]示例 2&#xff1a; 输入&#…...

【Zemax光学设计实训三】---激光缩束镜的设计优化

前言与目录 技术设计要求&#xff1a; 设计一个激光扩束镜&#xff0c;使用的波长为1064nm&#xff0c;输入光束直径为10mm&#xff0c;输出光束的直径为2mm&#xff0c;且输入光束和输出光束平行&#xff08;即平行光入射&#xff0c;平行光出射&#xff09;。要求只使用两片…...

TCP/IP协议簇自学笔记

摘抄于大学期间记录在QQ空间的一篇自学笔记&#xff0c;当前清理空间&#xff0c;本来想直接删除掉的&#xff0c;但是感觉有些舍不得&#xff0c;因此先搬移过来。 曾经&#xff0c;我只知道socket函数能进行网络间数据的通信&#xff0c;知道tcp/ip协议也是用来进行网络数据…...

Spring Boot教程之十一:获取Request 请求 和 Put请求

如何在 Spring Boot 中获取Request Body&#xff1f; Java 语言是所有编程语言中最流行的语言之一。使用 Java 编程语言有几个优点&#xff0c;无论是出于安全目的还是构建大型分发项目。使用 Java 的优点之一是 Java 试图借助类、继承、多态等概念将语言中的每个概念与现实世…...

计算机网络(二)

ip地址&#xff1a;11010010&#xff1a;01011110:00100100:00010100 子网掩码:11111111:11111111:11111111:11000000 and &#xff1a;11010010&#xff1a;01011110&#xff1a;00100100&#xff1a;00000000 210.94.36.0的下一站为R1 因为255为11111111 192为&#xff…...

如何在Python中进行数学建模?

数学建模是数据科学中使用的强大工具&#xff0c;通过数学方程和算法来表示真实世界的系统和现象。Python拥有丰富的库生态系统&#xff0c;为开发和实现数学模型提供了一个很好的平台。本文将指导您完成Python中的数学建模过程&#xff0c;重点关注数据科学中的应用。 数学建…...

JavaSE——类与对象(5)

一、抽象类 1.1为什么需要抽象类 父类的某些方法&#xff0c;不确定怎么实现&#xff0c;也不需要实现。 class Animal{public String name;public Animal(String name){this.name name;}public void eat()//这里实现了也没有意义{System.out.println("这是一个动物&am…...

Istio笔记01--快速体验Istio

Istio笔记01--快速体验Istio 介绍部署与测试部署k8s安装istio测试istio 注意事项说明 介绍 Istio是当前最热门的服务网格产品&#xff0c;已经被广泛应用于各个云厂商和IT互联网公司。企业可以基于Istio轻松构建服务网格&#xff0c;在接入过程中应用代码无需更改&#xff0c;…...

面试小札:Java如何实现并发编程

多线程基础 继承Thread类 定义一个类继承自 Thread 类&#xff0c;重写 run 方法。在 run 方法中编写线程要执行的任务逻辑。例如&#xff1a; java class MyThread extends Thread { Override public void run() { System.out.println("线程执行的任务…...

java-a+b 开启java语法学习

代码 &#xff08;ab) import java.util.Scanner; //导入 java.util包中的Scanner 类&#xff0c;允许读取键盘输入数据public class Main { // 创建一个公共类 Mainpublic static void main(String[] args) {//程序入口点&#xff0c;main方法Scanner scanner new Scanner(…...

RNN模型文本预处理--数据增强方法

数据增强方法 数据增强是自然语言处理&#xff08;NLP&#xff09;中常用的一种技术&#xff0c;通过生成新的训练样本来扩充数据集&#xff0c;从而提高模型的泛化能力和性能。回译数据增强法是一种常见的数据增强方法&#xff0c;特别适用于文本数据。 回译数据增强法 定义…...

maven 中<packaging>pom</packaging>配置使用

在 Maven 项目的 pom.xml 文件中&#xff0c; 元素用于指定项目的打包类型。默认情况下&#xff0c;如果 元素没有被显式定义&#xff0c;Maven 会假设其值为 jar。但是&#xff0c;当您设置 pom 时&#xff0c;这意味着该项目是一个 POM&#xff08;Project Object Model&…...

【Python中while循环】

一、深拷贝、浅拷贝 1、需求 1&#xff09;拷贝原列表产生一个新列表 2&#xff09;想让两个列表完全独立开&#xff08;针对改操作&#xff0c;读的操作不改变&#xff09; 要满足上述的条件&#xff0c;只能使用深拷贝 2、如何拷贝列表 1&#xff09;直接赋值 # 定义一个…...

怎么看一个网站是用什么程序做的/搜索引擎营销有哪些

分享如何设置 macOS 暗夜模式&#xff0c;需要的朋友可以试试这个教程 如何在 macOS 中设置手动暗模式调度 1、单击菜单栏中的Apple 标志&#xff0c;然后单击系统偏好设置。 2、单击常规。 3、在外观下&#xff0c;选择自动。 4、单击返回以返回到系统偏好设置。 5、单击显示…...

怎么做货物收发的网站/青岛网站关键词排名优化

本文主要介绍了一个 Http 请求在 Laravel 中是怎样处理的。public/index.php所有 Laravel 程序均起始于 public/index.php 文件。define(LARAVEL_START, microtime(true));require __DIR__./../vendor/autoload.php;$app require_once __DIR__./../bootstrap/app.php;$kernel …...

河北专业网站制作/短视频推广app

Given numRows, generate the first numRows of Pascals triangle. For example, given numRows 5,Return [[1],[1,1],[1,2,1],[1,3,3,1],[1,4,6,4,1] ]题目标签&#xff1a;Array 题目给了我们一个numRows&#xff0c;让我们写出这个行数的杨辉三角。来观察一下原题例子&…...

seo 网站换程序/北京网站制作设计

2019独角兽企业重金招聘Python工程师标准>>> 0.AFN框架基本使用 0.1 AFN内部结构AFN结构体- NSURLConnection AFURLConnectionOperation(已经被废弃) AFHTTPRequestOperation(已经被废弃) AFHTTPRequestOperationManager(封装了常用的 HTTP 方法)(已经被废弃)* 属性…...

网页设计专业课程介绍/贵港seo关键词整站优化

到不是下不去&#xff0c;只是又看走眼了。人生多难啊。转载于:https://blog.51cto.com/xiaomage/83137...

公共交通公司网站建设方案/企业网络推广的方法有哪些

本次读书笔记在于实现书上的从文本解析数据&#xff0c;使用Matplotlib创建散点图&#xff08;散点图使用DataMat矩阵的第二、第三列数据&#xff09;&#xff0c;分类器针对约会网站的测试等 首先介绍几个相关知识点&#xff0c;方便代码浏览。 知识点一&#xff1a; 1.对于高…...