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

数据结构基础排序算法

选择排序

选择排序的基本思路:从待排序元素中选取最大(或最小)的一个元素加入到已完成排序的末尾。

#include <stdio.h>#define ARR_LEN(arr) (sizeof(arr) / sizeof(arr[0]))
#define SWAP(arr, i, j ) {      \
int tmp = arr[i];           \
arr[i] = arr[j];            \
arr[j] = tmp;               \
}void print_arr(int arr[], int len) {for (int i = 0; i < len; i++) {printf("%d ", arr[i]);}printf("\n");
}// 选择排序
void selection_sort(int arr[], int len) {/*
* i表示未排序序列的开头元素
* 最后一轮选择排序时, 未排序序列的开头元素是数组倒数第二个元素
* i的每个取值都表示一轮选择排序
* 也就是选择排序一共执行9趟
*/for (int i = 0; i < len - 1; i++) {// 不妨直接假设未排序序列的开头i位置元素就是最小值int min_index = i;// 遍历未排序数组序列,找出真正的最小值下标,此时应遍历最后一个元素for (int j = i + 1; j < len; j++) {if (arr[j] < arr[min_index]) {min_index = j;  // 记录较小值的下标}}   // for循环结束时,未排序序列的最小值下标就是min_index// 交换min_index和下标i的元素SWAP(arr, min_index, i);// 选择排序一趟打印一次数组print_arr(arr, len);}
}int main(void) {// 测试选择排序int arr[] = { 1,10,2,5,3,4,5,6,3,2 };int len = ARR_LEN(arr);selection_sort(arr, len);return 0;
}

时间复杂度分析:选择排序的时间复杂度是O(n2),任何情况下都一样。

空间复杂度分析:选择排序是一种原地排序算法,不需要占用额外内存空间。空间复杂度是O(1)

稳定性分析:选择排序在每一轮中选择最小元素,并与未排序部分的第一个元素交换。如果存在相等的元素,选择排序可能会改变它们的相对顺序。所以选择排序不是一个稳定的排序算法。

冒泡排序

基本思路:将未排序算法中的元素,从头到尾两两比较,将最大的元素不断后移到已经排序元素的头部(按从小到大排序)。

工作原理如下(按照从小到大排序):

  1. 第一轮冒泡排序:从数组的第一个元素开始,比较相邻的元素。如果第一个元素比第二个元素大,则交换它们的位置。然后,移动到下一对相邻元素,重复这个过程,直到比较最后一对元素。每一轮冒泡排序都会使当前比较序列的最大值到达数组末尾,随后第二轮排序过程中,需要比较的元素就减1。(将尾部最大的元素减去不再排序)
  2. 第二轮冒泡排序:重复第一轮的过程,但这次只比较和交换直到倒数第二个元素(因为最后一个元素已经是最大的了)。在这一轮结束时,倒数第二大的元素会被“冒泡”到倒数第二的位置。
  3. ...
  4. 结束条件:

    1. 在不设置任何额外结束条件的前提下,冒泡排序每一轮都会将未排序序列的最大值"冒泡"到末尾。冒泡排序需要进行固定的(n - 1)轮!
    2. 但实际上在这(n - 1)轮冒泡排序的过程中,只要某一轮完全不存在元素的交换,就说明数组已经完全有序了,排序就可以结束了。
    3. 所以我们可以设定一个布尔值来标记此轮冒泡排序是否存在元素交换,如果没有元素交换,直接结束整个排序。这种做法可以优化冒泡排序的性能,尤其是当原数组已基本有序时。
#include <stdio.h>
#include <stdbool.h>#define ARR_LEN(arr) (sizeof(arr) / sizeof(arr[0]))#define SWAP(arr, i, j ) {      \int tmp = arr[i];           \arr[i] = arr[j];            \arr[j] = tmp;               \
}void print_arr(int arr[], int len) {for (int i = 0; i < len; i++) {printf("%d ", arr[i]);}printf("\n");
}void bubble_sort(int arr[], int len) {// 外层for的i表示第几轮冒泡排序,最多需要进行len-1轮for (int i = 1; i < len; i++) {// 标记在这一次冒泡排序中有没有交换,false表示没有交换bool swapped = false;/** j表示两两比较元素中的第一个元素的下标* 第一轮j的最大取值是数组倒数第二个元素,并且逐步减小* 所以j的条件是小于 (len - i)*/for (int j = 0; j < len - i; j++) {if (arr[j] > arr[j + 1]) {SWAP(arr, j, j + 1);// 发生了交换改变标记swapped = true;}}// 在一轮冒泡排序中没有任何交换,则排序已经完成,终止循环if (!swapped) {break;}// 打印一轮冒泡排序后数组的元素排列print_arr(arr, len);}
}int main(void) {// 测试冒泡排序int arr[] = { 16, 1, 45, 23, 99, 2, 18, 67, 42, 10 };int len = ARR_LEN(arr);bubble_sort(arr, len);return 0;
}

需要注意的是:

在上述参考代码中使用了"swapped"标记来使得冒泡排序可以在"一轮冒泡没有任何交换时结束"。这在某些场景下,可以提升算法的效率,尤其是最佳情况——输入的数组已经是有序的情况下。

 时间复杂度分析:最佳情况下的时间复杂度是 O(n)。最坏情况下的时间复杂度是 O(n2)。平均情况下,时间复杂度也是 O(n2)。

空间复杂度分析:

冒泡排序是一种原地排序算法,不需要占用额外内存空间。空间复杂度是O(1)

稳定性分析:

冒泡排序显然是一种稳定的排序算法,因为交换的过程中不会交换任何两个相同的元素。

插入排序

工作原理是(将数组从小到大排序):

  1. 以数组的首元素为初始状态:这个初始状态相当于抓到的第一张牌,它默认就是有序的。
  2. 从数组的第二个元素开始遍历:相当于抓一张牌,然后从小到大整理手牌。
  3. 比较与交换:将新插入的元素和前面的元素逐一比较,如果新插入元素较小,则交换两个元素,直到完全不可交换,则完成一轮排序。
  4. 重复步骤2和3,直到步骤2遍历到最后一个元素。
#include <stdio.h>#define SWAP(arr, i, j ) {      \int tmp = arr[i];           \arr[i] = arr[j];            \arr[j] = tmp;               \
}
#define ARR_SIZE(arr) (sizeof(arr) / sizeof(arr[0]))void print_arr(int arr[], int len) {for (int i = 0; i < len; i++) {printf("%d ", arr[i]);}printf("\n");
}// 通过交换元素的方式实现插入排序
void insertion_sort(int arr[], int len) {// 外层for循环中的i表示每轮选择排序新插入元素的下标,也就是"新摸手牌"的下标// 从数组第二个元素开始,后面的每一个元素都相当于"你要摸的手牌"for (int i = 1; i < len; i++) {// 内层for循环的j表示新插入元素需要比较元素的下标,也就是每一张"老手牌"的下标// j从i的前一个位置开始,递减,但不可能成为负数for (int j = i - 1; j >= 0; j--) {if (arr[j] > arr[j + 1]) {  // 注意:这里如果加等号就不是稳定的排序算法了// 前面的元素比后面的元素大,交换SWAP(arr, j, j + 1);}else {// 只需要在某一次比较中,发现前一个元素小于等于后一个元素// 那么前面的元素就一定都是排序好的,此时这一轮选择排序结束break;}}// 打印每一轮选择排序后,数组的元素序列print_arr(arr, len);}
}int main(void) {int arr[] = { 1, 21, 45, 231, 99, 2, 18, 7, 4, 9 };int len = ARR_SIZE(arr);insertion_sort(arr, len);return 0;
}

 上面的实现是通过交换元素取值实现排序的,交换是一个比较"重量级"的操作,需要连续三次赋值来完成。所以我们可以用移动元素来取代交换元素,这样可以轻微提升一些性能。思路是:

先使用一个temp临时存储新插入元素,然后和前面的元素逐一比较,若前面的元素较大就向后移动一位,直到比较完前面所有元素或者比较到一个元素比新插入元素小。

#include <stdio.h>#define SWAP(arr, i, j ) {      \int tmp = arr[i];           \arr[i] = arr[j];            \arr[j] = tmp;               \
}
#define ARR_SIZE(arr) (sizeof(arr) / sizeof(arr[0]))void print_arr(int arr[], int len) {for (int i = 0; i < len; i++) {printf("%d ", arr[i]);}printf("\n");
}// 插入排序 优化: 用向后移动腾出插入位置,然后插入实现插入排序
void insertion_sort(int arr[], int len) {// 现在第一个元素就是第一张手牌,从第二个元素开始就是每一次要摸的牌// 外层for循环代表每一轮摸到的新手牌, 也就是每一轮插入排序for (int i = 1; i < len; i++) {// 先记录一下新手牌的值, 便于后续的插入操作int tmp = arr[i];int j = i - 1;for (; j >= 0; j--) {if (arr[j] > tmp) { // 注意:不能加=,加了就不是稳定排序算法了arr[j + 1] = arr[j];    // 将旧手牌中大于新手牌的所有牌都向后移}else{break;  // 只要发现一张旧手牌更小或相等, 就说明已经找到新手牌的插入位置了}}/*现在还有一件事情没做:新手牌要插入,需要确定插入位置分析: for循环什么时候结束?两种情况:1.j=-1时,循环结束,说明新手牌是最小的,所以插入到0这个位置,也就是j+12.arr[j] <= tmp 也就是旧手牌更小或相等,此时新手牌放在j+1的位置*/arr[j + 1] = tmp;print_arr(arr, len);    // 每一轮摸牌后查看排序后的数组}
}int main(void) {int arr[] = { 1, 21, 45, 231, 99, 2, 18, 7, 4, 9 };int len = ARR_SIZE(arr);insertion_sort(arr, len);return 0;
}

时间复杂度分析:最佳情况下的时间复杂度是 O(n)。最坏情况下的时间复杂度是 O(n2)。平均情况下,时间复杂度也是 O(n2)。

空间复杂度分析:

插入排序是一种原地排序算法,不需要占用额外内存空间。空间复杂度是O(1)

稳定性分析:

插入排序显然也是一种稳定的排序算法,因为对于两个相同的元素,我们始终都不会交换它们的相对位置。

注意:如果判断的条件改成arr[j] >= arr[j + 1],即在前后元素相等时也交换/移动元素,算法就会变成不稳定的。

相关文章:

数据结构基础排序算法

选择排序 选择排序的基本思路&#xff1a;从待排序元素中选取最大&#xff08;或最小&#xff09;的一个元素加入到已完成排序的末尾。 #include <stdio.h>#define ARR_LEN(arr) (sizeof(arr) / sizeof(arr[0])) #define SWAP(arr, i, j ) { \ int tmp arr[i]; …...

数据结构中的高级排序算法

希尔排序 你可以将希尔排序理解成——先通过几次分组的、较小的组间插入排序将原数组变得有序&#xff0c;最后再进行一次序列基本有序的完整插入排序。 #include <stdio.h>#define ARR_LEN(arr) (sizeof(arr) / sizeof(arr[0]))void print_arr(int arr[], int len) {for…...

家庭宽带的内网穿透实践

家庭宽带的内网穿透实践 龙生龙&#xff0c;凤生凤&#xff0c;老鼠的儿子会打洞。我们今天来学习 “打洞” &#xff01; 背景 众所周知&#xff0c;当前运营商在IPv4环境下面&#xff0c;由于地址资源不够&#xff0c;启用了大内网策略。导致家庭宽带到路由器这一层都分配了…...

LabVIEW在电子电工教学中的应用

在电子电工教学领域&#xff0c;传统教学模式面临诸多挑战&#xff0c;如实验设备数量有限、实验过程存在安全隐患、教学内容更新滞后等。LabVIEW 作为一款功能强大的图形化编程软件&#xff0c;为解决这些问题提供了创新思路&#xff0c;在电子电工教学的多个关键环节发挥着重…...

算法每日刷题 Day6 5.14:leetcode数组1道题,用时30min,明天按灵茶山艾府题单开刷,感觉数组不应该单算

14. 977.有序数组的平方(简单&#xff0c;学习&#xff0c;双指针) 977. 有序数组的平方 - 力扣&#xff08;LeetCode&#xff09; 思想 法一: 1.平方赋值到另一个数组sort排序 法二: 1.寻找负数和非负数的分界线(学习代码如何写&#xff1f;)&#xff0c;[0,neg]负数,[neg1…...

JS逆向实战四:某查查请求头逆向解密

声明&#xff1a;本文章中所有内容仅供学习交流使用&#xff0c;不用于其他任何目的&#xff0c;不提供完整代码&#xff0c;抓包内容、敏感网址、数据接口等均已做脱敏处理&#xff0c;严禁用于商业用途和非法用途&#xff0c;否则由此产生的一切后果均与作者无关&#xff01;…...

QT之QComboBox组件

欢迎来到 破晓的历程的 博客 ⛺️不负时光&#xff0c;不负己✈️ 文章目录 1.引言2.初见QComboBox3.核心功能和常用方法1. 添加和删除选项2. 获取和设置当前值3. 可编辑模式4. 数据绑定 4.信号与槽5.应用场景6.使用示例7.总结 1.引言 在记事本项目中&#xff0c;不同的编码设…...

数值积分知识

数值积分 对于增加插值节点序列&#xff1a; { x i } i 0 n \left\{x_i\right\}_{i0}^{n} {xi​}i0n​&#xff0c;由插值定理给出&#xff1a; f ( x ) ∑ i 0 n y i l i ( x ) f ( n 1 ) ( ξ ) ( n 1 ) ! ∏ i 0 n ( x − x i ) f(x)\sum_{i0}^{n}y_i l_i(x)\frac{f…...

代码随想录训练营第二十三天| 572.另一颗树的子树 104.二叉树的最大深度 559.N叉树的最大深度 111.二叉树的最小深度

572.另一颗树的子树&#xff1a; 状态&#xff1a;已做出 思路&#xff1a; 这道题目当时第一时间不是想到利用100.相同的树思路来解决&#xff0c;而是先想到了使用kmp&#xff0c;不过这个题目官方题解确实是有kmp解法的&#xff0c;我使用的暴力解法&#xff0c;kmp的大致思…...

力扣-105.从前序与中序遍历序列构造二叉树

题目描述 给定两个整数数组 preorder 和 inorder &#xff0c;其中 preorder 是二叉树的先序遍历&#xff0c; inorder 是同一棵树的中序遍历&#xff0c;请构造二叉树并返回其根节点。 class Solution { public:TreeNode* buildTree(vector<int>& preorder, vecto…...

【Linux网络】————详解TCP三次握手四次挥手

作者主页&#xff1a; 作者主页 本篇博客专栏&#xff1a;Linux 创作时间 &#xff1a;2025年5月14日 一、TCP三次握手四次挥手介绍 TCP使用三次握手来进行建立连接&#xff0c;四次挥手来终止连接&#xff0c;为何连接还要这么麻烦呢&#xff0c;那是因为这样可以确保建立…...

LLM(大语言模型)部署加速方法——PagedAttention

一、vLLM 用于大模型并行推理加速 存在什么问题&#xff1f; vLLM 用于大模型并行推理加速&#xff0c;其中核心改进是PagedAttention算法&#xff0c;在 vLLM 中&#xff0c;我们发现 LLM 服务的性能受到内存的瓶颈。在自回归解码过程中&#xff0c;LLM 的所有输入标记都会生…...

附加:TCP如何保障数据传输

附加&#xff1a;TCP如何保障数据传输 LS-NET-012-TCP的交互过程详解 TCP 如何保障数据传输 TCP&#xff08;Transmission Control Protocol&#xff0c;传输控制协议&#xff09;是互联网核心协议之一&#xff0c;负责在IP网络上提供可靠的、面向连接的数据传输服务。它位于T…...

【python机器学习】Day 25 异常处理

知识点&#xff1a; 异常处理机制debug过程中的各类报错try-except机制try-except-else-finally机制 在即将进入深度学习专题学习前&#xff0c;我们最后差缺补漏&#xff0c;把一些常见且重要的知识点给他们补上&#xff0c;加深对代码和流程的理解。 借助ai写代码的时候&…...

idea springboot 配置文件 中文显示

这里一定要注意编码。如果使用的是中文&#xff0c;则有可能出现乱码&#xff0c; 请单击IDEA菜单栏中的“File→→Settings→Editor→File Encodings”命令&#xff0c; 然后将 Properties Files(*.properties)下的“Default encoding for properties files"设置为UTF-8,…...

day20-线性表(链表II)

一、调试器 1.1 gdb&#xff08;调试器&#xff09; 在程序指定位置停顿 1.1.1 一般调试 gcc直接编译生成的是发布版&#xff08;Release&#xff09; gcc -g //-g调式版本&#xff0c;&#xff08;体积大&#xff0c;内部有源码&#xff09;&#xff08;DeBug&#…...

深入剖析某App视频详情逆向:聚焦sig3参数攻克

深入剖析某手App视频详情逆向&#xff1a;聚焦sig3参数攻克 一、引言 在当今互联网信息爆炸的时代&#xff0c;短视频平台如某手&#xff0c;已成为人们获取信息、娱乐消遣的重要渠道。对于技术爱好者和研究人员而言&#xff0c;深入探索其内部机制&#xff0c;特别是视频详情…...

数据结构与算法-双向链表专题

目录 一. 双向链表的结构 二.双向链表的使用 2.1 创建节点 2.2 初始化 2.3 打印 2.4 尾插 2.5 头插 2.6 尾删 2.7 头删 2.8 在指定位置pos之后插入数据 2.9 查找数据 2.10 删除pos位置的节点 2.11 销毁链表 一. 双向链表的结构 在List.h的头文件中对链表的结构进行创建 #prag…...

为什么要选择七彩喜数字康养平台?加盟后有何优势?

一&#xff0e;七彩喜数字康养平台 1.技术领先性 七彩喜依托“端-网-云-脑”四层技术架构&#xff0c;整合毫米波雷达、AI算法引擎、区块链等前沿技术&#xff0c;解决传统养老的隐私泄露、设备孤岛等痛点。 比如非接触式健康监测系统通过毫米波雷达实现跌倒检测准确率&#…...

vscode调试c/c++

1. 调试配置选择 调试 C 程序&#xff1a;选择 "Debug C Program"&#xff08;调用 gcc 编译&#xff09;。 调试 C 程序&#xff1a;选择 "Debug C Program"&#xff08;调用 g 编译&#xff09;。 2. 调试步骤 打开代码文件&#xff1a;确保当前编辑器…...

进阶数据结构: AVL树

嘿&#xff0c;各位技术潮人&#xff01;好久不见甚是想念。生活就像一场奇妙冒险&#xff0c;而编程就是那把超酷的万能钥匙。此刻&#xff0c;阳光洒在键盘上&#xff0c;灵感在指尖跳跃&#xff0c;让我们抛开一切束缚&#xff0c;给平淡日子加点料&#xff0c;注入满满的pa…...

C# 调试技巧——日志记录,NuGet内断点

在C#中&#xff0c;Debug.WriteLine()、Trace.WriteLine() 和 Console.WriteLine() 都用于输出信息&#xff0c;但它们的用途和适用场景有显著区别。以下是它们的核心差异总结&#xff1a; Debug.WriteLine()主要适用于控制台程序&#xff0c;输出到控制台Trace.WriteLine() …...

模糊数学方法之模糊贴近度

模糊数学方法之模糊贴近度 一、概述 二、代码实现&#xff08;内含注释&#xff09; #程序文件ex14_3.py # 本段带代码主要是用于判断b是属于a中的哪个种类的 # 通过计算贴近度的形式来实现的 import numpy as np a np.array([[0.4,0.3,0.5,0.3],[0.3,0.3,0.4,0.4],[0.2,0.3…...

Spring AI 集成 Mistral AI:构建高效多语言对话助手的实战指南

Spring AI 集成 Mistral AI&#xff1a;构建高效多语言对话助手的实战指南 前言 在人工智能应用开发领域&#xff0c;选择合适的大语言模型&#xff08;LLM&#xff09;与开发框架至关重要。Mistral AI 凭借其高效的多语言模型&#xff08;如 Mistral-7B、Mixtral-8x7B 等&am…...

季报中的FPGA行业:U型反转,春江水暖

上周Lattice,AMD两大厂商相继发布2025 Q1季报,尽管恢复速度各异,但同时传递出FPGA行业整体回暖的复苏信号。 5月5日,Lattice交出了“勉强及格”的答卷,报告季度营收1亿2000万,与华尔街的预期基本相符。 对于这家聚焦在中小规模器件的领先厂商而言,按照其CEO的预期,长…...

Data Mining|缺省值补全实验

实验内容任务描述 利用sklearn完成缺省值补全&#xff0c;完成4种以上缺失值补全&#xff0c;并完整地进行模型训练与测试。 四种缺失值补全方法&#xff1a;众数插补、均值插补、K-邻近填充、迭代插补(极大似然估计) 采用模型&#xff1a;随机森林RandomForestClassifier( …...

RabbitMQ 快速上手:安装配置与 HelloWorld 实践(一)

一、引言 在当今分布式系统大行其道的技术浪潮下&#xff0c;各个服务之间的通信与协同变得愈发复杂。想象一下&#xff0c;一个电商系统在大促期间&#xff0c;订单服务、库存服务、支付服务、物流服务等众多模块需要紧密配合。如果没有一种高效的通信机制&#xff0c;系统很容…...

适配华为昇腾 NPU 的交互式监控工具

适配华为昇腾 NPU 的交互式监控工具 在人工智能开发的过程中&#xff0c;我们常常希望能够实时了解计算设备的使用情况。对于使用华为昇腾 NPU 的团队来说&#xff0c;传统上只能通过命令行工具&#xff08;如 npu-smi&#xff09;来查询性能指标。但这些命令输出的信息分散且…...

HarmonyOS NEXT~React Native在鸿蒙系统(HarmonyOS)上的适配现状与技术展望

HarmonyOS NEXT&#xff5e;React Native在鸿蒙系统(HarmonyOS)上的适配现状与技术展望 一、背景与现状 鸿蒙系统(HarmonyOS)作为华为自主研发的分布式操作系统&#xff0c;自2019年发布以来已经迭代多个版本。最新的HarmonyOS NEXT更是明确将仅支持原生应用[5]&#xff0c;这…...

匿名函数lambda、STL与正则表达式

一、匿名函数lambda 重点&#xff1a; 怎么传递参数。 传引用还是传 1. 匿名函数的基本语法 [捕获列表](参数列表) mutable(可选) 异常属性 -> 返回类型 {// 函数体 } 语法规则&#xff1a;lambda表达式可以看成是一般函数的函数名被略去&#xff0c;返回值使用了一个 -…...

ssti模板注入学习

ssti模板注入原理 ssti模板注入是一种基于服务器的模板引擎的特性和漏洞产生的一种漏洞&#xff0c;通过将而已代码注入模板中实现的服务器的攻击 模板引擎 为什么要有模板引擎 在web开发中&#xff0c;为了使用户界面与业务数据&#xff08;内容&#xff09;分离而产生的&…...

存储扇区分配表:NAND Flash与SD NAND(贴片式SD卡)的架构差异

NAND Flash 和 SD 卡&#xff08;SD NAND&#xff09;的存储扇区分配表在原理上有相似之处&#xff0c;但由于二者的结构和应用场景不同&#xff0c;也存在一些差异。 相同点&#xff1a; 基本功能&#xff1a;NAND Flash 和 SD 卡&#xff08;SD NAND&#xff09;的存储扇区分…...

FreeRTOS队列原理讲解

继续更新freertos&#xff0c;讲解的是队列&#xff0c;队列是先进先出的一种数据结构&#xff0c;有入队和出队操作&#xff0c;今天主要讲解向队列发送消息源码/从队列取出消息源码。 先讲解入队函数&#xff0c;FreeRTOS中入队操作分为后向入队/前入/覆写&#xff0c;但无论…...

C——俄罗斯方块

前言 编译器选择&#xff1a;VS2022。需要掌握控制台操作、颜色设置、随机数生成、键盘事件、文件操作、二维数组操作等知识。运用语言&#xff1a;C语言。 一、游戏背景 1. 游戏概述 俄罗斯方块是一款经典的益智游戏&#xff0c;主要功能包括&#xff1a; 显示游戏界面 随…...

什么是 Shadow Testing?

Shadow Testing&#xff08;影子测试&#xff09;是一种在生产环境中对比验证新旧系统行为一致性的重要测试方法。它被广泛应用于系统迁移、架构重构、模型上线、A/B测试前的数据验证、灰度发布等场景&#xff0c;尤其在保障线上稳定性和数据正确性方面具有关键作用。 一、什么…...

【操作系统期末速成】①操作系统概述

——————2025.5.14————— 操作系统主要考点&#xff1a;操作系统概述、进程管理、内存管理、文件系统、设备管理&#xff08;前三个重点&#xff0c;第二三个是重中之重&#xff09; 操作系统概念&#xff08;OS&#xff09;&#xff1a;&#xff08;本质上是一个软件…...

关于vue学习的经常性错误

目录 常见问题&#xff1a; 1关于引用本地下载es6模块文件&#xff0c;报404错误 2 使用createApp函数后没有调用mount函数挂载到浏览器 3 在mount函数中&#xff0c;忘记引用插值表达式所在标签的定位符如 标签选择器&#xff0c;类选择器等 4在直接使用Vue3函数时&#…...

使用泛型加载保存数据

文章速览 泛型泛型概述定义优点 实例加载数据保存数据 一个赞&#xff0c;专属于你的足迹&#xff01; 泛型 泛型概述 泛型&#xff08;Generics&#xff09;是 C# 中一种重要的编程特性&#xff0c;它允许程序员编写灵活且类型安全的代码。通过使用泛型&#xff0c;可以创建…...

火山引擎实时音视频 高代码跑通日志

实时音视频 SDK 概览--实时音视频-火山引擎 什么是实时音视频 火山引擎实时音视频&#xff08;Volcengine Real Time Communication&#xff0c;veRTC&#xff09;提供全球范围内高可靠、高并发、低延时的实时音视频通信能力&#xff0c;实现多种类型的实时交流和互动。 通…...

ubuntu清除缓存

pip pip cache purgeconda conda clean -a -yapt apt cleanapt-get apt-get cleanmodelscope modelscope clear-cachehuggingface rm -rf ~/.cache/huggingface/*...

Flink SQL 将kafka topic的数据写到另外一个topic里面

-- 创建源表&#xff0c;使用 RAW 格式接收原始 JSON 数据 CREATE TABLE source_kafka ( id STRING, data STRING ) WITH ( connector kafka, topic source_kafka-topic, properties.bootstrap.servers master01:9092, properties.group.id flink-kafka-group, scan.startu…...

【C++重载操作符与转换】纯虚函数

目录 一、纯虚函数的基本概念 1.1 定义与语法 1.2 抽象类 1.3 派生类的实现要求 二、纯虚函数的使用场景 2.1 定义接口 2.2 实现多态 2.3 设计框架 三、纯虚函数的特性 3.1 纯虚函数可以有实现 3.2 抽象类的构造函数和析构函数 3.3 纯虚函数与接口继承 四、纯虚函…...

面向具身智能的视觉-语言-动作模型(VLA)综述

具身智能被广泛认为是通用人工智能&#xff08;AGI&#xff09;的关键要素&#xff0c;因为它涉及控制具身智能体在物理世界中执行任务。在大语言模型和视觉语言模型成功的基础上&#xff0c;一种新的多模态模型——视觉语言动作模型&#xff08;VLA&#xff09;已经出现&#…...

车用CAN接口芯片:汽车神经系统的沉默构建者

车用CAN接口芯片&#xff1a;汽车神经系统的沉默构建者 在汽车电子系统的复杂架构中&#xff0c;CAN总线如同人体的神经系统&#xff0c;而CAN接口芯片则扮演着神经突触的角色。这些指甲盖大小的芯片&#xff0c;默默承担着整车超过70%的通信任务&#xff0c;却鲜少成为技…...

AI日报 · 2025年5月14日|Android 生态大型更新与多端 Gemini 集成

1、Google “Android Show: I/O Edition” 汇总&#xff1a;设计、安全、Gemini 三线并进 北京时间 5 月 14 日凌晨&#xff08;原文标注 5 月 13 日 PDT&#xff09;&#xff0c;Google 在 I/O 前夕举办的 Android Show 一口气公布四大方向更新&#xff1a;① Mater…...

QT+opencv实现卡尺工具找圆、拟合圆

QT Opencv 实现卡尺工具找圆 找圆工具是自己从其他项目里面单独整理出来&#xff0c;可直接引用到新项目中。 程序中提供了函数接口&#xff0c;其他文件直接传入参数就能获取圆心和半径信息。次工具全采用QT和opencv&#xff0c;全部源码可随需求更改。 以下是实现效果&am…...

养生:拥抱健康生活的实用之道

在忙碌的现代生活中&#xff0c;养生逐渐成为人们追求健康的重要方式。从饮食、运动到睡眠与心态&#xff0c;各个养生环节相辅相成&#xff0c;共同构建起健康生活的大厦。以下为你详细介绍养生的关键要点&#xff0c;助你开启健康生活之旅。 饮食养生&#xff1a;科学搭配&a…...

Llama:开源的急先锋

Llama:开源的急先锋 Llama1&#xff1a;开放、高效的基础语言模型 Llama1使用了完全开源的数据&#xff0c;性能媲美GPT-3&#xff0c;可以在社区研究开源使用&#xff0c;只是不能商用。 Llama1提出的Scaling Law 业内普遍认为如果要达到同一个性能指标&#xff0c;训练更…...

使用大语言模型从零构建知识图谱(中)

从零到一&#xff1a;大语言模型在知识图谱构建中的实操指南 ©作者|Ninja Geek 来源|神州问学 还没有看过上篇的读者可以阅读《使用大语言模型从零构建知识图谱&#xff08;上&#xff09;》了解整个系列的内容 通过创建一个自定义流程来自动上传业务数据 在这一节&#…...

深度强化学习 | 图文详细推导软性演员-评论家SAC算法原理

目录 0 专栏介绍1 最大熵贝尔曼方程2 SAC算法原理推导2.1 参数化动作-价值函数2.2 参数化策略2.3 参数化温度 3 算法流程 0 专栏介绍 本专栏以贝尔曼最优方程等数学原理为根基&#xff0c;结合PyTorch框架逐层拆解DRL的核心算法(如DQN、PPO、SAC)逻辑。针对机器人运动规划场景…...