数据结构-堆排序
1.定义
-堆中每个节点的值都必须大于等于(或小于等于)其左右子节点的值。如果每个节点的值都大于等于其子节点的值,这样的堆称为大根堆(大顶堆);如果每个节点的值都小于等于其子节点的值,称为小根堆(小顶堆)。
2.堆的性质:
堆中某个节点的值总是不大于或不小于其父节点的值;
堆总是一棵完全二叉树;
3.堆的实现
3.1堆向下调整算法
现在我们给出一个数组,逻辑上看做一颗完全二叉树。我们通过从根节点开始的向下调整算法可以把它调整成一个小堆。向下调整算法有一个前提:左右子树必须是一个堆,才能调整
heap.h文件
// 确保头文件只被编译一次,避免重复包含导致的编译错误
#pragma once
// 包含标准库头文件,用于内存分配和动态内存管理,如 malloc、realloc、free 等函数
#include <stdlib.h>
// 包含断言库头文件,用于调试时检查条件是否为真,如果条件为假则程序终止
#include <assert.h>
// 包含布尔类型定义的头文件,使得代码可以使用 bool 类型
#include <stdbool.h>
// 包含标准输入输出库头文件,提供了基本的输入输出功能,如 printf、scanf 等
#include <stdio.h>// 定义堆中数据的类型,这里将 int 类型重命名为 HPDataType,方便后续修改堆中数据的类型
typedef int HPDataType;// 定义堆的结构体
typedef struct Heap
{// 指向堆数据数组的指针,用于存储堆中的元素HPDataType* a;// 堆中当前元素的数量int size;// 堆数组的容量,即当前分配的内存可以存储的元素个数int capacity;
} HP;// 堆操作接口函数声明// 初始化堆
// 参数:php 是指向堆结构体的指针,用于初始化堆的各项属性
void HeapInit(HP* php);// 销毁堆
// 参数:php 是指向堆结构体的指针,用于释放堆所占用的内存资源
void HeapDestroy(HP* php);// 向堆中插入一个元素
// 参数:php 是指向堆结构体的指针,x 是要插入的元素
void HeapPush(HP* php, HPDataType x);// 删除堆顶元素
// 参数:php 是指向堆结构体的指针,该操作会移除堆中优先级最高的元素
void HeapPop(HP* php); // 获取堆顶元素
// 参数:php 是指向堆结构体的指针,返回堆顶元素的值
HPDataType HeapTop(HP* php);// 判断堆是否为空
// 参数:php 是指向堆结构体的指针,返回一个布尔值,表示堆是否为空
bool HeapEmpty(HP* php);// 获取堆中元素的数量
// 参数:php 是指向堆结构体的指针,返回堆中当前元素的个数
int HeapSize(HP* php);
插入元素(向上调整适合逐个插入元素构建小堆,向下调整适合对已有数据构建小堆且效率更高)
void HeapPush(HP* php, HPDataType x)
{assert(php);// 扩容检查if (php->size == php->capacity) {int newCapacity = php->capacity == 0 ? 4 : php->capacity * 2;HPDataType* tmp = (HPDataType*)realloc(php->a, newCapacity * sizeof(HPDataType));if (tmp == NULL) {perror("realloc fail");exit(EXIT_FAILURE); // 内存不足直接退出}php->a = tmp;php->capacity = newCapacity;}// 插入并调整php->a[php->size++] = x;AdjustUp(php->a, php->size - 1);
}
向上调整算法:
static void AdjustUp(HPDataType* a, int child)
{int parent = (child - 1) / 2;while (child > 0) { // 小堆逻辑if (a[child] < a[parent]) {Swap(&a[child], &a[parent]);child = parent;parent = (child - 1) / 2;}else {break;}}
}
向下调整算法:
static void AdjustDown(HPDataType* 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]) {Swap(&a[child], &a[parent]);parent = child;child = parent * 2 + 1;}else {break;}}
}
4.建堆时间复杂度
因为堆是完全二叉树,而满二叉树也是完全二叉树,此处为了简化使用满二叉树来证明(时间复杂度本来看的就是近似值,多几个节点不影响最终结果):
因此:建堆的时间复杂度为O(N)。
5.堆的插入
先插入一个10到数组的尾上,再进行向上调整算法,直到满足堆。
6.堆的删除
删除堆是删除堆顶的数据,将堆顶的数据根最后一个数据一换,然后删除数组最后一个数据,再进行向下调整算法。
7.堆实现
heap.h文件
#pragma once
#include <stdlib.h>
#include <assert.h>
#include <stdbool.h>
#include <stdio.h>typedef int HPDataType;typedef struct Heap
{HPDataType* a;int size;int capacity;
} HP;// 堆操作接口
void HeapInit(HP* php);
void HeapDestroy(HP* php);
void HeapPush(HP* php, HPDataType x);
void HeapPop(HP* php); // 删除堆顶
HPDataType HeapTop(HP* php);
bool HeapEmpty(HP* php);
int HeapSize(HP* php);heap.c文件#define _CRT_SECURE_NO_WARNINGS
#include "Heap.h"// 静态辅助函数(仅本文件可见)
static void Swap(HPDataType* p1, HPDataType* p2)
{HPDataType tmp = *p1;*p1 = *p2;*p2 = tmp;
}static void AdjustUp(HPDataType* a, int child)
{int parent = (child - 1) / 2;while (child > 0) { // 小堆逻辑if (a[child] < a[parent]) {Swap(&a[child], &a[parent]);child = parent;parent = (child - 1) / 2;}else {break;}}
}static void AdjustDown(HPDataType* 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]) {Swap(&a[child], &a[parent]);parent = child;child = parent * 2 + 1;}else {break;}}
}// 初始化堆
void HeapInit(HP* php)
{assert(php);php->a = NULL;php->size = php->capacity = 0;
}// 销毁堆
void HeapDestroy(HP* php)
{assert(php);free(php->a);php->a = NULL;php->size = php->capacity = 0;
}// 插入元素
void HeapPush(HP* php, HPDataType x)
{assert(php);// 扩容检查if (php->size == php->capacity) {int newCapacity = php->capacity == 0 ? 4 : php->capacity * 2;HPDataType* tmp = (HPDataType*)realloc(php->a, newCapacity * sizeof(HPDataType));if (tmp == NULL) {perror("realloc fail");exit(EXIT_FAILURE); // 内存不足直接退出}php->a = tmp;php->capacity = newCapacity;}// 插入并调整php->a[php->size++] = x;AdjustUp(php->a, php->size - 1);
}// 删除堆顶
void HeapPop(HP* php)
{assert(php && !HeapEmpty(php));Swap(&php->a[0], &php->a[--php->size]);AdjustDown(php->a, php->size, 0);
}// 获取堆顶元素
HPDataType HeapTop(HP* php)
{assert(php && !HeapEmpty(php));return php->a[0];
}// 判断堆是否为空
bool HeapEmpty(HP* php)
{assert(php);return php->size == 0;
}// 获取堆大小
int HeapSize(HP* php)
{assert(php);return php->size;
}main.c 测试文件
int main()
{HP hp;HeapInit(&hp);int a[] = { 12, 34, 56, 70, 45, 67, 13, 35, 43, 67, 89, 90, 112, 113, 456 };for (int i = 0; i < sizeof(a) / sizeof(a[0]); i++){HeapPush(&hp, a[i]);}// 小堆特性会从小到大弹出while (!HeapEmpty(&hp)){printf("%d ", HeapTop(&hp));HeapPop(&hp);}return 0;
}
8.堆的应用
-堆排序
堆排序即利用堆的思想来进行排序,总共分为两个步骤:
1. 建堆
升序:建大堆
降序:建小堆
2. 利用堆删除思想来进行排序
建堆和堆删除中都用到了向下调整,因此掌握了向下调整,就可以完成堆排序。
9.TopK问题
TOP-K问题:即求数据结合中前K个最大的元素或者最小的元素,一般情况下数据量都比较大。
比如:专业前10名、世界500强、富豪榜、游戏中前100的活跃玩家等。
对于Top-K问题,能想到的最简单直接的方式就是排序,但是:如果数据量非常大,排序就不太可取了(可能数据都不能一下子全部加载到内存中)。最佳的方式就是用堆来解决,基本思路如下:
1. 用数据集合中前K个元素来建堆
前k个最大的元素,则建小堆
前k个最小的元素,则建大堆
2. 用剩余的N-K个元素依次与堆顶元素来比较,不满足则替换堆顶元素将剩余N-K个元素依次与堆顶元素比完之后,堆中剩余的K个元素就是所求的前K个最小或者最大的元素。
#include <stdio.h>
#include <stdlib.h>
#include <assert.h>
#include <time.h>
#include <stdbool.h> // 定义堆中数据的类型,这里使用 int 类型
typedef int HPDataType;// 定义堆的结构体
typedef struct Heap
{HPDataType* a; // 指向堆数据的指针int size; // 当前堆中元素的数量int capacity; // 堆的容量
} HP;// 初始化堆
void HeapInit(HP* php)
{// 断言传入的堆指针不为空assert(php);// 初始化堆数据指针为空php->a = NULL;// 初始化堆中元素数量为 0php->size = 0;// 初始化堆的容量为 0php->capacity = 0;
}// 销毁堆,释放堆所占用的内存
void HeapDestroy(HP* php)
{// 断言传入的堆指针不为空assert(php);// 释放堆数据所占用的内存free(php->a);// 将堆数据指针置为空php->a = NULL;// 将堆的容量和元素数量都置为 0php->capacity = php->size = 0;
}// 交换两个元素的值
void Swap(HPDataType* p1, HPDataType* p2)
{// 临时变量,用于存储其中一个元素的值HPDataType tmp = *p1;*p1 = *p2;*p2 = tmp;
}// 向上调整堆,保持堆的性质
void AdjustUp(HPDataType* a, int child)
{// 计算父节点的索引int parent = (child - 1) / 2;// 当子节点的索引大于 0 时,继续调整while (child > 0) {// 如果子节点的值小于父节点的值if (a[child] < a[parent]) {// 交换子节点和父节点的值Swap(&a[child], &a[parent]);// 更新子节点为原来的父节点child = parent;// 重新计算新的父节点的索引parent = (child - 1) / 2;}else {// 如果子节点的值不小于父节点的值,停止调整break;}}
}// 向下调整堆,保持堆的性质
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]) {// 交换父节点和子节点的值Swap(&a[parent], &a[child]);// 更新父节点为原来的子节点parent = child;// 重新计算新的子节点的索引child = parent * 2 + 1;}else {// 如果子节点的值不小于父节点的值,停止调整break;}}
}// 向堆中插入一个元素
void HeapPush(HP* php, HPDataType x)
{// 断言传入的堆指针不为空assert(php);// 如果堆的元素数量等于堆的容量,需要扩容if (php->size == php->capacity) {// 计算新的容量int newCapacity = php->capacity == 0 ? 4 : php->capacity * 2;// 重新分配内存HPDataType* tmp = (HPDataType*)realloc(php->a, newCapacity * sizeof(HPDataType));// 如果内存分配失败if (tmp == NULL) {// 输出错误信息perror("realloc fail");return;}// 更新堆数据指针php->a = tmp;// 更新堆的容量php->capacity = newCapacity;}// 将新元素插入到堆的末尾php->a[php->size++] = x;// 向上调整堆AdjustUp(php->a, php->size - 1);
}// 判断堆是否为空
bool HeapEmpty(HP* php)
{// 如果堆中元素数量为 0,则堆为空return php->size == 0;
}// 获取堆中元素的数量
int HeapSize(HP* php)
{return php->size;
}// 删除堆顶元素
void HeapPop(HP* php)
{// 断言传入的堆指针不为空且堆不为空assert(php && !HeapEmpty(php));// 交换堆顶元素和堆的最后一个元素Swap(&php->a[0], &php->a[php->size - 1]);// 堆的元素数量减 1php->size--;// 向下调整堆AdjustDown(php->a, php->size, 0);
}// 获取堆顶元素
HPDataType HeapTop(HP* php)
{// 断言传入的堆指针不为空且堆不为空assert(php && !HeapEmpty(php));return php->a[0];
}// 生成随机数据并保存到文件中
void CreateNate()
{// 生成 1000 个随机数int n = 1000;// 初始化随机数种子srand(time(0));// 定义要保存数据的文件名const char* file = "data.txt";// 以写入模式打开文件FILE* fin = fopen(file, "w");// 如果文件打开失败if (fin == NULL) {// 输出错误信息perror("fopen error");return;}// 循环生成随机数并写入文件for (int i = 0; i < n; i++) {// 生成 0 到 9999 之间的随机数int x = rand() % 10000;// 将随机数写入文件fprintf(fin, "%d\n", x);}// 关闭文件fclose(fin);
}// 打印文件中最大的 k 个元素
void PrintTopK(int k)
{// 定义要读取数据的文件名const char* file = "data.txt";// 以读取模式打开文件FILE* fin = fopen(file, "r");// 如果文件打开失败if (fin == NULL) {// 输出错误信息perror("fopen error");return;}// 分配内存,用于存储最小堆int* kminheap = (int*)malloc(sizeof(int) * k);// 如果内存分配失败if (kminheap == NULL){// 输出错误信息perror("malloc fail");return;}// 从文件中读取前 k 个元素到最小堆中for (int i = 0; i < k; i++) {fscanf(fin, "%d", &kminheap[i]);}// 对最小堆进行建堆操作for (int i = (k - 1 - 1) / 2; i >= 0; i--){AdjustDown(kminheap, k, i);}// 用于存储从文件中读取的元素int val = 0;// 从文件中继续读取元素while (fscanf(fin, "%d", &val) != EOF) {// 如果读取的元素大于最小堆的堆顶元素if (val > kminheap[0]) {// 替换堆顶元素kminheap[0] = val;// 向下调整堆AdjustDown(kminheap, k, 0);}}// 打印最小堆中的元素for (int i = 0; i < k; i++) {printf("%d ", kminheap[i]);}printf("\n");// 释放最小堆所占用的内存free(kminheap);// 关闭文件fclose(fin);
}int main()
{// 生成随机数据并保存到文件中CreateNate();// 打印文件中最大的 3 个元素PrintTopK(3);return 0;
}
相关文章:
数据结构-堆排序
1.定义 -堆中每个节点的值都必须大于等于(或小于等于)其左右子节点的值。如果每个节点的值都大于等于其子节点的值,这样的堆称为大根堆(大顶堆);如果每个节点的值都小于等于其子节点的值,称为…...
影响服务器性能的主要因素是什么
在这个数字化高速发展的时代,服务器就像是幕后的超级英雄,默默支撑着我们丰富多彩的网络世界。首先,硬件配置堪称服务器性能的基石。就好比一辆跑车,强大的引擎(CPU)、宽敞的跑道(内存ÿ…...
为什么 MySQL 用 B+ 树作为数据的索引,以及在 InnoDB 中数据库如何通过 B+ 树索引来存储数据以及查找数据
http://www.liuzk.com/410.html 索引是一种数据结构,用于帮助我们在大量数据中快速定位到我们想要查找的数据。 索引最形象的比喻就是图书的目录了。注意这里的大量,数据量大了索引才显得有意义,如果我想要在 [1,2,3,4] 中找到 4 这个数据&am…...
若依框架Ruoyi-vue整合图表Echarts中国地图标注动态数据
若依框架Ruoyi-vue整合图表Echarts中国地图 概述创作灵感预期效果整合教程前期准备整合若依框架1、引入china.json2、方法3、data演示数据4、核心代码 完整代码[毫无保留]组件调用 总结 概述 首先,我需要回忆之前给出的回答,确保这次的内容不重复&#…...
可撤销并查集,原理分析,题目练习
零、写在前面 可撤销并查集代码相对简单,但是使用场景往往比较复杂,经常用于处理离线查询,比较经典的应用是结合线段树分治维护动态连通性问题。在一些较为综合的图论问题中也经常出现。 前置知识:并查集,扩展域并查…...
中介者模式(Mediator Pattern)详解
文章目录 1. 中介者模式概述1.1 定义1.2 基本思想2. 中介者模式的结构3. 中介者模式的UML类图4. 中介者模式的工作原理5. Java实现示例5.1 基本实现示例5.2 飞机空中交通控制示例5.3 GUI应用中的中介者模式6. 中介者模式的优缺点6.1 优点6.2 缺点7. 中介者模式的适用场景8. 中介…...
Java网络编程:深入剖析UDP数据报的奥秘与实践
在浩瀚的计算机网络世界中,数据传输协议扮演着至关重要的角色。其中,用户数据报协议(UDP,User Datagram Protocol)以其独特的“轻量级”和“无连接”特性,在众多应用场景中占据了一席之地。与更为人熟知的传输控制协议(TCP,Transmission Control Protocol)相比,UDP提…...
17.thinkphp的分页功能
一.分页功能 1.不管是数据库操作还是模型操作,都使用paginate()方法来实现(第一种方式); //查找user表所有数据,每页显示5条 returnView::fetch(index, [list > User::paginate(5)]); 页数: 2.创建一个静态模版页面…...
Pandas比MySQL快?
知乎上有人问,处理百万级数据,Python列表、Pandas、Mysql哪个更快? Pands是Python中非常流行的数据处理库,拥有大量用户,所以拿它和Mysql对比也是情理之中。 实测来看,MySQL > Pandas > Python列表…...
问题 | 低空经济未来发展前景机遇及挑战
低空经济 **一、发展前景与机遇**1. **政策红利加速释放,顶层设计逐步完善**2. **技术突破驱动商业化落地**3. **应用场景多元化拓展**4. **万亿级市场潜力** **二、主要挑战**1. **空域管理与安全监管难题**2. **技术瓶颈与产业链短板**3. **法规与标准体系待完善*…...
Matlab 分数阶PID控制
1、内容简介 Matlab218-分数阶PID控制 可以交流、咨询、答疑 2、内容说明 略 3、仿真分析 略 4、参考论文 略...
如何对 Oracle 日志文件进行校验
目录 一、基本概述 二、基础知识 1、工具介绍 (1)BBED (2)dump 2、数据解析 (1)BLOCK 0 (2)BLOCK 1 (3)Block n( >=2 ) (4)redo record header (5)redo change 1)redo change header 2)redo change length list (6)Example 三、参考代码…...
从零开始用 AI 编写一个复杂项目的实践方法论
从零开始用 AI 编写一个复杂项目的实践方法论 这篇文章我用ai润色了一下,但是初稿是完全由我个人整理的逻辑思路,不是完全由ai生成的。其中内容也确实是我在实践中遇到问题、解决问题、总结出来的经验。 在从零开发一个复杂项目时,直接把目标…...
k8s监控方案实践(一):部署Prometheus与Node Exporter
k8s监控方案实践(一):部署Prometheus与Node Exporter 文章目录 k8s监控方案实践(一):部署Prometheus与Node Exporter一、Prometheus简介二、PrometheusNode Exporter实战部署1. 创建Namespace(p…...
2.5 特征值与特征向量
本章围绕特征值、特征向量及其应用展开,是线性代数的核心章节之一。以下从四个核心考点系统梳理知识体系: 考点一:矩阵的特征值与特征向量 1. 计算方法 具体矩阵: 解特征方程 ∣ λ E − A ∣ 0 |\lambda E - A| 0 ∣λE−A∣…...
从简历筛选到面试管理:开发一站式智能招聘系统源码详解
当下,如何打造一款高效、精准的一站式智能招聘系统,成为了很多人力资源科技公司和创业团队关注的焦点。在这篇文章中,将带你深入了解如何从零开始开发一款智能招聘系统源码,涵盖从简历筛选到面试管理的全流程。 一、招聘系统的核心…...
10.进程控制(下)
一、进程程序替换(重点) 在程序替换过程中,并没有创建新的进程,只是把当前进程的代码和数据用新程序的代码和数据进行覆盖式的替换。 1)一旦程序替换成功,就去执行新代码了,后序代码不执行 2&am…...
【Python 字符串】
Python 中的字符串(str)是用于处理文本数据的基础类型,具有不可变性、丰富的内置方法和灵活的操作方式。以下是 Python 字符串的核心知识点: 一、基础特性 定义方式: s1 单引号字符串 s2 "双引号字符串" s…...
最新CDGP单选题(第四章)补充
31、 [单选] 企业数据模型主题域的识别准则必须在整个企业模型中保持一致,以下哪项是常用的主题域识别准则: A:使用规范化规则,从系统组合中分离主题域...
Cursor降智找不到文件(Cursor降智)
文章目录 明明提供了上下文,却找不到文件! 明明提供了上下文,却找不到文件! 解决办法,删除codebase index,最好再把那个Index new folders by default给设置为Disabled。 这样设置貌似就不会出现找不到文件…...
Python基于Django和MySQL实现突发公共卫生事件舆情分析系统(有大屏功能)
说明:这是一个系统实战项目(附带代码文档安装讲解),如需代码文档安装讲解可以直接到文章最后关注获取。 系统演示如下: Python基于Django和MySQL实现突发公共卫生事件舆情分析系统(有大屏功能) 项目背景 随着互联网的…...
cat、more和less的区别
在 Linux 系统中,cat、more 和 less 都是用于查看文件内容的命令,但它们在功能和使用场景上有显著区别。以下是它们的详细对比: 1. cat 命令 功能: - 直接输出整个文件:一次性将文件内容全部显示在终端上ÿ…...
Python cv2特征检测与描述:从理论到实战
在计算机视觉领域,特征检测与描述是图像匹配、物体识别、SLAM等任务的核心技术。本文将结合OpenCV的cv2库,系统讲解特征检测与描述的原理,并通过Python代码演示主流算法的实现。 一、为什么需要特征检测与描述? 图像本质是像素矩…...
实践005-Gitlab CICD全项目整合
文章目录 环境准备环境准备集成Kubernetes Gitlab CICD项目整合项目整合整合设计 后端Java项目部署后端Java项目静态检查后端Java项目镜像构建创建Java项目部署文件创建完整流水线 前端webui项目部署前端webui项目镜像构建创建webui项目部署文件创建完整流水线 构建父子类型流水…...
为了摸鱼和吃瓜,我开发了一个网站
平时上班真的比较累,摸鱼和吃瓜还要跳转多个平台的话,就累上加累了。 所以做了一个聚合了全网主流平台热搜的网站。 目前市面上确实有很多这种网站了,所以目前最主要有两点和他们不同: 给热搜列表增加了配图,刷的时候…...
React -> AI组件 -> 调用Ollama模型, qwen3:1.7B非常聪明
使用 React 搭建一个现代化的聊天界面,支持与 Ollama 本地部署的大语言模型进行多轮对话。界面清爽、功能完整,支持 Markdown 渲染、代码高亮、<think> 隐藏思考标签、流式渐进反馈、暗黑模式适配等特性。 🧩 核心功能亮点 ✅ 模型选择…...
算法中的数学:约数
1.求一个整数的所有约数 对于一个整数x,他的其中一个约数若为i,那么x/i也是x的一个约数。而其中一个约数的大小一定小于等于根号x(完全平方数则两个约数都为根号x),所以我们只需要遍历到根号x,然后计算出另…...
性能远超SAM系模型,苏黎世大学等开发通用3D血管分割基础模型
如果把人的身体比作一座庞大的城市,那么血管无疑就是这座城市的「道路」,动脉、静脉以及毛细血管对应着高速公路、城市道路以及乡间小道,它们相互协作,通过血液将营养物质、氧气等输送到身体各处,从而维持着这座「城市…...
对 Kotlin 中的 data 关键字的理解,相比于普通类有哪些特点?
Kotlin 中的 data 关键字用于声明数据类(Data Class),它专门为简化数据模型的实现而设计的。 1 主构造函数必须至少有一个参数,且参数标记为 val 或 var 数据类的主构造函数必须至少有一个参数,并且这些参数必须使用…...
电厂参与全球能源效率排名的方法
在全球积极推动可持续能源发展的大背景下,电厂参与全球能源效率排名,对提升自身竞争力、推动行业进步意义重大。这不仅有助于电厂明确自身在全球能源领域的地位,还能促进其通过能效对标,学习先进经验,实现节能减排与高…...
〖 Linux 〗解决 VS Code 远程连接服务器的常见问题
文章目录 解决 VS Code 远程连接服务器的断开问题VS Code Remote-SSH一直弹出输入密码的问题VsCode C 语法检测失效不标红色波浪线 解决办法卸载扩展方式: 解决vscode C智能提示缓慢 解决 VS Code 远程连接服务器的断开问题 解决 vscode 卡顿,卡死&…...
谷歌 Gemma 大模型安装步骤
1.下载OllamaSetup安装包 下载地址:https://ollama.com/download 这里已Windows系统为例: 2.安装OllamaSetup客户端 3.部署大模型 在系统搜索栏里面,搜索cmd并打开 根据电脑实际配置情况选择对应的模型进行安装 【1】. 普通7B版 安装指…...
【Linux修炼手册】Linux开发工具的使用(一):yum与vim
文章目录 一、Linux 软件包管理器——yum安装与卸载的使用方法查看软件包 二、Linux编辑器——vimvim命名模式常用指令底行模式常用指令 一、Linux 软件包管理器——yum Linux安装软件的方式有3种: 源代码安装——成本极高rmp安装——具有安装依赖、安装源、安装版…...
JAVA房屋租售管理系统房屋出租出售平台房屋销售房屋租赁房屋交易信息管理源码
一、源码描述 这是一套房屋租售管理源码,基于SpringBootVue框架,后端采用JAVA开发,源码功能完善,涵盖了房屋租赁、房屋销售、房屋交易等业务。 二、源码截图...
XL32F001国产低成本单片机,24MHz主频,24KB Flash,3KB SRAM
XL32F001 是一颗基于ARM Cortex-M0内核的32 位微控制器,专为低成本、低功耗、小型化嵌入式系统设计,适合对资源需求中等但强调性价比和能效的场景。主频可达24M,内存方面有24KB Flash和3KB SRAM,适用于资源需求不大的应用场景。1.…...
k8s术语之job
Job类型 Kubernetes支持以下几种Job: 非并行Job:通常创建一个Pod直至其成功结束 固定结束次数的Job:设置.spec.completions,创建多个 Pod,直到 .spec.completions 个 Pod 成功结束 带有工作队列的并行Job:设置.spec.Parallelism 但…...
单片机-STM32部分:8、外部中断
飞书文档https://x509p6c8to.feishu.cn/wiki/ENFswNTSGiblehkIMtfc9dYinqh 创建工程 按工程创建章节步骤,把工程创建好,并配置外部时钟源,SWD调试模式,时钟72MHz。 设置引脚模式 找到需要配置的按键,例如PC2&#…...
电子电器架构 --- 电气/电子架构如何发展以满足其处理和传感器融合需求
我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 钝感力的“钝”,不是木讷、迟钝,而是直面困境的韧劲和耐力,是面对外界噪音的通透淡然。 生活中有两种人,一种人格外在意别人的眼光;另一种人无论…...
WordPress插件:WPJAM Basic优化设置
WPJAM Basic 插件的「优化设置」是我爱水煮鱼博客多年使用 WordPress 的经验而整理的各类优化设置。 一、功能屏蔽 功能屏蔽就是屏蔽一些WordPress中用不上、难用的功能,目前的支持屏蔽以下功能: (1)屏蔽文章修订功能 文章修…...
数字电子技术基础(五十六)——JK触发器
目录 1 JK触发器 2 使用Digital软件来绘制JK触发器 1 JK触发器 对于D触发器来说,其功能是过于简单了,D触发器只有置0和置1的操作,而JK触发器相对于D触发器处理原来的保持、置位和复位的操作,还增加了翻转操作。JK触发器通过优化…...
python小说网站管理系统-小说阅读系统
目录 技术栈介绍具体实现截图系统设计研究方法:设计步骤设计流程核…...
Python程序,输入IP,扫描该IP哪些端口对外是开放的,输出端口列表
#!/usr/bin/env python # -*- coding: utf-8 -*-""" IP端口扫描程序 输入IP地址,扫描该IP哪些端口对外是开放的,输出端口列表 """import socket import sys import concurrent.futures import ipaddress from tabulate im…...
极狐GitLab 容器镜像仓库功能介绍
极狐GitLab 是 GitLab 在中国的发行版,关于中文参考文档和资料有: 极狐GitLab 中文文档极狐GitLab 中文论坛极狐GitLab 官网 极狐GitLab 容器镜像库 (BASIC ALL) 您可以使用集成的容器镜像库,来存储每个极狐GitLab 项目的容器镜像。 要为您…...
【嵌入式开发-IIC】
嵌入式开发-IIC ■ IIC简介■ IIC ■ IIC简介 ■ IIC...
能见度测量仪:能适应各种恶劣天气状况
云境天合TH-BN10能见度测量仪是一种用于测量大气能见度的专业仪器,在气象观测、交通运输、航空航海等领域发挥着关键作用。 能见度即目标物的能见距离,指观测目标物时,能从背景上分辨出目标物轮廓的最大距离,是重要的气象观测要素…...
运维打铁:服务器分类及PHP入门
文章目录 C/S架构和B/S架构C/S架构B/S架构 服务器分类服务器类型服务器软件 使用 WampServer 搭建 HTTP服务集成环境的分类WampServer 的安装测试访问配置网站根目录 静态网站和动态网站PHP的常见语法第一段 php 代码注释变量数据类型运算符函数的定义类和对象内容输出循环语句…...
SpringBoot应急知识学习系统开发实现
概述 一个基于SpringBoot开发的应急知识学习系统,该系统提供了完整的用户注册、登录、知识学习与测评功能。对于开发者而言,这是一个值得参考的免费Java源码项目,可以帮助您快速构建类似的教育平台。 主要内容 5.2 注册模块的实现 系统采…...
系统思考助力富维东阳
刚刚完成了长春一家汽车零配件公司关于系统思考的项目! 在开班仪式上,公司总经理深刻阐述了项目的背后意义,强调了系统思考与公司战略的紧密联系。这不仅是一次培训,更是一次关于“如何全方位看待问题”的深度对话。 在这个过程中…...
《供应链网络攻击的风险与防范》
中国古语有云:“千里之堤,溃于蚁穴。”供应链攻击正是利用这种系统性弱点发起攻势。近年来,随着国内数字化转型加速,供应链安全问题频发。从某盟删库事件到某头部物流企业数据泄露,从某国产工业软件遭恶意代码植入到某…...
【MySQL】进阶知识详解
目录 引言一、约束:数据完整性的守护者1.1 约束的作用与分类1.2 约束的语法详解非空约束唯一约束主键约束外键约束1.3 约束实战案例二、数据库设计:表关系的艺术2.1 三种核心表关系一对多(部门-员工)多对多(学生-课程)一对一(用户-详情)三、多表查询:数据关联的桥梁3.…...