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

堆的实现以及利用堆进行排序

  • 堆的实现
    • 1. 什么是堆?
    • 2. 最小堆的核心操作
      • 2.1 初始化堆
      • 2.2 销毁堆
      • 2.3 插入元素
      • 2.4 删除堆顶元素
      • 2.5 获取堆顶元素
      • 2.6 判断堆是否为空
    • 3. 调整堆的算法
      • 3.1 向上调整
      • 3.2 向下调整
    • 4. 测试代码
  • 堆排序
      • 一.向下调整建堆
      • 二.向上调整建堆
    • 时间复杂度分析
      • 向上建堆分析:
      • 向下建堆分析
  • 总结

堆的实现

在数据结构中,堆是一种非常重要的结构,尤其在需要频繁访问最大值或最小值的场景中。今天,我们将通过C语言实现一个最小堆,并详细介绍其核心功能和实现细节。最大堆的实现只需通过改变向上向下调整的大于小于号即可

1. 什么是堆?

堆是一种特殊的完全二叉树,分为最大堆和最小堆。在最小堆中,父节点的值总是小于或等于其子节点的值。这种特性使得堆的根节点始终是所有节点中的最小值,非常适合实现优先队列。
在这里插入图片描述
堆有以下的性质:

  1. 堆中某个结点的值总是不⼤于或不⼩于其⽗结点的值;
  2. 堆总是⼀棵完全⼆叉树。

⼆叉树性质

  1. 对于具有 n 个结点的完全⼆叉树,如果按照从上⾄下从左⾄右的数组顺序对所有结点从0 开始编号,则对于序号为 i 的结点有:

  2. 若 i>0 , i 位置结点的双亲序号: (i-1)/2 ; i=0 , i 为根结点编号,⽆双亲结点

  3. 若 2i+1<n ,左孩⼦序号: 2i+1 , 2i+1>=n 否则⽆左孩⼦

  4. 若 2i+2<n ,右孩⼦序号: 2i+2 , 2i+2>=n 否则⽆右孩⼦

2. 最小堆的核心操作

最小堆的基本操作包括初始化、插入、删除、获取堆顶元素、判断堆是否为空等。以下是这些操作的具体实现:

2.1 初始化堆

初始化堆时,我们需要为堆分配一个动态数组,并设置其容量和大小。

void HeapInit(Heap* php)
{assert(php);php->a = NULL;php->capacity = php->size = 0;
}

2.2 销毁堆

销毁堆时,需要释放动态分配的内存,并将堆的指针和容量、大小重置为初始状态。

void HeapDestroy(Heap* hp)
{if (!hp) return;if (hp->a)free(hp->a);hp->a = NULL;hp->capacity = hp->size = 0;
}

2.3 插入元素

插入元素时,首先检查堆的容量是否已满。如果已满,则动态扩展容量。插入后,通过向上调整(AdjustUp)确保堆的性质。

int HeapPush(Heap* php, HPDataType x)
{assert(php);if (php->capacity == php->size){int newcapacity = php->capacity == 0 ? 4 : php->capacity * 2;HPDataType* tmp = (HPDataType*)realloc(php->a, sizeof(HPDataType) * newcapacity);if (tmp == NULL)return -1;php->a = tmp;}php->a[php->size] = x;AdjustUp(php->a, php->size);php->size++;return 0;
}

2.4 删除堆顶元素

删除堆顶元素时,将堆顶元素与最后一个元素交换,然后减少堆的大小,并通过向下调整(AdjustDown)确保堆的性质。

void HeapPop(Heap* hp)
{assert(!HeapEmpty(hp));Swap(&hp->a[0], &hp->a[hp->size - 1]);hp->size--;AdjustDown(hp->a, 0, hp->size);
}

2.5 获取堆顶元素

堆顶元素即为堆的根节点,可以直接返回。

HPDataType HeapTop(Heap* hp)
{assert(hp);return hp->a[0];
}

2.6 判断堆是否为空

通过检查堆的大小是否为零来判断堆是否为空。

bool HeapEmpty(Heap* hp)
{assert(hp);return hp->size == 0;
}

3. 调整堆的算法

堆的调整是实现堆操作的核心。向上调整(AdjustUp)和向下调整(AdjustDown)分别用于插入和删除操作。

3.1 向上调整

向上调整算法

• 先将元素插⼊到堆的末尾,即最后⼀个孩⼦之后

• 插⼊之后如果堆的性质遭到破坏,将新插⼊结点顺着其双双亲往上调整到合适位置即可
向上调整用于插入操作。从插入的节点开始,逐层向上比较和交换,直到满足堆的性质。

void AdjustUp(HPDataType* arr, int child)
{int parent = (child - 1) / 2;while (child > 0){if (arr[child] < arr[parent]){Swap(&arr[child], &arr[parent]);child = parent;parent = (child - 1) / 2;}elsebreak;}
}

3.2 向下调整

向下调整算法

• 将堆顶元素与堆中最后⼀个元素进⾏交换

• 删除堆中最后⼀个元素

• 将堆顶元素向下调整到满⾜堆特性为⽌

向下调整用于删除操作。从根节点开始,逐层向下比较和交换,直到满足堆的性质。

void AdjustDown(HPDataType* arr, int parent, int n)
{int child = parent * 2 + 1;while (child < n){if (child + 1 < n && arr[child] > arr[child + 1])child++;if (arr[parent] > arr[child]){Swap(&arr[child], &arr[parent]);parent = child;child = parent * 2 + 1;}elsebreak;}
}

4. 测试代码

以下是测试代码,用于验证堆的功能:

int main()
{Heap hp;HeapInit(&hp);HeapPush(&hp, 5);HeapPush(&hp, 3);HeapPush(&hp, 8);HeapPush(&hp, 2);printf("HeapTop: %d\n", HeapTop(&hp)); // 输出 2printf("HeapSize: %d\n", HeapSize(&hp)); // 输出 4HeapPop(&hp);printf("HeapTop after pop: %d\n", HeapTop(&hp)); // 输出 3HeapDestroy(&hp);return 0;
}

堆排序

堆排序时通常排的是升序,需改变adjust down的大于小于号,使其排最大堆;

一.向下调整建堆

  1. 构建最大堆:
    初始时,数组是无序的,需要将其构建成一个最小堆。
    从最后一个非叶子节点开始(索引为 (n - 1 - 1) / 2),逐个向上调整,确保每个子树都满足最大堆的性质。
    调整完成后,数组的前半部分形成了一个最小堆。
  2. 排序过程:
    每次将堆顶元素(最大值)与堆的最后一个元素交换,这样最大值就放到了数组的末尾。
    然后缩小堆的范围(end–),并重新调整堆,确保剩余部分仍然是一个最小堆。
    重复上述过程,直到堆中只剩下一个元素,此时数组已经完全排序
void HeapSort(int* a, int n)
{for (int i = (n - 1 - 1) / 2; i >= 0; i--){AdjustDown(a, i, n);}int end = n - 1;while (end > 0){Swap(&a[0], &a[end]);AdjustDown(a, 0, end);end--;}
}

二.向上调整建堆

  1. (一)向上调整(AdjustUp)
    向上调整是用于在插入新元素时,将元素调整到合适的位置,以保持堆的性质。其步骤如下:
    比较当前节点与其父节点的值。
    如果当前节点的值大于父节点的值(最大堆),则交换它们的位置。
    更新当前节点为父节点,重复上述步骤,直到当前节点的值小于父节点的值,或者当前节点已经是根节点。
  2. (二)向下调整(AdjustDown)
    向下调整是用于在删除堆顶元素后,将堆重新调整为最大堆。其步骤如下:
    比较当前节点与其子节点的值。
    如果子节点的值大于当前节点的值(最大堆),则交换它们的位置。
    更新当前节点为子节点,重复上述步骤,直到当前节点的值大于其子节点的值,或者当前节点已经是叶子节点。
  3. (三)堆排序的完整过程
    构建最大堆:从最后一个非叶子节点开始,逐个向上调整,直到根节点。

排序:

  1. 交换堆顶元素和最后一个元素。
  2. 对剩余的堆重新调整,使其满足最大堆的性质。
  3. 重复上述步骤,直到堆的大小为1。
void HeapSort1(int* a, int n) {// 构建最大堆for (int i = 0; i < n; i++) {AdjustUp(a, i);}//排序过程int end = n - 1;while (end > 0) {Swap(&a[0], &a[end]); // 交换堆顶和最后一个元素AdjustDown(a, 0, end); // 重新调整堆end--;}
}

在日常使用堆排序时,一般使用向下建堆,因为在考虑时间复杂度时,向下建堆要小于向上建堆。
在这里插入图片描述

时间复杂度分析

向上建堆分析:

第1层,0个结点,需要向上移动0层
第2层,2个结点,需要向上移动1层
第3层,4个结点,需要向上移动2层
第4层,8个结点,需要向上移动3层

第h层,2的h次个结点,需要向上移动h-1层
在这里插入图片描述

向下建堆分析

分析:
第1层,0个结点,需要向下移动h-1层
第2层, 2个结点,需要向下移动h-2层
第3层, 4个结点,需要向下移动h-3层
第4层,8个结点,需要向下移动h-4层

第h-1层,2 个结点,需要向下移动1层
到这里为止,就可以大略的看出其实向下建堆时间复炸度其实是要小的。
下面给出数学分析:
在这里插入图片描述

总结

通过上述代码,我们实现了一个功能完整的最小堆。堆的核心操作包括初始化、插入、删除、获取堆顶元素等。通过向上调整和向下调整算法,我们确保了堆的性质始终得以维护。

相关文章:

堆的实现以及利用堆进行排序

堆 堆的实现1. 什么是堆&#xff1f;2. 最小堆的核心操作2.1 初始化堆2.2 销毁堆2.3 插入元素2.4 删除堆顶元素2.5 获取堆顶元素2.6 判断堆是否为空 3. 调整堆的算法3.1 向上调整3.2 向下调整 4. 测试代码 堆排序一.向下调整建堆二.向上调整建堆 时间复杂度分析向上建堆分析&am…...

FPGA-VGA

目录 前言 一、VGA是什么&#xff1f; 二、物理接口 三、VGA显示原理 四、VGA时序标准 五、VGA显示参数 六、模块设计 七、波形图设计 八、彩条波形数据 前言 VGA的FPGA驱动 一、VGA是什么&#xff1f; VGA&#xff08;Video Graphics Array&#xff09;是IBM于1987年推出的…...

仿腾讯会议项目开发——界面关闭功能实现

目录 1、include(./netapi/netapi.pri) 2、加快构建速度 3、INCLUDEPATH./netapi 4、添加控制类 5、用单例模式创建一个Ckernel的对象 6、创建一个回收的槽函数 7、添加界面文件 8、创建一个私有的界面对象 9、修改为使用单例模式的控制类创建界面 10、在Ckernel类中…...

微信小程序怎么分包步骤(包括怎么主包跳转到分包)

第一步 主包跳转到分包 第一步 第二步...

点云配准控制迭代停止的阈值

在点云配准&#xff08;如ICP算法&#xff09;中&#xff0c;setEuclideanFitnessEpsilon() 是一个设置收敛条件的函数&#xff0c;用于控制迭代停止的阈值。以下是关于该参数的详细说明&#xff1a; 函数作用 setEuclideanFitnessEpsilon() 设置的是 两次连续迭代之间均方误…...

高频面试题:Android MVP/MVVM/MVI这几种架构在实际生产中,各自的优缺点和适用场景是什么

安卓开发早期的架构模式相对简单&#xff0c;许多开发者直接在Activity或Fragment中堆砌业务逻辑和UI操作&#xff0c;这种方式虽然在小型项目中看似高效&#xff0c;但随着代码量的增加&#xff0c;很快就会导致逻辑混乱、难以测试和维护的问题。Activity和Fragment作为安卓框…...

国内主要半导体厂家

以下是国内主要半导体厂家按产品类别&#xff08;模拟、数字、MCU、功率、传感器等&#xff09;的分类总结&#xff0c;涵盖各领域代表企业及其核心产品方向&#xff1a; ​一、模拟芯片&#xff08;Analog IC&#xff09;​​ ​圣邦微电子&#xff08;SGMICRO&#xff09;​​…...

DeepSeek深度观察:白宫“炒人“威胁的语义强度与市场应激量化分析

一、AI观察&#xff1a;政治博弈的语义强度分析 通过NLP情感分析模型对特朗普近期公开言论的语义解析显示&#xff0c;总统在社交媒体及记者会中多次使用"立即解雇""卷铺盖走人"等极端表述&#xff0c;其公开威胁解雇鲍威尔的推文互动量突破120万次&#…...

城市街拍暗色电影胶片风格Lr调色教程,手机滤镜PS+Lightroom预设下载!

调色介绍 城市街拍暗色电影胶片风格 Lr 调色&#xff0c;是借助 Adobe Lightroom 软件&#xff0c;为城市街拍的人像或场景照片赋予独特视觉风格的后期处理方式。旨在模拟电影胶片质感&#xff0c;营造出充满故事感与艺术感的暗色氛围&#xff0c;让照片仿佛截取于某部充满张力…...

图像分类标注小工具

图像分类标注小工具 不说废话 上代码 import os import cv2 import shutil import csvclass ImageLabeler:def __init__(self, input_dir, output_dir, class_names, csv_pathlabel_log.csv, preview_size(800, 800)):self.input_dir input_dirself.output_dir output_dirse…...

leetcode 2364. 统计坏数对的数目 中等

给你一个下标从 0 开始的整数数组 nums 。如果 i < j 且 j - i ! nums[j] - nums[i] &#xff0c;那么我们称 (i, j) 是一个 坏数对 。 请你返回 nums 中 坏数对 的总数目。 示例 1&#xff1a; 输入&#xff1a;nums [4,1,3,3] 输出&#xff1a;5 解释&#xff1a;数对…...

网络互连与互联网3

1.SMTP简单邮件传输协议&#xff0c;用于发送电子邮件&#xff0c;默认情况下是明文传输&#xff0c;没有加密机制。 SSL是一种安全协议&#xff0c;对电子邮件进行加密传输。 POP3主要用于接收电子邮件 IMAP用于接收电子邮件 2.采用存储-转发方式处理信号的设备是交换机 …...

docker部署springboot(eureka server)项目

打jar包 使用maven&#xff1a; <build><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><configuration><source>17</source><target>17&…...

git 出现 port 443 Connection timed out

梯子正常延迟不算严重&#xff0c;但在使用git push时反复出现 fatal: unable to access https://github.com/irvingwu5/xxxx.git/ Error in the HTTP2 framing layer Failed to connect to github.com port 443 after 136353 ms: Connection timed out 将git的网络配置与梯子…...

深入 MySQL 高级查询:JOIN、子查询与窗口函数的实用指南

在数据管理和分析的过程中&#xff0c;MySQL 提供了强大的查询功能&#xff0c;特别是在处理复杂数据关系时。本文将深入探讨 MySQL 的三种高级查询技术&#xff1a;JOIN、子查询和窗口函数。通过对这些技术的详细讲解和示例&#xff0c;帮助您更好地掌握并应用这些查询技巧。 …...

AXOP36061S: 60V 高压单通道运算放大器

AXOP36061S 是一款通用型高压带关断功能的单通道运算放大器&#xff0c;工作电压为3V至60V&#xff0c;具有17MHz的带宽和 15V/μs的压摆率&#xff0c;静态电流2.2mA&#xff0c;关断电流80μA&#xff0c;高耐压和宽带宽使其可以胜任绝大多数的高压应用场景。得益于对噪声和T…...

Aladdin显卡多任务运行教程

Aladdin显卡多任务运行 任务场景操作步骤其他说明 任务场景 当我运行我的代码后发现80G的显存仅占用了46G左右&#xff0c;还有很大空间没有被使用&#xff0c;于是想着能不能把剩下的空间也利用起来&#xff0c;于是有了接下来的工作。 操作步骤 当我们使用GPU run/debug/…...

Oracle AWR快照保留策略及其修改

文章目录 一、AWR快照保留机制及其修改方法二、生产环境建议三、监控建议 一、AWR快照保留机制及其修改方法 默认保留策略&#xff1a; • 标准保留期&#xff1a;8天 • 快照间隔&#xff1a;每小时1次&#xff08;默认&#xff09; • 存储位置&#xff1a;SYSAUX表空间 保留…...

日本公司如何实现B2B商城订货系统的自动化和个性化?

在日本构建具备前后台日文本地化、业务员代客下单、一客一价、智能拆单发货的B2B电商系统&#xff0c;需结合日本商业习惯与技术实现。以下是关键模块的落地方案&#xff1a; 一、系统架构设计 1. 前端本地化 语言与UI适配 采用全日语界面&#xff0c;包含敬语体系&#xff08…...

JavaScript 核心特性完全指南

引言 JavaScript 已经不再只是浏览器中的脚本语言,它支撑着前端、后端(Node.js)、桌面(Electron)、移动端(React Native)等多种生态。要在现代 Web 开发中游刃有余,除了会写代码,更要深刻理解语言特性、掌握常见模式和优化技巧。下面逐一深入解析 20 大核心特性。 1.…...

CentOS系统中排查进程异常终止的日志

在CentOS系统中排查进程异常终止的日志&#xff0c;可通过以下步骤结合多类日志文件和工具进行综合分析&#xff1a; 一、核心日志文件排查 系统全局日志‌ 查看 /var/log/messages&#xff1a;记录系统级错误、内核消息及进程异常终止信息&#xff0c;如OOM Killer事件‌。…...

Vue组件安全工程的量子跃迁:从基因改造到生态免疫

总章数字生命的进化论 2023年某电商平台红蓝对抗中&#xff0c;一个未净化的v-html指令导致千万用户数据泄露。当我们剖开现代Web应用的器官式架构&#xff0c;发现90%的安全漏洞都源自组件间的信任危机。本文将带您见证如何用军工级防御体系重构Vue组件&#xff0c;使其具备类…...

编程技能:调试03,逐过程命令与退出调试

专栏导航 本节文章分别属于《Win32 学习笔记》和《MFC 学习笔记》两个专栏&#xff0c;故划分为两个专栏导航。读者可以自行选择前往哪个专栏。 &#xff08;一&#xff09;WIn32 专栏导航 上一篇&#xff1a;编程技能&#xff1a;调试02&#xff0c;设置断点与删除断点 回…...

基于Ubuntu22.04和OpenCV4.5.4的物联网人脸识别考勤机

前言&#xff1a;本人已有Ubuntu22.04的相关开发环境配置&#xff0c;并且默认C和机器学习基础&#xff0c;这里直接从安装opencv开始&#xff0c;完整代码在最后。具体情况具体分析&#xff0c;请以实际为主。 视频参考&#xff1a;【大厂敲门砖】从0到1做一个物联网人脸识别…...

java 排序算法-快速排序

快速排序&#xff08;Quick Sort&#xff09;是一种高效的排序算法&#xff0c;它使用分治法&#xff08;Divide and Conquer&#xff09;策略来把一个序列分为较小和较大的两个子序列&#xff0c;然后递归地排序两个子序列。 快速排序算法的基本思想&#xff1a; 选择基准值&…...

openEuler系统下源码编译安装Nginx实践教程

openEuler 24.03 LTS 源码编译安装Nginx实践教程 前言一、环境准备1. 系统要求2. 更新系统与基础配置二、依赖安装1. 安装编译工具链2. 安装Nginx核心依赖三、源码编译安装1. 下载Nginx源码2. 创建专用系统用户3. 配置编译参数4. 编译与安装四、服务配置与管理1. 创建Systemd服…...

helloword 1(安卓逆向工具简单利用)

题目 做法 下载&#xff0c;不要解压&#xff0c;直接拖入Exeinfo PE进行分析 文件后缀是apk&#xff0c;判断为安卓逆向题 拖进ApkIDE 先找主函数main函数&#xff0c;这题的flag直接出来了 &#xff08;搜索内容不要习惯性空格之类&#xff0c;这样会找不出来&#xff09;…...

基于ONT数据的乳腺癌BRCA1和BRCA2变异检测方法

评估 BRCA1/2 分子状态已成为乳腺癌患者治疗的标准操作。例如聚合酶抑制剂(PARPi)的开发和临床应用,PARPi 是肿瘤学家新疗法中的关键方式。已发现 PARPi 可改善携带 BRCA1/2 种系或体细胞突变的乳腺癌患者的临床结局,提高患者生存率和生活质量。因此,目前全球指南强烈建议…...

uniapp运行在app端如何使用缓存

uniapp运行在app端如何使用缓存 ​ 众所周知&#xff0c;uniapp可以一套代码&#xff0c;多端运行。但是需要注意的是&#xff0c;window对象以及document是浏览器特有的(所以app端无法使用localStorage等api)&#xff0c;因此&#xff0c;uniapp贴心的为我们准备了getStorage…...

人工智能代理重塑数字成功:为何面向机器的营销是下一前沿

随着人工智能&#xff08;AI&#xff09;改变消费者与数字世界的互动方式&#xff0c;数字营销正迎来一场革命性变革。2025年4月14日发布的一项研究揭示了AI代理——代表用户自主研究、比较和推荐产品或服务的系统——的日益增长的影响力。该研究探讨了这些代理如何与在线内容交…...

《奇迹世界起源》:神之月晓活动介绍!

神之月晓是《奇迹世界起源》手游中的一项限时抽奖活动&#xff0c;为玩家提供了获取丰厚奖励的机会。活动期间&#xff0c;玩家可以通过充值达到指定金额获得抽奖资格&#xff0c;每次充值一定金额即可获得一次抽奖机会&#xff0c;每天有抽奖次数上限。 活动规则&#xff1a;…...

AI测试用例生成平台

AI测试用例生成平台 项目背景技术栈业务描述项目展示项目重难点 项目背景 针对传统接口测试用例设计高度依赖人工经验、重复工作量大、覆盖场景有限等行业痛点&#xff0c;基于大语言模型技术实现接口测试用例智能生成系统。 技术栈 LangChain框架GLM-4模型Prompt Engineeri…...

【web服务_负载均衡Nginx】二、Nginx 核心技术之负载均衡与反向代理

一、负载均衡与反向代理概述​ 在互联网应用场景中&#xff0c;随着用户访问量的不断增加&#xff0c;单台服务器往往难以满足性能和可靠性的需求。负载均衡与反向代理技术应运而生&#xff0c;成为保障高并发、稳定服务的关键技术。负载均衡旨在将大量的客户端请求合理分配到…...

前端基础之《Vue(6)—组件基础(2)》

接上一篇。 七、v-model深入学习 <html> <head><title>组件基础-4</title><style>.score {display: inline-block;}.score>span {display: inline-block;width: 25px;height: 25px;background: url(./assets/star.png) center center / 25p…...

计算机网络——应用层

一、HTTP报文结构 &#xff08;1&#xff09;请求 请求行&#xff1a;请求头&#xff1a;空行&#xff1a;请求体&#xff1a; &#xff08;2&#xff09;响应 状态行&#xff1a;响应头&#xff1a;空行&#xff1a;响应体&#xff1a; &#xff08;3&#xff09;补充说明…...

基于springBoot+vue的PC 端学习系统(源码+lw+部署文档+讲解),源码可白嫖!

摘要 随着我国经济的高速发展与人们生活水平的日益提高&#xff0c;人们对生活质量的追求也多种多样。尤其在人们生活节奏不断加快的当下&#xff0c;人们更趋向于足不出户解决生活上的问题&#xff0c;线上管理系统展现了其蓬勃生命力和广阔的前景。与此同时&#xff0c;在疫…...

《软件设计师》复习笔记(11.3)——需求获取、分析、定义、验证、管理

目录 一、软件需求概述 真题示例&#xff1a; 二、质量功能部署&#xff08;QFD&#xff09; 三、需求开发流程 需求获取 需求分析 需求定义&#xff08;SRS&#xff09; 需求验证 真题示例&#xff1a; 四、需求管理 真题示例&#xff1a; 一、软件需求概述 软件…...

iOS Google登录

iOS Google登录 SDK下载地址在 Firebase 有下载&#xff0c;要下载整个SDK文件&#xff0c;然后拿其中的Google 登录SDK来使用 Firebase 官方文档 github 下载链接...

使用 Axios 进行 API 请求与接口封装:打造高效稳定的前端数据交互

引言 在现代前端开发中&#xff0c;与后端 API 进行数据交互是一项核心任务。Axios 作为一个基于 Promise 的 HTTP 客户端&#xff0c;以其简洁易用、功能强大的特点&#xff0c;成为了前端开发者处理 API 请求的首选工具。本文将深入探讨如何使用 Axios 进行 API 请求&#x…...

使用VHDL语言实现TXT文件的读写操作

使用FPGA进行图像处理时&#xff0c;通常需要将TXT文件中的图像数据读出到TestBench中&#xff0c;并将仿真的结果写入到TXT文件中&#xff0c;用于确认图像处理的结果是否正确。 VHDL中TXT文件的读写操作如下所示&#xff0c; --------------------------------------------…...

【家政平台开发(55)】家政平台数据生命线:备份与恢复策略全解析

本【家政平台开发】专栏聚焦家政平台从 0 到 1 的全流程打造。从前期需求分析,剖析家政行业现状、挖掘用户需求与梳理功能要点,到系统设计阶段的架构选型、数据库构建,再到开发阶段各模块逐一实现。涵盖移动与 PC 端设计、接口开发及性能优化,测试阶段多维度保障平台质量,…...

AbMol—细胞因子,你用对了么?

细胞因子是干细胞、类器官、肿瘤、免疫等研究中常用到的一类蛋白试剂&#xff0c;它的种类十分丰富&#xff0c;AbMole为大家介绍各类细胞因子及其适用的实验类型。AbMole提供高品质抑制剂、细胞因子、人源单抗、天然产物、荧光染料、多肽、抗生素。 细胞因子的定义与分类 细胞…...

【AI】实现中文文章摘要的AI模型

【AI】实现中文文章摘要的AI模型 推荐超级课程: 本地离线DeepSeek AI方案部署实战教程【完全版】Docker快速入门到精通Kubernetes入门到大师通关课AWS云服务快速入门实战目录 【AI】实现中文文章摘要的AI模型简介安装库加载模型获取 PEFT 模型测试模型简介 最近逛github查看…...

累计达2.04亿户!中国联通首次公布5G网络用户数据

快科技4月18日消息&#xff0c;日前中国联通公布了2025年第一季度运营数据。 中国联通表示&#xff0c;为更好反映本公司5G发展情况&#xff0c;公司将定期披露的5G套餐用户数更新为5G网络用户数&#xff0c;5G网络用户为当期使用过5G网络的移动用户。 数据方面&#xff0c;截…...

【重学Android】1.关于@Composer注解的一点知识笔记

最新因为一些原因&#xff0c;开始重新学习Android及kotlin编程&#xff0c;也觉得可以顺带记录下这个过程中的一些知识点&#xff0c;也可以用作日后自己查找复习。 Composable 注解在 Android 开发中的使用 Composable 是 Jetpack Compose&#xff08;Android 的现代声明式…...

OAuth2AuthorizationEndpointConfigurer类介绍、应用场景和示例代码

概述 OAuth2AuthorizationEndpointConfigurer 是 Spring Security OAuth2 授权服务器模块中的一个重要配置类&#xff0c;用于配置 OAuth2 授权端点(/oauth2/authorize)。 核心功能 这个配置类主要负责&#xff1a; 处理授权码授权流程中的授权请求 处理用户同意(consent)流…...

方德桌面操作系统V5.0-G23部署Ollama+DeekSeep+OpenWebUI

​​一、解压并安装 Ollama​​ 1. 解压文件 链接&#xff1a;ollama-linux-amd64.tgz下载地址 rootyuhua-virtualmachine:~# tar -xzvf ollama-linux-amd64.tgz bin/ollama lib/ollama/cuda_v11/ lib/ollama/cuda_v11/libggml-cuda.so lib/ollama/cuda_v11/libcublas.so.1…...

过去十年前端框架演变与技术驱动因素剖析

一、技术演进脉络&#xff08;2013-2023&#xff09; 2013-2015&#xff1a;结构化需求催生框架雏形 早期的jQuery虽然解决了跨浏览器兼容性问题&#xff08;如IE8兼容性处理&#xff09;&#xff0c;但其松散的代码组织方式难以支撑复杂应用开发。Backbone.js的出现首次引入M…...

Web三漏洞学习(其三:rce漏洞)

靶场&#xff1a;NSSCTF 三、RCE漏洞 1、概述 在Web应用开发中会让应用调用代码执行函数或系统命令执行函数处理&#xff0c;若应用对用户的输入过滤不严&#xff0c;容易产生远程代码执行漏洞或系统命令执行漏洞 所以常见的RCE漏洞函数又分为代码执行函数和系统命令执行函数…...

【人力资源管理系统】C#实现

软件项目实训报告2025版 第1部分 实训的目标与主要内容1.1 实训目标1.2 实训主要内容 第2部分 最终作品的完成情况2.1 课堂上要求的功能完成情况2.1.1 完成的功能及完成情况分析1. 建立数据库2. 登录界面3. MDI主窗体显示4. 登录日志功能5.员工列表查询功能 2.2 作业中要求的功…...