程序诗篇里的灵动笔触:指针绘就数据的梦幻蓝图<7>
大家好啊,我是小象٩(๑òωó๑)۶
我的博客:Xiao Xiangζั͡ޓއއ
很高兴见到大家,希望能够和大家一起交流学习,共同进步。
今天我们一起来学习转移表,回调函数,qsort…
目录
- 一、转移表
- 1.1 定义与原理
- 1.3 优点
- 二、回调函数是什么?
- 1.1 原理
- 1.2 使用方法
- 1.3 优点
- 三、qsort 使用举例
- 3.1 使用qsort函数排序整型数据
- 3.2 使用qsort排序结构数据
- 四、结尾
一、转移表
在 C 语言中,转移表(Jump Table)是一种用于实现多路分支选择的技术,也被称为跳转表或分支表。
1.1 定义与原理
转移表本质上是一个函数指针数组,数组中的每个元素都是一个指向函数的指针。它的原理是通过计算索引值来选择调用数组中的某个函数指针,从而实现根据不同条件跳转到不同代码段的功能,类似于根据索引查找表中的内容并执行相应操作。
1.3 优点
代码清晰简洁:
相比于使用大量的if-else语句或switch语句嵌套,转移表能使代码结构更加清晰,逻辑更加直观。尤其是在处理多个分支情况时,代码的可读性更高。
高效性:
在执行多路分支选择时,转移表的查找和跳转操作通常比复杂的if-else或switch判断更快。因为它主要通过数组索引直接定位到目标函数,而不需要逐个进行条件判断。
可扩展性:
当需要添加新的分支或功能时,只需在转移表中添加相应的函数指针,并实现对应的函数逻辑即可,对原有代码的改动较小,易于维护和扩展。
举例:计算器的⼀般实现:
#include <stdio.h>
int add(int a, int b)
{return a + b;
}
int sub(int a, int b)
{return a - b;
}
int mul(int a, int b)
{return a * b;
}
int div(int a, int b)
{return a / b;
}
int main()
{int x, y;int input = 1;int ret = 0;do{printf("*************************\n");printf(" 1:add 2:sub \n");printf(" 3:mul 4:div \n");printf(" 0:exit \n");printf("*************************\n");printf("请选择:");scanf("%d", &input);switch (input){case 1:printf("输⼊操作数:");scanf("%d %d", &x, &y);ret = add(x, y);printf("ret = %d\n", ret);break;case 2:printf("输⼊操作数:");scanf("%d %d", &x, &y);ret = sub(x, y);printf("ret = %d\n", ret);break;case 3:printf("输⼊操作数:");scanf("%d %d", &x, &y);ret = mul(x, y);printf("ret = %d\n", ret);break;case 4:printf("输⼊操作数:");scanf("%d %d", &x, &y);ret = div(x, y);printf("ret = %d\n", ret);break;case 0:printf("退出程序\n");break;default:printf("选择错误\n");break;}} while (input);return 0;
}
使⽤函数指针数组的实现:
#include <stdio.h>
int add(int a, int b)
{return a + b;
}
int sub(int a, int b)
{return a - b;
}
int mul(int a, int b)
{return a * b;
}
int div(int a, int b)
{return a / b;
}
int main()
{int x, y;int input = 1;int ret = 0;int(*p[5])(int x, int y) = { 0, add, sub, mul, div }; //转移表do{printf("*************************\n");printf(" 1:add 2:sub \n");printf(" 3:mul 4:div \n");printf(" 0:exit \n");printf("*************************\n");printf("请选择:");scanf("%d", &input);if ((input <= 4 && input >= 1)){printf("输⼊操作数:");scanf("%d %d", &x, &y);ret = (*p[input])(x, y);printf("ret = %d\n", ret);}else if (input == 0){printf("退出计算器\n");}else{printf("输⼊有误\n");}} while (input);return 0;
}
二、回调函数是什么?
回调函数是一个作为参数传递给另一个函数的函数,而接收回调函数作为参数的函数会在合适的时候调用这个传递进来的函数。简单来说,就是 A 函数将 B 函数作为参数传递给 C 函数,C 函数在某个时刻调用 B 函数,此时 B 函数就是回调函数。
1.1 原理
回调函数的核心原理基于函数指针。在 C 语言中,函数名本质上代表该函数的入口地址,而函数指针则可以存储这个地址。通过将函数指针作为参数传递给另一个函数,接收该参数的函数就可以在需要的时候通过这个指针调用对应的函数。
1.2 使用方法
以下是使用回调函数的基本步骤:
定义回调函数:首先要定义一个符合特定参数和返回值要求的函数,这个函数将作为回调函数使用。
定义接收回调函数作为参数的函数:该函数需要有一个函数指针类型的参数,用于接收回调函数的地址。
调用接收回调函数的函数:在调用时,将回调函数的名称作为参数传递给接收回调函数的函数。
1.3 优点
灵活性:通过回调函数,可以在不修改接收回调函数的函数的源代码的情况下,改变其行为。只需要传递不同的回调函数,就可以实现不同的功能。
代码复用:可以将一些通用的逻辑封装在接收回调函数的函数中,而将具体的处理逻辑放在回调函数中。这样,不同的回调函数可以复用接收回调函数的函数的代码。
异步编程:在异步编程中,回调函数非常有用。当某个操作完成时,可以通过回调函数通知调用者进行后续处理。
//使⽤回调函数改造前
#include <stdio.h>
int add(int a, int b)
{return a + b;
}
int sub(int a, int b)
{return a - b;
}
int mul(int a, int b)
{return a * b;
}
int div(int a, int b)
{return a / b;
}
int main()
{int x, y;int input = 1;int ret = 0;do{printf("*************************\n");printf(" 1:add 2:sub \n");printf(" 3:mul 4:div \n");printf("*************************\n");printf("请选择:");scanf("%d", &input);switch (input){case 1:printf("输⼊操作数:");scanf("%d %d", &x,&y);ret = add(x, y);printf("ret = %d\n",ret);break;case 2:printf("输⼊操作数:");scanf("%d %d", &x,&y);ret = sub(x, y);printf("ret = %d\n",ret);break;case 3:printf("输⼊操作数:");scanf("%d %d", &x,&y);ret = mul(x, y);printf("ret = %d\n",ret);break;case 4:printf("输⼊操作数:");scanf("%d %d", &x,&y);ret = div(x, y);printf("ret = %d\n",ret);break;case 0:printf("退出程序\n");break;default:printf("选择错误\n");break;}} while (input);return 0;
三、qsort 使用举例
qsort 是 C 标准库中用于对数组进行快速排序的函数,它基于快速排序算法实现,能对任意类型的数组进行排序。
3.1 使用qsort函数排序整型数据
#include <stdio.h>
//qosrt函数的使⽤者得实现⼀个⽐较函数
int int_cmp(const void* p1, const void* p2)
{return (*(int*)p1 - *(int*)p2);
}
int main()
{int arr[] = { 1, 3, 5, 7, 9, 2, 4, 6, 8, 0 };int i = 0;qsort(arr, sizeof(arr) / sizeof(arr[0]), sizeof(int), int_cmp);for (i = 0; i < sizeof(arr) / sizeof(arr[0]); i++){printf("%d ", arr[i]);}printf("\n");return 0;
}
3.2 使用qsort排序结构数据
struct Stu //学⽣
{char name[20];//名字int age;//年龄
};
//假设按照年龄来⽐较
int cmp_stu_by_age(const void* e1, const void* e2)
{return ((struct Stu*)e1)->age - ((struct Stu*)e2)->age;
}
//strcmp - 是库函数,是专⻔⽤来⽐较两个字符串的⼤⼩的
//假设按照名字来⽐较
int cmp_stu_by_name(const void* e1, const void* e2)
{return strcmp(((struct Stu*)e1)->name, ((struct Stu*)e2)->name);
}
//按照年龄来排序
void test2()
{struct Stu s[] = { {"zhangsan", 20}, {"lisi", 30}, {"wangwu", 15} };int sz = sizeof(s) / sizeof(s[0]);qsort(s, sz, sizeof(s[0]), cmp_stu_by_age);
}
//按照名字来排序
void test3()
{struct Stu s[] = { {"zhangsan", 20}, {"lisi", 30}, {"wangwu", 15} };int sz = sizeof(s) / sizeof(s[0]);qsort(s, sz, sizeof(s[0]), cmp_stu_by_name);
}
int main()
{test2();test3();return 0;
}
注意事项
比较函数的实现:比较函数的实现要正确,确保能准确反映元素之间的大小关系。不同的比较函数实现可以实现升序、降序或其他自定义的排序规则。
类型转换:在比较函数中,由于 qsort 函数的通用性,传入的参数是 const void *
类型,需要将其转换为实际的数据类型才能进行比较操作。 稳定性:qsort
是不稳定的排序算法,即相等元素的相对顺序在排序后可能会改变。如果需要稳定的排序算法,可以考虑使用其他排序函数或自行实现稳定排序。
性能:qsort 平均时间复杂度为 (O(n log n)),但在最坏情况下时间复杂度为
(O(n^2))。不过在大多数实际应用场景中,它的性能表现良好。
四、结尾
这一课的内容就到这里了,下节课继续学习指针的其他一些知识
如果内容有什么问题的话欢迎指正,有什么问题也可以问我!
相关文章:
程序诗篇里的灵动笔触:指针绘就数据的梦幻蓝图<7>
大家好啊,我是小象٩(๑ω๑)۶ 我的博客:Xiao Xiangζั͡ޓއއ 很高兴见到大家,希望能够和大家一起交流学习,共同进步。 今天我们一起来学习转移表,回调函数,qsort… 目录 一、转移表1.1 定义与原理1.3…...
4、C#基于.net framework的应用开发实战编程 - 测试(四、一) - 编程手把手系列文章...
四、 测试; 四.一、调试; 开发完应用,就需要对应用进行测试,第一部就从调试开始,特别是一些重要的功能点,还有如果运行时有问题,也需要对应用进行调试,以找出问题。 1、 …...
逻辑回归:Sigmoid函数在分类问题中的应用
欢迎来到我的主页:【Echo-Nie】 本篇文章收录于专栏【机器学习】 1 什么是Sigmoid函数? Sigmoid函数(Logistic函数)是机器学习中最经典的激活函数之一,是一个在生物学中常见的S型函数,也称为S型生长曲线。…...
使用 SDKMAN! 在 Mac(包括 ARM 架构的 M1/M2 芯片)上安装 Java 8
文章目录 1. 安装 SDKMAN!2. 查找可用的 Java 8 版本3. 安装 Java 84. 验证安装5. 切换 Java 版本(可选)6. 解决 ARM 架构兼容性问题总结 可以使用 SDKMAN! 在 Mac(包括 ARM 架构的 M1/M2 芯片)上安装 Java 8。SDKMAN! 是一个强大…...
AUTOSAR汽车电子嵌入式编程精讲300篇-基于FPGA的CAN FD汽车总线数据交互系统设计
目录 前言 汽车总线以及发展趋势 汽车总线技术 汽车总线发展趋势 CAN FD总线国内外研究现状 2 系统方案及CAN FD协议分析 2.1系统控制方案设计 2.2 CAN FD总线帧结构分析 2.2.1数据帧分析 2.2.2远程帧分析 2.2.3过载帧分析 2.2.4错误帧分析 2.2.5帧间隔分析 2.3位…...
滴水逆向_程序实现弹窗修改OEP
作业: 几个很重要的注意事项。 1 我们模拟的是内核如何将一个文件硬盘中拉伸到内存中,但是我们做的仅仅是 模拟拉伸过程。也就是说其中的属性字段是无差别的拷贝的。 但是加载exe的时候 ,imagebase 是随机分配的。 我们打开内存中的exe&…...
HTTP报文格式
HTTP请求报文格式 1. 结构: [请求行] [请求头] [空行] [请求体] (可选)请求行:方法 URI HTTP版本 常见方法:GET(获取资源)、POST(提交数据)、PUT(替…...
pytest.fixture
pytest.fixture 是 pytest 测试框架中的一个非常强大的功能,它允许你在测试函数运行前后执行一些设置或清理代码。以下是关于 pytest.fixture 的详细介绍: 一、定义与用途 pytest.fixture 是一个装饰器,用于标记一个函数为 fixture。Fixture 函数中的代码可以在测试函数运…...
位运算算法篇:进入位运算的世界
位运算算法篇:进入位运算的世界 本篇文章是我们位运算算法篇的第一章,那么在我们是算法世界中,有那么多重要以及有趣的算法,比如深度优先搜索算法以及BFS以及动态规划算法等等,那么我们位运算在这些算法面前相比&#…...
Heterogeneous Graph Attention Network(HAN)
HAN WWW19 分类:异构图神经网络 元路径 (图片地址:异构图注意力网络(3) HAN_哔哩哔哩_bilibili) 如图所示,假如异构图如上所示。那么,按照MAM和MDM就可以生成不同的子图。这样,就可以生成MAM与MDM的一阶邻居…...
重学SpringBoot3-Spring WebFlux之SSE服务器发送事件
更多SpringBoot3内容请关注我的专栏:《SpringBoot3》 期待您的点赞??收藏评论 Spring WebFlux之SSE服务器发送事件 1. 什么是 SSE?2. Spring Boot 3 响应式编程与 SSE 为什么选择响应式编程实现 SSE? 3. 实现 SSE 的基本步骤 3.1 创建 Spr…...
Java中实现定时锁屏的功能(可以指定时间执行)
Java中实现定时锁屏的功能(可以指定时间执行) 要在Java中实现定时锁屏的功能,可以使用java.util.Timer或java.util.concurrent.ScheduledExecutorService来调度任务,并通过调用操作系统的命令来执行锁屏。下面我将给出一个基本的…...
工作案例 - python绘制excell表中RSRP列的CDF图
什么是CDF图 CDF(Cumulative Distribution Function)就是累积分布函数,是概率密度函数的积分。CDF函数是一个在0到1之间的函数,描述了随机变量小于或等于一个特定值的概率。在可视化方面,CDF图表明了一个随机变量X小于…...
推理大模型DeepSeek迅速觉醒
随着人工智能技术的快速发展,DeepSeek作为一种创新的技术工具,正在重塑行业格局。本文将深入分析如何把握这一波由DeepSeek带来的流量红利,揭示其在市场洞察、技术创新和用户需求中的潜在机会,并提供实用策略帮助个人或企业快速融…...
Ubuntu22.04部署deepseek大模型
Ollama 官方版 Ollama 官方版: https://ollama.com/ 若你的显卡是在Linux上面 可以使用如下命令安装 curl -fsSL https://ollama.com/install.sh | shollama命令查看 rootheyu-virtual-machine:~# ollama -h Large language model runnerUsage:ollama [flags]ollama [comman…...
redis的数据结构介绍(string
redis是键值数据库,key一般是string类型,value的类型很多 string,hash,list,set,sortedset,geo,bitmap,hyperlog redis常用通用命令: keys: …...
QUIC 与 UDP 关系
QUIC协议是建立在UDP之上的,这意味着QUIC的数据包实际上是通过UDP传输的。QUIC的设计使其能够利用UDP的特性,同时在其上实现更复杂的功能。以下是QUIC如何体现出其基于UDP的特性,以及QUIC头部字段的详细介绍。 QUIC与UDP的关系 UDP封装:QUIC数据包被封装在UDP数据包中进行…...
webview_flutter的使用
目录 步骤示例代码 步骤 1.配置依赖。根目录下运行如下命令: flutter pub add webview_flutter 2.所需页面导入: import ‘package:webview_flutter/webview_flutter.dart’; 3.初始化WebViewController overridevoid initState() {super.initState();…...
Centos执行yum命令报错
错误描述 错误:为仓库 ‘appstream’ 下载元数据失败 : Cannot prepare internal mirrorlist: Curl error (6): Couldn’t resolve host name for http://mirrorlist.centos.org/?release8&archx86_64&repoAppStream&infrastock [Could not resolve h…...
aio-pika 快速上手(Python 异步 RabbitMQ 客户端)
目录 简介官方文档如何使用 简介 aio-pika 是一个 Python 异步 RabbitMQ 客户端。5.0.0 以前 aio-pika 基于 pika 进行封装,5.0.0 及以后使用 aiormq 进行封装。 https://github.com/mosquito/aio-pikahttps://pypi.org/project/aio-pika/ pip install aio-pika官…...
AI安全最佳实践:AI应用开发安全评估矩阵(上)
生成式AI开发安全范围矩阵简介 生成式AI目前可以说是当下最热门的技术,吸引各大全球企业的关注,并在全球各行各业中带来浪潮般的编个。随时AI能力的飞跃,大语言模型LLM参数达到千亿级别,它和Transformer神经网络共同驱动了我们工…...
疯狂前端面试题(二)
一、Webpack的理解 Webpack 是一个现代 JavaScript 应用程序的静态模块打包工具。Webpack 能够将各种资源(JavaScript、CSS、图片、字体等)视为模块,并通过依赖关系图将这些模块打包成一个或多个最终的输出文件(通常是一个或几个…...
深入探究 C++17 std::is_invocable
文章目录 一、引言二、std::is_invocable 概述代码示例输出结果 三、std::is_invocable 的工作原理简化实现示例 四、std::is_invocable 的相关变体1. std::is_invocable_r2. std::is_nothrow_invocable 和 std::is_nothrow_invocable_r 五、使用场景1. 模板元编程2. 泛型算法 …...
【R语言】卡方检验
一、定义 卡方检验是用来检验样本观测次数与理论或总体次数之间差异性的推断性统计方法,其原理是比较观测值与理论值之间的差异。两者之间的差异越小,检验的结果越不容易达到显著水平;反之,检验结果越可能达到显著水平。 二、用…...
DeepSeek LLM 论文解读:相信长期主义开源理念可扩展大语言模型(DeepSeek 吹响通用人工智能的号角)
论文链接:DeepSeek LLM: Scaling Open-Source Language Models with Longtermism(相信长期主义开源理念可扩展大语言模型) 目录 摘要一、数据处理(一)数据清洗与丰富(二)分词器与词汇设置 二、模…...
指针基础知识2
1. 指针运算 1.1 指针 - 整数 以数组举例:因为数组在内存中是连续存放的,只要知道第⼀个元素的地址,顺藤摸瓜就能找到后面的所有元素。这时就会用到指针加减整数。 1.2指针-指针 指针 - 指针可以得到两个指针之间的数据个数。但是…...
nginx的4层和7层配置证书
4层证书代理 # 定义上游服务器组 stream {upstream tcp-25510 {hash $remote_addr consistent;server ip:5510;}# 配置监听 25510 端口的服务器块server {listen 25510 ssl; # 监听 25510 端口并启用 SSL# 指定 SSL 证书和私钥ssl_certificate /etc/nginx/key/bundle.crt;ssl…...
【大数据技术】搭建完全分布式高可用大数据集群(Flume)
搭建完全分布式高可用大数据集群(Flume) apache-flume-1.11.0-bin.tar.gz注:请在阅读本篇文章前,将以上资源下载下来。 写在前面 本文主要介绍搭建完全分布式高可用集群 Flume 的详细步骤。 注意: 统一约定将软件安装包存放于虚拟机的/software目录下,软件安装至/opt目…...
C++ 顺序表
顺序表的操作有以下: 1 顺序表的元素插入 给定一个索引和元素,这个位置往后的元素位置都要往后移动一次,元素插入的步骤有以下几步 (1)判断插入的位置是否合法,如果不合法则抛出异常 (2&…...
Python----Python高级(网络编程:网络基础:发展历程,IP地址,MAC地址,域名,端口,子网掩码,网关,URL,DHCP,交换机)
一、网络 早期的计算机程序都是在本机上运行的,数据存储和处理都在同一台机器上完成。随着技术的发展,人 们开始有了让计算机之间相互通信的需求。例如安装在个人计算机上的计算器或记事本应用,其运行环 境仅限于个人计算机内部。这种设置虽然…...
Spring Boot 的问题:“由于无须配置,报错时很难定位”,该怎么解决?
Spring Boot 的 "由于无须配置,报错时很难定位" 主要指的是: 传统 Spring 框架 需要大量 XML 或 Java 配置,开发者对应用的组件、Bean 加载情况有清晰的控制,出错时可以从配置入手排查。Spring Boot 采用自动配置&…...
基于javaweb的SpringBoot小区智慧园区管理系统(源码+文档+部署讲解)
🎬 秋野酱:《个人主页》 🔥 个人专栏:《Java专栏》《Python专栏》 ⛺️心若有所向往,何惧道阻且长 文章目录 运行环境开发工具适用功能说明 运行环境 Java≥8、MySQL≥5.7、Node.js≥14 开发工具 后端:eclipse/idea/myeclipse…...
一文解释nn、nn.Module与nn.functional的用法与区别
🌈 个人主页:十二月的猫-CSDN博客 🔥 系列专栏: 🏀零基础入门PyTorch框架_十二月的猫的博客-CSDN博客 💪🏻 十二月的寒冬阻挡不了春天的脚步,十二点的黑夜遮蔽不住黎明的曙光 目录 …...
vscode安装ESP-IDF
引言 ESP-IDF(Espressif IoT Development Framework)是乐鑫官方为其 ESP32、ESP32-S 系列等芯片提供的物联网开发框架。结合 Visual Studio Code(VSCode)这一强大的开源代码编辑器,能极大提升开发效率。本教程将详细介…...
springboot配置https
注意: 此配置只能本地环境或测试环境使用,生产环境使用https,应该配置nginx!请参考:使用certbot给nginx配置https-CSDN博客 1. 生成证书 使用JDK的keytool命令生成证书 注意:JDK版本需要和项目的JDK版本一…...
数据库的关系代数
关系就是表 属性(Attribute)是关系中的列.例如,关系 “学生” 中可能有属性 “学号”、“姓名”、“班级”。 元组(Tuple)是关系中的一行数据 1. 基本运算符 选择(Selection) 符号:σ 作用:从关…...
【服务器知识】如何在linux系统上搭建一个nfs
文章目录 NFS网络系统搭建**1. 准备工作****2. 服务器端配置****(1) 安装 NFS 服务****(2) 创建共享目录****(3) 配置共享规则****(4) 生效配置并启动服务****(5) 防火墙配置** **3. 客户端配置****(1) 安装 NFS 客户端工具****(2) 创建本地挂载点****(3) 挂载 NFS 共享目录***…...
【学习总结|DAY037】Linux 项目部署
引言 在当今的软件开发领域,Linux 以其安全、稳定、免费且开源的特性,成为项目部署的首选操作系统。无论是 Java 项目,还是各类开发、测试、生产环境中的软件安装,Linux 都占据着重要地位。本文将结合我今天所学内容,…...
【算法】动态规划专题⑧ —— 分组背包问题 python
目录 前置知识进入正题实战演练总结 前置知识 【算法】动态规划专题⑤ —— 0-1背包问题 滚动数组优化 python 进入正题 分组背包问题的详细解析 1. 问题定义 在 分组背包问题 中,物品被划分为若干组,每组内的物品 互斥(只能选择其中一个或…...
数据结构:算法复杂度
前言 数据结构(Data Structure)是计算机存储、组织数据的方式,指相互之间存在一种或多种特定关系的数据元素的集合。没有一种单一的数据结构对所有用途都有用,所以我们要学各式各样的数据结构,如:线性表、树…...
Mac本地体验LM studio
博主很懒,不爱打字! 1、LM studio官网:LM Studio - Discover, download, and run local LLMs 2、下载DMG文件,安装 3、使用vscode工具,commandshiftH【全局替换功能】,选择目录/Applications/LM\ Studio…...
【EPSG 坐标系系统完全解析(一)(8000 字终极指南)】
EPSG 坐标系系统完全解析(8000 字终极指南) 一、EPSG 的起源与定义(1200 字) 1.1 石油工业催生的标准 行业需求:20 世纪 80 年代石油勘探需要统一坐标参考成立过程: 1985 年欧洲石油公司成立 EPSG 工作组…...
【C++高并发服务器WebServer】-13:多线程服务器开发
本文目录 一、多线程服务器开发二、TCP状态转换三、端口复用 一、多线程服务器开发 服务端代码如下。 #include <stdio.h> #include <arpa/inet.h> #include <unistd.h> #include <stdlib.h> #include <string.h> #include <pthread.h>s…...
【CubeMX-HAL库】STM32F407—无刷电机学习笔记
目录 简介: 学习资料: 跳转目录: 一、工程创建 二、板载LED 三、用户按键 四、蜂鸣器 1.完整IO控制代码 五、TFT彩屏驱动 六、ADC多通道 1.通道确认 2.CubeMX配置 ①开启对应的ADC通道 ②选择规则组通道 ③开启DMA ④开启ADC…...
mysql8 sql语法错误,错误信息是怎么通过网络发送给客户端的,C++源码展示
在 MySQL 8 中,错误信息通过网络发送给客户端的过程涉及多个步骤,主要包括错误信息的生成、格式化、以及通过网络协议(如 TCP/IP)将错误信息发送给客户端。以下是详细的流程和相关代码分析: 1. 错误信息的生成 当 My…...
人工智能D* Lite 算法-动态障碍物处理、多步预测和启发式函数优化
在智能驾驶领域,D* Lite 算法是一种高效的动态路径规划算法,适用于处理环境变化时的路径重规划问题。以下将为你展示 D* Lite 算法的高级用法,包含动态障碍物处理、多步预测和启发式函数优化等方面的代码实现。 代码实现 import heapq impo…...
【学术投稿】第五届计算机网络安全与软件工程(CNSSE 2025)
重要信息 官网:www.cnsse.org 时间:2025年2月21-23日 地点:中国-青岛 简介 第五届计算机网络安全与软件工程(CNSSE 2025)将于2025年2月21-23日在中国-青岛举行。CNSSE 2025专注于计算机网络安全、软件工程、信号处…...
spring学习(spring 配置文件详解)
一 了解如何创建基本的spring 配置文件 步骤 1 导入 spring-context 依赖 <!-- https://mvnrepository.com/artifact/org.springframework/spring-context --><dependency><groupId>org.springframework</groupId><artifactId>spring-context&l…...
创建一个javaWeb Project
文章目录 前言一、eclipse创建web工程二、web.xmlservlet.xml< mvc:annotation-driven/ > Spring MVC 驱动< context:component - scan >:扫描< bean > ... < /bean >< import > config/beans.xml beans.xmlmybatis.xml 前言 javaWe…...
大模型推理——MLA实现方案
1.整体流程 先上一张图来整体理解下MLA的计算过程 2.实现代码 import math import torch import torch.nn as nn# rms归一化 class RMSNorm(nn.Module):""""""def __init__(self, hidden_size, eps1e-6):super().__init__()self.weight nn.Pa…...