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

数据结构中的宝藏秘籍之广义表

广义表,也被称作列表(Lists),是一种递归的数据结构。它就像一个神秘的盒子,既可以装着单个元素(原子),也可以嵌套着其他的盒子(子列表)。比如广义表 (a (b c) d),其中 a 和 d 是原子,而 (b c) 则是一个子列表。这种嵌套结构使得广义表能够轻松表示各种复杂的关系,就像一位万能的画家,能描绘出树形结构、图结构等多样的 “画作”。

与普通的线性表相比,广义表的元素类型更加丰富多样,不仅可以是相同类型的元素,还能包含不同类型的元素,甚至可以嵌套其他的广义表。这种灵活性让广义表在处理复杂数据时游刃有余,成为了数据结构中的 “多面手”。

先上代码:

#include <stdio.h>
#include <stdlib.h>// 定义原子类型为字符型
typedef char AtomType;// 定义元素标签类型,用于区分原子和列表
typedef enum { ATOM, LIST } ElemTag;// 定义广义表节点结构体
typedef struct GLNode 
{ElemTag tag;  // 标记该节点是原子还是列表union {AtomType atom;  // 如果是原子,存储原子的值struct GLNode *child;  // 如果是列表,指向子列表} UNION;struct GLNode *next;  // 指向下一个节点
} GLNODE;// 定义元素标志类型,用于读取字符串时识别不同元素
typedef enum { LP = 1, RP = 2, Atom = 3, End = 4 } ElemFlag;// 从 str[*pi] 开始读入一个元素
ElemFlag GetElem(char str[], int *pi, AtomType *pe)
{while (str[*pi] == ' ') (*pi)++;// 跳过空格if (str[*pi] == '\0') return End;// 如果到达字符串末尾,返回 End 标志if (str[*pi] == '(')// 如果遇到左括号,返回 LP 标志,并将指针后移{		(*pi)++;return LP;}if (str[*pi] == ')') // 如果遇到右括号,返回 RP 标志,并将指针后移{(*pi)++;return RP;}// 如果是原子,将字符赋值给 pe,并将指针后移,返回 Atom 标志*pe = str[*pi];(*pi)++;return Atom;
}// 建广义表
GLNODE *Glist_Create(char str[], int *pi) 
{GLNODE *p;AtomType e;// 根据读取的元素类型进行不同处理switch (GetElem(str, pi, &e)) {case Atom:// 为原子节点分配内存p = (GLNODE *)malloc(sizeof(GLNODE));if (p == NULL) {fprintf(stderr, "内存分配失败\n");exit(EXIT_FAILURE);}p->tag = ATOM;p->UNION.atom = e;p->next = Glist_Create(str, pi);// 递归创建下一个节点return p;case LP:// 为列表节点分配内存p = (GLNODE *)malloc(sizeof(GLNODE));if (p == NULL) {fprintf(stderr, "内存分配失败\n");exit(EXIT_FAILURE);}p->tag = LIST;p->UNION.child = Glist_Create(str, pi);// 递归创建子列表p->next = Glist_Create(str, pi);// 递归创建下一个节点return p;case RP:return NULL;case End:return NULL;}return NULL;
}// 求表深度
int GList_Depth(GLNODE *L) 
{GLNODE *p;int depth1, max = 0;if (L == NULL || L->tag == ATOM) return 0;// 如果是原子节点,深度为 0for (p = L->UNION.child; p; p = p->next) // 遍历子列表{depth1 = GList_Depth(p);// 递归计算子列表的深度if (depth1 > max) max = depth1;}return max + 1;// 列表深度为子列表最大深度加 1
}// 遍历广义表,打印层次括号
void GList_Traverse(GLNODE *L) 
{GLNODE *p;for (p = L; p != NULL; p = p->next) {if (p->tag == ATOM) {printf("%c ", p->UNION.atom);// 打印原子节点的值} else {printf("(");// 遇到列表节点,打印左括号GList_Traverse(p->UNION.child);// 递归遍历子列表printf(")");// 打印右括号}}
}// 复制广义表
GLNODE *GList_Copy(GLNODE *L) 
{GLNODE *head = NULL, *p, *newNode, *tail = NULL;if (!L) return NULL;for (p = L; p != NULL; p = p->next) {// 为新节点分配内存newNode = (GLNODE *)malloc(sizeof(GLNODE));if (newNode == NULL) {fprintf(stderr, "内存分配失败\n");exit(EXIT_FAILURE);}if (head == NULL) {head = tail = newNode;} else {tail->next = newNode;tail = newNode;}if (p->tag == ATOM) {newNode->tag = ATOM;// 复制原子节点newNode->UNION.atom = p->UNION.atom;} else {newNode->tag = LIST;// 复制列表节点,递归复制子列表newNode->UNION.child = GList_Copy(p->UNION.child);}}if (tail) {tail->next = NULL;}return head;
}int main() 
{char str[30] = "(a (b c) d)";  // 广义表的字符串表示int i = 0;GLNODE *L1, *L2;L1 = Glist_Create(str, &i);		// 创建广义表 L1GList_Traverse(L1);				// 遍历并打印广义表 L1printf("%d\n", GList_Depth(L1));// 计算并打印广义表 L1 的深度L2 = GList_Copy(L1);			// 复制广义表 L1 到 L2GList_Traverse(L2);				// 遍历并打印广义表 L2printf("%d\n", GList_Depth(L2));// 计算并打印广义表 L2 的深度return 0;
}

(一)数据结构定义:搭建广义表的基石

typedef struct GLNode 
{ElemTag tag;  // 标记该节点是原子还是列表union {AtomType atom;  // 如果是原子,存储原子的值struct GLNode *child;  // 如果是列表,指向子列表} UNION;struct GLNode *next;  // 指向下一个节点
} GLNODE;

这段代码定义了广义表的节点结构 GLNODEtag 字段就像一个神奇的标签,能够区分节点是原子还是列表。UNION 联合体则根据 tag 的值,巧妙地存储原子或指向子列表的指针。next 指针则负责将各个节点连接起来,形成一个有序的链条。这种设计让广义表能够灵活地表示不同类型的元素和复杂的嵌套结构,为后续的操作奠定了坚实的基础。

(二)广义表的创建:从字符串到数据结构的神奇转变

GLNODE *Glist_Create(char str[], int *pi) 
{// ...
}

Glist_Create 函数是广义表创建的核心。它通过 GetElem 函数从输入的字符串中逐个读取元素,就像一位细心的工匠,根据元素的类型(原子、左括号、右括号、字符串结束)进行不同的处理。遇到原子时,为其创建一个原子节点;遇到左括号时,创建一个列表节点,并递归地创建子列表。递归的方式让代码简洁而高效,能够轻松应对广义表的嵌套结构,就像一位技艺高超的魔术师,将字符串神奇地转化为广义表的数据结构。

(三)广义表的深度计算:探索广义表的 “深度” 秘密

int GList_Depth(GLNODE *L) 
{// ...
}

GList_Depth 函数用于计算广义表的深度。对于原子节点,其深度为 0;对于列表节点,则递归地计算子列表的深度,并取子列表最大深度加 1 作为当前列表的深度。递归的思想在这里再次发挥了重要作用,让我们能够轻松地探索广义表的 “深度” 秘密,就像一位勇敢的探险家,深入广义表的内部,测量其嵌套的层次。

(四)广义表的遍历:揭开广义表的 “庐山真面目”

void GList_Traverse(GLNODE *L) 
{// ...
}

GList_Traverse 函数就像一位导游,带领我们遍历广义表并打印其层次括号表示。遇到原子节点时,直接打印原子的值;遇到列表节点时,先打印左括号,递归地遍历子列表,再打印右括号。通过递归遍历,我们能够清晰地看到广义表的层次结构,揭开它的 “庐山真面目”,仿佛置身于一个神秘的迷宫中,一步步揭开它的神秘面纱。

(五)广义表的复制:克隆一个一模一样的广义表

GLNODE *GList_Copy(GLNODE *L) 
{// ...
}

GList_Copy 函数用于复制广义表。它遍历原广义表的每个节点,为新节点分配内存,并根据节点类型复制原子或递归地复制子列表。这样,我们就可以得到一个与原广义表结构完全相同的新广义表,就像克隆技术一样,复制出一个一模一样的 “双胞胎”。

运行:

四、广义表的应用场景:无处不在的 “魔法工具”

(一)编译器设计:解析代码的得力助手

在编译器中,广义表可以用于表示语法树。语法树是源代码的一种抽象表示,它反映了代码的语法结构。广义表的嵌套结构正好可以用来表示语法树的层次关系,方便编译器进行语法分析和代码生成。就像一位聪明的翻译官,将源代码翻译成计算机能够理解的机器语言。

(二)人工智能:构建知识图谱的强大武器

在人工智能领域,广义表可以用于表示知识图谱。知识图谱是一种语义网络,用于表示实体之间的关系。广义表可以将实体和关系表示为节点和子列表,从而方便进行知识的存储和推理。就像一位智慧的导师,帮助人工智能系统更好地理解和处理知识。

(三)图形处理:绘制复杂图形的神奇画笔

在图形处理中,广义表可以用于表示复杂的图形结构。例如,一个三维模型可以由多个子模型组成,每个子模型又可以由多个基本图形组成。广义表可以很好地表示这种层次结构,方便进行图形的渲染和处理。就像一位天才的画家,用神奇的画笔绘制出绚丽多彩的图形世界。

五、总结与展望

通过递归的方式,我们可以方便地实现广义表的创建、深度计算、遍历和复制等操作。

相关文章:

数据结构中的宝藏秘籍之广义表

广义表&#xff0c;也被称作列表&#xff08;Lists&#xff09;&#xff0c;是一种递归的数据结构。它就像一个神秘的盒子&#xff0c;既可以装着单个元素&#xff08;原子&#xff09;&#xff0c;也可以嵌套着其他的盒子&#xff08;子列表&#xff09;。比如广义表 (a (b c)…...

电流模式控制学习

电流模式控制 电流模式控制&#xff08;CMC&#xff09;是开关电源中广泛使用的一种控制策略&#xff0c;其核心思想是通过内环电流反馈和外环电压反馈共同调节占空比。相比电压模式控制&#xff0c;CMC具有更快的动态响应和更好的稳定性&#xff0c;但也存在一些固有缺点。 …...

汽车免拆诊断案例 | 2011款雪铁龙世嘉车刮水器偶尔自动工作

故障现象 一辆2011款雪铁龙世嘉车&#xff0c;搭载1.6 L 发动机&#xff0c;累计行驶里程约为19.8万km。车主反映&#xff0c;该车刮水器偶尔会自动工作&#xff0c;且前照灯偶尔会自动点亮。 故障诊断 接车后试车发现&#xff0c;除了上述故障现象以外&#xff0c;当用遥控器…...

#去除知乎中“盐选”付费故事

添加油猴脚本&#xff0c;去除知乎中“盐选”付费故事 // UserScript // name 盐选内容隐藏脚本 // namespace http://tampermonkey.net/ // version 0.2 // description 自动隐藏含有“盐选专栏”或“盐选”文字的回答卡片 // author YourName // mat…...

github 项目迁移到 gitee

1. 查看远程仓库地址 git remote -v 2. 修改远程仓库地址 确保 origin 指向你的 Gitee 仓库&#xff0c;如果不是&#xff0c;修改远程地址。 git remote set-url origin https://gitee.com/***/project.git 3. 查看本地分支 git branch 4. 推送所有本地分支 git p…...

2025年03月中国电子学会青少年软件编程(Python)等级考试试卷(五级)答案 + 解析

青少年软件编程(Python)等级考试试卷(五级) 分数:100 题数:38 一、单选题(共25题,共50分) 1. 以下哪个选项不是Python中的推导式?( ) A. 列表推导式 B. 字典推导式 C. 集合推导式 D. 元组推导式 正确答案:D 答案解析:Python中的推导式包括列表推导式、字典推导式…...

[Unity]-[UI]-[Prefab] 关于UGUI UI Prefab的制作技巧

从上到下&#xff0c;从外到里&#xff0c;多用空物体套壳 这个意思就是说在使用ugui时制作prefab时&#xff0c;要遵循“从上到下&#xff0c;从外到里&#xff0c;多用空物体套壳”的原则&#xff0c;好处就是后面好修改&#xff0c;并且可以复用不同的prefab子模块。且在布…...

【Reading Notes】(8.3)Favorite Articles from 2025 March

【March】 雷军一度登顶中国首富&#xff0c;太厉害了&#xff08;2025年03月02日&#xff09; 早盘&#xff0c;小米港股一路高歌猛进&#xff0c;暴涨4%&#xff0c;股价直接飙到52港元的历史新高。这一波猛如虎的操作&#xff0c;直接把雷军的身家拉到了2980亿元&#xff0c…...

2021-11-09 C++倍数11各位和为13

缘由c函数题找数字的-编程语言-CSDN问答 void 倍数11各位和为13(int n, int& b, int* h) {//缘由https://ask.csdn.net/questions/7559803?spm1005.2025.3001.5141b !(n % 11);while(n)*h n % 10, n / 10; }int a 1, b 1, c 0, d 0;while (a < 100){倍数11各位和…...

2025年03月中国电子学会青少年软件编程(Python)等级考试试卷(六级)真题

青少年软件编程&#xff08;Python&#xff09;等级考试试卷&#xff08;六级&#xff09; 分数&#xff1a;100 题数&#xff1a;38 答案解析&#xff1a;https://blog.csdn.net/qq_33897084/article/details/147341458 一、单选题(共25题&#xff0c;共50分) 1. 在tkinter的…...

Linux简介

一、Linux 简介 Linux 内核最初只是由芬兰人林纳斯托瓦兹&#xff08;Linus Torvalds&#xff09;在赫尔辛基大学上学时出于个人爱好而编写的。 Linux 是一套免费使用和自由传播的类 Unix 操作系统&#xff0c;是一个基于 POSIX 和 UNIX 的多用户、多任务、支持多线程和多 CP…...

每天学一个 Linux 命令(22):pwd

​​可访问网站查看,视觉品味拉满: http://www.616vip.cn/22/index.html pwd 命令用于打印当前工作目录(Print Working Directory)的绝对路径,帮助用户快速确认自己在文件系统中的位置。虽然简单,但它是终端操作中不可或缺的基础命令,尤其在处理相对路径或脚本编写时尤为…...

Windows 11设置开机自动运行 .jar 文件

Windows 11设置开机自动运行 .jar 文件 打开启动文件夹&#xff1a; 按下 Win R&#xff0c;输入 shell:startup&#xff0c;回车。 此路径为当前用户的启动文件夹&#xff1a; C:\Users\<用户名>\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup创…...

西门子 博途 软件 崩溃

西门子 博途 软件 编译/仿真 崩溃 是因为项目中OPC UA的接口问题 解决拌饭见 https://support.industry.siemens.com/cs/document/109971630/tia-portal-%E5%9C%A8%E7%BC%96%E8%AF%91-plc-%E6%97%B6%E5%B4%A9%E6%BA%83?dti0&dlzh&lcen-WW...

12芯束装光纤不同包层线颜色之间的排列顺序

为什么光纤线必须按照以下颜色顺序进行排序&#xff1f;这其实是为了防止光污染的问题&#xff0c;不同颜色在传递光时从包层表皮漏光传感到梳妆的其它纤芯上&#xff0c;会有光污染的问题&#xff0c;而为了减少并防止光污染的现象&#xff0c;所以在光通信之中&#xff0c;需…...

数据驱动、精准协同:高端装备制造业三位一体生产管控体系构建

开篇引入 鉴于集团全面推行生产运营体建设以及对二级单位生产过程管控力度逐步加强&#xff0c;某高端装备制造企业生产部长王总正在开展新的一年企业生产管控规划工作&#xff0c;为了能够更好地进行体系规划与建设应用&#xff0c;特邀请智能制造专家小智来进行讨论交流。 王…...

HAL详解

一、直通式HAL 这里使用一个案例来介绍直通式HAL&#xff0c;选择MTK的NFC HIDL 1.0为例&#xff0c;因为比较简单&#xff0c;代码量也比较小&#xff0c;其源码路径&#xff1a;vendor/hardware/interfaces/nfc/1.0/ 1、NFC HAL的定义 1&#xff09;NFC HAL数据类型 通常定…...

RAG知识库中引入MCP

MCP(Memory, Context, Planning)是一种增强AI系统认知能力的框架。将MCP引入RAG知识库可以显著提升系统的性能和用户体验。下面我将详细介绍如何实现这一整合。 MCP框架概述 MCP框架包含三个核心组件: Memory(记忆):存储和管理历史交互和知识Context(上下文):理解当…...

再读bert(Bidirectional Encoder Representations from Transformers)

再读 BERT&#xff0c;仿佛在数字丛林中邂逅一位古老而智慧的先知。初次相见时&#xff0c;惊叹于它以 Transformer 架构为罗盘&#xff0c;在预训练与微调的星河中精准导航&#xff0c;打破 NLP 领域长久以来的迷雾。而如今&#xff0c;书页间跃动的不再仅是 Attention 机制精…...

C# 单例模式

创建一个类 在类中定义方法 internal class Config {// 实现单利模式private static Config instance null;private Config() { }private static object Locker new object(); // 定义lock锁// 通过公有的方法 返回实力public static Config GetInstance(){// 空的自己构造…...

mainwidget.cpp:1741:21: error: use of undeclared identifier ‘mainTab‘

这个错误表明在你的代码中&#xff0c;mainTab 这个变量没有被正确声明或定义。这通常是因为以下原因之一&#xff1a; 变量未声明&#xff1a;mainTab 可能没有在类的成员变量中声明。 变量未初始化&#xff1a;mainTab 可能没有在构造函数中正确初始化。 作用域问题&#x…...

OpenCV day6

函数内容接上文&#xff1a;OpenCV day4-CSDN博客 , OpenCV day5-CSDN博客 目录 平滑&#xff08;模糊&#xff09; 25.cv2.blur()&#xff1a; 26.cv2.boxFilter(): 27.cv2.GaussianBlur()&#xff1a; 28.cv2.medianBlur(): 29.cv2.bilateralFilter()&#xff1a; 锐…...

MySQL:Join连接的原理

连接查询的执行过程&#xff1a; 确定第一个需要查询的表【驱动表】 选取代价最小的访问方法去执行单表查询语句 从驱动表每获取到一条记录&#xff0c;都需要到t2表中查找匹配的记录 两表连接查询需要查询一次t1表&#xff0c;两次t2表&#xff0c;在两表的连接查询中&…...

Linux MySQL版本升级(rpm安装方式)

一、背景 近期生产环境扫描发现MySQL的多个安全漏洞。目前厂商已经发布了升级补丁以修复此安全问题&#xff0c;补丁获取链接&#xff1a;https://www.oracle.com/security-alerts/cpuoct2024.html 二、升级注意事项 备份数据&#xff1a;升级前务必备份数据库。检查兼容性&…...

数字图像处理(膨胀与腐蚀)

腐蚀 核心原理&#xff1a;结构元四肢运算结果全为1&#xff0c;则结构元中心为1&#xff0c;否则为0。 怎么计算是否为1还是为0 结构元的值与前景的值进行与运算&#xff0c;如果结构元四肢的与运算结果全为1&#xff0c;则结构元中心为1&#xff0c;否则为0。 假设下图为结构…...

J值即正义——Policy Gradient思想、REINFORCE算法,以及贪吃蛇小游戏(三)

文章目录 前情提要谁的J值大呢?那么 ∇ θ J ( θ ) \nabla_\theta J(\theta) ∇θ​J(θ)要怎么求呢?构建loss函数**代码实现示例**(PyTorch伪代码):前情提要 上回咱说道,对于强化学习而言,J值即正义。 比如,你当了老板,你手下的两个高管,分别都为公司的发展提出了…...

pdfjs库使用3

.App { text-align: center; height: 100vh; display: flex; flex-direction: column; background-color: #f5f5f5; } /* PDF 查看器容器样式 */ .pdf-viewer { flex: 1; padding: 20px; max-width: 100%; margin: 0 auto; box-sizing: border-box; background-color: white;…...

transformer-词嵌入和位置嵌入详解

文章目录 1、介绍一下位置嵌入Positional Encoding、什么是Positional Encoding呢&#xff1f;为什么Transformer需要Positional Enconding? Transformer 的 Positional Encoding 是如何表达相对位置关系的&#xff1f;2、我来简单举个例子2.1 词向量&#xff1a;每个token都会…...

大模型本地部署之ollama安装及deepseek、qwen等模型下载操作

大模型本地部署之----ollama安装指南 最新版--下载方式 Download Ollama on macOS 因github下载较慢&#xff0c;可以网上搜索github加速工具下载 ----download后加版本号 例如: https://github.com/ollama/ollama/releases/download/v0.6.5/OllamaSetup.exe 通过网盘分享…...

ffprobe 输出 HEVC 码流 Level:标准的 “错位” 与分析的 “归位”

问题描述 最近用ffprobe分析HEVC/H265的码流,发现了与理论知识不符合的现象,比如针对一个H265的码流,用ffprobe输入命令 ffprobe -show_streams 1.h265 时,输入如下;可以看到 H265 的码流 Level 显示等于 93,打印值与标准理论值不符合,用其他工具分析此时 Level 等于 3.…...

线程池七个参数的含义

Java中的线程池里七个参数的以及其各自的含义 面试题&#xff1a;说一下线程池七个参数的含义&#xff1f; 所谓的线程池的 7 大参数是指&#xff0c;在使用 ThreadPoolExecutor 创建线程池时所设置的 7 个参数&#xff0c;如以下源码所示&#xff1a; public ThreadPoolExe…...

EnlightenGAN:低照度图像增强

简介 简介:记录如何使用EnlightenGAN来做低照度图像增强。该论文主要是提供了一个高效无监督的生成对抗网络,通过全球局部歧视器结构,一种自我调节的感知损失融合,以及注意机制来得到无需匹配的图像增强效果。 论文题目:EnlightenGAN: Deep Light Enhancement Without P…...

内存函数和动态内存管理

目录 一、memcpy库函数介绍 1. memcpy的使用 2. memcpy的模拟 二、memmove库函数介绍 1. memmove的使用 2. memmove的模拟 三、memset库函数介绍 四、memcmp库函数介绍 五、动态内存中malloc和free 1. malloc 2. free 六、动态内存中calloc和realloc 1. calloc 2. realloc 七、…...

计算机网络 - 在浏览器中输入 URL 地址到显示主页的过程?

第一步&#xff0c;浏览器通过 DNS 来解析 URL&#xff0c;得到相应的 ip 地址&#xff08;到哪里找) 和 方法&#xff08;做什么&#xff09; 第二步&#xff0c;浏览器于服务器建立 TCP 三次握手连接 第三步&#xff0c;建立好连接后&#xff0c;浏览器会组装 HTTP 请求报文…...

Android Studio 常见报错

错误提示&#xff1a; Your build is currently configured to use incompatible Java 21.0.3 and Gradle 6.7.1. Cannot sync the project. 原因&#xff1a; Java JDK和gradle 版本不匹配 两个角度修改&#xff1a; 1.修改gradle 版本 2.修改JDK版本 Gradle 下载 https:…...

RT-DETR源码学习bug记录

事情是这样的&#xff0c;我最近想学习RT-DETR的源码&#xff0c;那就开始吧&#xff01; 1. 找到官网&#xff0c;找到pytorch版本。 https://github.com/lyuwenyu/RT-DETR/tree/main 2.只想下载一个子目录&#xff0c;方法&#xff1a; https://download-directory.githu…...

数据仓库分层架构解析:从理论到实战的完整指南​​

数据仓库分层是构建高效数据体系的核心方法论。本文系统阐述ODS、DWD、DWS、ADS四层架构的设计原理&#xff0c;结合电商用户行为分析场景&#xff0c;详解各层功能及协作流程&#xff0c;并给出分层设计的原则与避坑指南&#xff0c;帮助读者掌握分层架构的落地方法。 一、为什…...

基于ubuntu24.10安装NACOS2.5.1的简介

基于ubuntu24.10安装NACOS2.5.1的简介 官方网站地址&#xff1a; https://nacos.io 可访问nacos站点 https://nacos.io/zh-cn/ 2025年04月记录发布 V2.5.1 版本 一、环境预准备 64 bit JDK 1.8&#xff1b; sudo apt update sudo apt install openjdk-8-jdk sudo apt upda…...

【Triton 教程】triton_language.full

Triton 是一种用于并行编程的语言和编译器。它旨在提供一个基于 Python 的编程环境&#xff0c;以高效编写自定义 DNN 计算内核&#xff0c;并能够在现代 GPU 硬件上以最大吞吐量运行。 更多 Triton 中文文档可访问 →https://triton.hyper.ai/ triton.language.full(shape, …...

MARA/MARC表 PSTAT字段

最近要开发一个维护物料视图的功能。其中PSTAT字段是来记录已经维护的视图的。这里记录一下视图和其对应的字母。 MARA还有个VPSTA&#xff08;完整状态&#xff09;字段&#xff0c;不过在我试的时候每次PSTAT出现一个它就增加一个&#xff0c;不知道具体是为什么。 最近一直…...

目标检测中的混淆矩阵

一直很疑惑YOLO的这个目标检测 混淆矩阵 🎯 假设任务:检测三种动物(猫、狗、羊) 我们使用一个目标检测模型对图像进行了预测,并收集了如下结果: ✅ 模型预测结果(带类别和框) vs 🟩真实框: 编号真实类别是否被检测到IOU是否合格预测类别备注1猫是✅猫✔️ 正确(…...

前端如何构建跨平台可复用的业务逻辑层(Web、App、小程序)

目录 第一章:跨平台开发的现状与技术选型分析 跨平台技术生态的全景概览 跨平台开发中业务逻辑层的共性需求 不同技术栈对业务逻辑复用的支持程度比较 技术选型中的权衡与思考 第二章:业务逻辑层的核心设计原则与架构理念 设计原则:构建高效业务逻辑层的基础 架构理念…...

day1-小白学习JAVA---JDK安装和环境变量配置(mac版)

JDK安装和环境变量配置 我的电脑系统一、下载JDK1、oracle官网下载适合的JDK安装包&#xff0c;选择Mac OS对应的版本。 二、安装三、配置环境变量1、终端输入/usr/libexec/java_home -V查询所在的路径&#xff0c;复制备用2、输入ls -a3、检查文件目录中是否有.bash_profile文…...

使用VHD虚拟磁盘安装双系统,避免磁盘分区

前言 很多时候&#xff0c;我们对现在的操作系统不满意,就想要自己安装一个双系统 但是安装双系统又涉及到硬盘分区,非常复杂,容易造成数据问题 虚拟机的话有经常用的不爽,这里其实有一个介于虚拟机和双系统之间的解决方法,就是使用虚拟硬盘文件安装系统. 相当于系统在机上…...

数据结构之稀疏矩阵与三元组表示法

稀疏矩阵的概念 在实际应用中&#xff0c;我们经常会遇到一些矩阵&#xff0c;其中大部分元素都是零&#xff0c;只有少量的非零元素。这种矩阵被称为稀疏矩阵。例如&#xff0c;在图像处理、网络分析等领域&#xff0c;稀疏矩阵经常出现。如果使用传统的二维数组来存储稀疏矩…...

微前端框架QianKun

以下是关于 QianKun微前端框架 的系统知识梳理,涵盖核心概念、核心功能、应用间通信、性能优化等内容: 一、QianKun基础概念与核心功能 微前端概念 定义:将单体前端应用拆分为多个独立开发、部署的子应用,通过主应用统一集成。优势:技术栈无关、独立部署、团队自治、增量…...

记录学习的第二十九天

还是力扣每日一题。 本来想着像昨天一样两个循环搞定的&#xff0c;就下面&#x1f447;&#x1f3fb; 不过&#xff0c;结果肯定是超时啦&#xff0c;中等题是吧。 正确答案是上面的。 之后就做了ls题单第一部分&#xff0c;首先是定长滑窗问题 这种题都是有套路的&#xff0…...

C语言复习笔记--字符函数和字符串函数(上)

在编程的过程中&#xff0c;我们经常要处理字符和字符串&#xff0c;为了⽅便操作字符和字符串&#xff0c;C语⾔标准库中提供了 ⼀系列库函数&#xff0c;接下来我们就学习⼀下这些函数。 首先来看下字符函数. 字符分类函数 C语⾔中有⼀系列的函数是专⻔做字符分类的&#xf…...

SQL:聚合函数(Aggregate Functions)

目录 第一性原理出发思考 ——我们为什么需要聚合函数&#xff1f; 什么是聚合函数&#xff1f; 常见聚合函数 实例讲解 &#x1f538; 1. COUNT() —— 计数 &#x1f538; 2. MAX() / MIN() —— 最大 / 最小值 &#x1f538; 3. SUM() —— 求和 &#x1f538; 4. …...

Linux工具学习之【gcc/g++】

&#x1f4d8;前言 书接上文&#xff0c;我们已经学习了 Linux 中的编辑器 vim 的相关使用方法&#xff0c;现在已经能直接在 Linux 中编写C/C代码&#xff0c;有了代码之后就要尝试去编译并运行它&#xff0c;此时就可以学习一下 Linux 中的编译器 gcc/g 了&#xff0c;我们一…...