数据结构之线性表
1.什么是线性表
线性表的概念
- 定义:线性表是由n个数据元素组成的有限序列。每个数据元素(除了第一个和最后一个)都有且仅有一个前驱和一个后继。
- 逻辑结构:线性表的逻辑结构可以用一个序列来表示,例如 L=(a1,a2,…,an)。
- 长度:线性表的长度是元素的个数,通常用n表示。
线性表的ADT(抽象数据类型)定义
- 数据元素:数据元素的集合 D={a1,a2,…,an}。
- 关系:元素之间的关系集合 S={<ai,ai+1>∣ai,ai+1∈D,i=1,2,…,n−1}。
- 基本操作:初始化线性表
- 销毁线性表
- 清空线性表
- 判断线性表是否为空
- 获取线性表的长度
- 定位元素的位置
总结
- 线性表是数据结构中最基本的一种,其逻辑结构简单明了,每个元素都有明确的前驱和后继关系。
- ADT定义为线性表的操作提供了规范,使得线性表的实现和使用更加灵活和方便。
2.顺序表
插入元素操作的详细分析
- 操作步骤:
- 检查表是否已满:如果表已满,则无法插入新元素。
- 检查插入位置是否合法:插入位置 i 必须在 0 到 length 之间(包括 length)。
- 移动元素:将从位置 i 开始的所有元素向后移动一个位置,为新元素腾出空间。
- 插入新元素:将新元素 e 插入到位置 i。
- 更新表长:表长 length 增加 1。
- Python 代码实现:
def list_insert_sq(L, i, e):if L['length'] >= MAXSIZE:return "Error: List is full"if not (0 <= i <= L['length']):return "Error: Invalid position"# 在位置j插入元素efor j in range(L['length'] - 1, i - 1, -1):
L['elem'][j + 1] = L['elem'][j] L['elem'][i] = e
L['length'] += 1return "Insertion successful"
- 时间复杂度分析:
- 最好情况:插入到末尾(i = length),不需要移动元素,时间复杂度为 O(1)。
- 最坏情况:插入到开头(i = 0),需要移动所有元素,时间复杂度为 O(n)。
- 平均情况:平均需要移动一半的元素,时间复杂度为 O(n)。
删除元素操作
- 操作步骤:
- 检查表是否为空:如果表为空,则无法删除元素。
- 检查删除位置是否合法:删除位置 i 必须在 0 到 length-1 之间。
- 移动元素:将从位置 i+1 开始的所有元素向前移动一个位置,覆盖被删除的元素。
- 更新表长:表长 length 减少 1。
- Python 代码实现:
这里是删除位置线性表中位置为i的元素,所以只要判断位置i是否合法,而不用判断元素是否存在
def list_delete_sq(L, i, e):if L['length'] == 0:return "Error: List is empty"if not (0 <= i < L['length']):return "Error: Invalid position" e = L['elem'][i]for j in range(i, L['length'] - 1):
L['elem'][j] = L['elem'][j + 1] L['length'] -= 1return "Deletion successful"
如果是删除元素e,那么需要检验元素是否存在表中
def list_delete_sq(L, e):if L['length'] == 0:return "Error: List is empty"# 遍历线性表,检验元素e是否存在for i in range(L['length']):if L['elem'][i] == e:# 删除元素for j in range(i, L['length'] - 1):
L['elem'][j] = L['elem'][j + 1]
L['length'] -= 1return "Deletion successful"# 如果遍历完都没有找到元素ereturn "Error: element is not in List"
- 时间复杂度分析:
- 最好情况:删除最后一个元素(i = length-1),不需要移动元素,时间复杂度为 O(1)。
- 最坏情况:删除第一个元素(i = 0),需要移动所有元素,时间复杂度为 O(n)。
- 平均情况:平均需要移动一半的元素,时间复杂度为 O(n)。
查找元素操作
- 操作步骤:
- 遍历顺序表:从头到尾遍历顺序表,查找指定的元素。
- 返回结果:如果找到元素,返回其位置;否则返回未找到的提示。
- Python 代码实现:
def list_search_sq(L, e):for i in range(L['length']):if L['elem'][i] == e:return ireturn "Element not found"
- 时间复杂度分析:
- 最好情况:元素在第一个位置,时间复杂度为 O(1)。
- 最坏情况:元素在最后一个位置或不存在,时间复杂度为 O(n)。
- 平均情况:时间复杂度为 O(n)。
总结
- 优点:
- 随机访问:可以快速访问任意位置的元素。
- 存储简单:使用连续的内存空间,实现简单。
- 缺点:
- 空间限制:需要预先分配空间,可能浪费空间或空间不足。
- 插入和删除操作耗时:需要移动大量元素,时间复杂度为 O(n)。
3.链表
链表的概念
- 定义:链表是线性表的一种物理存储结构,使用一组任意的存储单元来存储线性表的数据元素。每个元素包含一个数据域和一个指针域,指针域指向下一个元素。
- 特点:非连续存储:数据元素在内存中可以分散存储。
- 动态存储:可以动态地分配和释放存储空间,不需要预先分配固定大小的空间。
链表的存储结构
- 结点定义:
class ListNode:def __init__(self, data=None):
self.data = data
self.next = None
- 链表定义:
class LinkedList:def __init__(self):
self.head = None
链表的基本操作
初始化链表
- 操作步骤:创建一个空的链表,头指针 head 指向 None。
- Python 代码实现:
def init_linked_list(self):
self.head = None
获取链表长度
- 操作步骤:从头结点开始遍历链表,计数节点个数。
- Python 代码实现:
def get_length(self):
count = 0
current = self.headwhile current:
count += 1
current = current.nextreturn count
获取第i个元素的值
- 操作步骤:从头结点开始遍历链表,找到第 i 个节点。
- Python 代码实现:
def get_element(self, i):if i < 0:return "Error: Index out of range"
current = self.head
index = 0while current:if index == i:return current.data
current = current.next
index += 1return "Error: Index out of range"
插入元素
- 操作步骤:创建新节点:分配空间并初始化新节点。
- 找到插入位置:遍历链表找到第 i-1 个节点。
- 插入新节点:调整指针,将新节点插入链表中。
- Python 代码实现:
def insert(self, i, data):if i < 0:return "Error: Invalid index"
new_node = ListNode(data)if i == 0:
new_node.next = self.head
self.head = new_nodeelse:
current = self.head
index = 0while current and index < i - 1:
current = current.next
index += 1if not current:return "Error: Index out of range"
new_node.next = current.next
current.next = new_node
删除元素
- 操作步骤:找到要删除的节点:遍历链表找到第 i 个节点。
- 调整指针:将前一个节点的指针指向要删除节点的下一个节点。
- 释放节点空间:删除节点。
- Python 代码实现:
def delete(self, i):if i < 0:return "Error: Invalid index"if i == 0:if self.head:
self.head = self.head.nextelse:return "Error: List is empty"else:
current = self.head
index = 0while current and index < i - 1:
current = current.next
index += 1if not current or not current.next:return "Error: Index out of range"
current.next = current.next.next
总结
- 优点:动态存储:可以动态地分配和释放存储空间,不需要预先分配固定大小的空间。
- 插入和删除操作高效:不需要移动大量元素,只需调整指针,时间复杂度为 O(1)。
- 缺点:随机访问困难:不能直接通过下标访问元素,需要从头结点开始遍历,时间复杂度为 O(n)。
- 额外空间开销:每个节点需要额外的空间存储指针域。
4.循环链表
循环链表的基本概念
- 定义:循环链表是一种特殊的链表,其特点是最后一个节点的指针域指向链表的头节点,形成一个环形结构。
- 类型:循环单链表:最后一个节点的 next 指针指向头节点。
- 循环双向链表:最后一个节点的 next 指针指向头节点,头节点的 prior 指针指向最后一个节点。
循环链表的存储结构
- 节点定义:
class Node:def __init__(self, data=None):
self.data = data
self.next = None
self.prior = None # 仅在双向循环链表中使用
- 链表定义:python
class CircularLinkedList:def __init__(self):
self.head = None
循环链表的基本操作
初始化循环链表
- 操作步骤:创建一个空的循环链表,头指针 head 指向 None。
- Python 代码实现:
def init_circular_linked_list(self):
self.head = None
插入元素
- 操作步骤:创建新节点:分配空间并初始化新节点。
- 找到插入位置:遍历链表找到插入位置。
- 插入新节点:调整指针,将新节点插入链表中,并更新指针形成环。
- Python 代码实现:
def insert(self, data):
new_node = Node(data)if self.head is None:
self.head = new_node
new_node.next = new_node # 形成环else:
current = self.headwhile current.next != self.head:
current = current.next
new_node.next = self.head
current.next = new_node
删除元素
- 操作步骤:找到要删除的节点:遍历链表找到要删除的节点。
- 调整指针:将前一个节点的 next 指针指向要删除节点的下一个节点,并更新指针形成环。
- 释放节点空间:删除节点。
- Python 代码实现:
def delete(self, data):if self.head is None:return "Error: List is empty"
current = self.head
prev = Nonewhile True:if current.data == data:if current == self.head:if current.next == self.head:
self.head = Noneelse:while current.next != self.head:
current = current.next
current.next = self.head.next
self.head = self.head.nextelse:
prev.next = current.nextreturn "Deletion successful"
prev = current
current = current.nextif current == self.head:breakreturn "Error: Element not found"
遍历链表
- 操作步骤:从头节点开始遍历链表,直到回到头节点。
- Python 代码实现:
def traverse(self):if self.head is None:return "List is empty"
current = self.headwhile True:print(current.data, end=" -> ")
current = current.nextif current == self.head:breakprint("Head")
总结
- 优点:环形结构:可以方便地从任意节点开始遍历整个链表。
- 操作灵活:插入和删除操作不需要特殊处理头尾节点。
- 缺点:复杂性:实现和操作相对复杂,需要特别注意指针的更新和环的维护。
相关文章:
数据结构之线性表
1.什么是线性表 线性表的概念 定义:线性表是由n个数据元素组成的有限序列。每个数据元素(除了第一个和最后一个)都有且仅有一个前驱和一个后继。逻辑结构:线性表的逻辑结构可以用一个序列来表示,例如 L(a1,a2,…,an)。…...
量子行走的干涉性和叠加性
需要注意公式的一些特殊情况,举例,当dj2和dj3 dj2 dj3...
Fabric环境部署-安装Go
安装go语言环境 国内镜像:Go下载 - Go语言中文网 - Golang中文社区 1.选择版本下载后解压:注意go1.11.linux-amd64.tar.gz换成你下的 sudo tar zxvf go1.21.linux-amd64.tar.gz -C /usr/local 2.. 创建Go目录 mkdir $HOME/go 3. 用vi打开~./bashrc&…...
网站设计总结后期维护与更新的重要性
当我们谈论网站设计时,往往会聚焦在初始阶段的创意和实现上。然而,一旦网站建成并上线,后期维护与更新的重要性就显得尤为突出。一个网站的成功不仅取决于其初始设计,更在于持续的维护与更新。 首先,后期维护能够确保网…...
『SQLite』详解运算符
内容摘要:本节讲解运算符,包括:算术运算符、比较运算符、逻辑运算符和位运算符。 什么是运算符? 运算符是一个保留字或字符,主要用于 SQLite 语句的 WHERE 子句中执行操作。它用于指定 SQLite 语句中的条件࿰…...
计算机网络--根据IP地址和路由表计算下一跳
一、必备知识 1.无分类地址IPV4地址网络前缀主机号 2.每个IPV4地址由32位二进制数组成 3. /15这个地址表示网络前缀有15位,那么主机号32-1517位。 4.地址掩码(子网掩码):所对应的网络前缀为1,主机号为0。 5.计算下…...
如何使用 Ansys OptiSlang 同时运行多个参数化设计研究
了解如何通过使用 OptiSLang 同时运行多个参数化设计研究来提高工作效率。 了解参数化设计研究的重要性 参数化设计研究在工程和设计过程中起着至关重要的作用。通过改变输入参数,工程师可以探索不同设计选择的效果,并优化其设计以满足性能、成本或其他…...
《 拼数 》
题目描述 设有 nn 个正整数 a1…ana1…an,将它们联接成一排,相邻数字首尾相接,组成一个最大的整数。 输入格式 第一行有一个整数,表示数字个数 nn。 第二行有 nn 个整数,表示给出的 nn 个整数 aiai。 输出格…...
Memcached CAS 命令
Memcached CAS(Check-And-Set 或 Compare-And-Swap) 命令用于执行一个"检查并设置"的操作 它仅在当前客户端最后一次取值后,该key 对应的值没有被其他客户端修改的情况下, 才能够将值写入。 检查是通过cas_token参数进…...
ElasticSearch基础-文章目录
ElasticSearch学习总结1(环境安装) ElasticSearch学习总结2(基础查询) ElasticSearch学习总结3(.NetCore操作ES) ElasticSearch学习总结4(sql操作ES) ElasticSearch学习总结5&am…...
后台管理系统动态面包屑Breadcrumb组件的实现
在后管理系统开发中,面包屑导航是一个非常常见的功能,通常是根据当前的 url 自动生成面包屑导航菜单,当跳转路由发生变化时,面包屑导航都会随之发生变化,即动态面包屑。 要完成动态面包屑我们需要制作一个动态数组&am…...
java项目之校园管理系统的设计与实现(源码+文档)
风定落花生,歌声逐流水,大家好我是风歌,混迹在java圈的辛苦码农。今天要和大家聊的是一款基于springboot的校园管理系统的设计与实现。项目源码以及部署相关请联系风歌,文末附上联系信息 。 项目简介: springboot校园…...
浅谈棋牌游戏开发流程八:运维与数据分析
一、前言:为什么“云端运维”和“数据分析”如此重要? 在前面几篇文章中,我们已经从客户端、后端架构、用户系统、房间匹配与对局流程、数据库设计与优化、支付与充值、安全与反外挂等角度,系统性地搭建了一个棋牌游戏的基本框架…...
uniapp:微信小程序文本长按无法出现复制菜单
一、问题描述 在集成腾讯TUI后,为了能让聊天文本可以复制,对消息组件的样式进行修改,主要是移除下面的user-select属性限制: user-select: none;-webkit-user-select: none;-khtml-user-select: none;-moz-user-select: none;-ms…...
跨物种筛选同源基因
工具:R:biomaRt 原始文件:human、mouse、macaque、marmoset四个物种的gene list,有些是用ensembl ID,有的是用gene name来表示。 目的:找到四个物种的gene list之间的1v1同源基因 1. 找到物种间的1v1同源…...
大模型数据采集和预处理:把所有数据格式,word、excel、ppt、jpg、pdf、表格等转为数据
大模型数据采集和预处理:把所有数据格式,word、excel、ppt、jpg、pdf、表格等转为数据 文本/图片/表格,分别提取处理工具选择不同格式文件,使用不同工具处理1. 确认目标2. 分析过程(目标-手段分析法)3. 实现步骤4. 代码封装效果展…...
k8s修改存储目录-介绍
k8s修改存储目录-介绍 文章目录 k8s修改存储目录-介绍总结:介绍指定 Docker 或 containerd 镜像和容器存储目录Docker 存储目录containerd 存储目录 指定 Kubelet 的存储目录指定 Pod 和容器存储目录 docker 运行时,迁移目录实操:https://blo…...
【电源专题】为什么测试电源的SW波形上冲振荡之前的0V电位要先来个小的下降
在同步电源的开关节点SW波形测试中,你可能会发现周期性的SW波形在上升前的一小段时间时间内会有一个小小的下跌,这个下跌会低于0V。那么这个下跌是怎么来的呢? 如下所示为某降压转换器的SW开关节点波形: 其展开后可以看到在上升之前有20ns左右的时间,SW电压是下跌…...
常见的反规范化技术
在数据库设计中,数据规范化和反规范化是两种重要的策略,它们在一定程度上存在权衡。规范化通过组织表结构,减少数据冗余,提高数据一致性和降低更新异常,使数据存储更加高效、可靠。然而,过度的规范化会导致…...
Linux中隐藏操作身法
从历史记录中删除指定的命令 假设历史记录中已经包含了一些你不希望记录的命令。这种情况下我们怎么办?很简单。通过下面的命令来删除: history | grep "keyword"例如:history | grep set o history 批量第二条和第四条删除: sed…...
Transformer知识梳理
Transformer知识梳理 文章目录 Transformer知识梳理什么是Transformer?语言模型迁移学习 Transformer结构注意力层原始结构 总结 什么是Transformer? 语言模型 Transformer模型本质上都是预训练语言模型,大部分采用自监督学习(S…...
Nexus Message Transaction Services(MTS)
Nexus 系列交换机遇到以下情形时,可以尝试查看是否是 MTS 消息卡在缓冲区过多,因为 MTS 负责处理模块内以及跨模块(包括跨管理引擎)的各服务之间的消息路由和排队。 • CPU 高 • 命令行无响应、响应慢 • 控制平面中断 • 流量问…...
网络编程基础:连接Java的秘密网络
1 网络编程的重要性 网络编程允许Java应用程序与其他计算机或设备进行通信。这包括从简单的数据传输到复杂的分布式系统和Web服务。 2 Java网络编程的核心类 Java提供了多个类来支持网络编程: InetAddress:表示网络上的IP地址。 URL:表示统…...
uniapp中判断设备类型
全局变量: 在 UniApp 中,你可以通过 uni.getDeviceInfo 获取设备信息,并将设备类型全局存放。通常,这些信息可以存放在 app.vue 的全局变量中,以便在整个应用中访问。 以下是如何在 app.vue 中实现这一功能的完整代码…...
数据可视化分析详解
数据可视化分析是一种通过图形、表格、图标和其他视觉元素来呈现数据的方式,使得数据更易于理解和分析。以下是关于数据可视化分析的一些关键点: 一、定义与目的 数据可视化分析是指利用图形化手段,清晰地有效地传达与沟通信息。它将数据以…...
_使用CLion的Vcpkg安装SDL2,添加至CMakelists时报错,编译报错
语言:C20 编译器:gcc 14.2 摘要:初次使用Vcpkg添加SDL2,出现CMakelists找不到错误、编译缺失main错误、运行失败错误。 CMakelists缺失错误: 使用CLion的Vcpkg安装SDL2时,按照指示把对应代码添加至CMakel…...
QT中Qstring和QByteArray有什么区别?
数据存储内容方面 QString: 主要用于存储和处理Unicode编码的文本字符串。它能够很好地处理包含各种语言字符的文本信息,如中文、日文、韩文等多种语言文字。例如,QString str "你好,世界!";可以方便地存储…...
Viggle AI:支持小孩或者卡通人物吗? [Viggle AI实战教程] – 第2篇
历史文章 Suno AI API接入 - 将AI音乐接入到自己的产品中,支持120并发任务 万物皆能舞,AI让你秒变“舞”林高手 – Viggle AI“舞”所不能 Viggle AI:打造爆款 AI 视频,让照片 “踢” 起足球 Viggle AI:开启3D动画…...
庐山派K230学习日记4 PWM控制
1 本节介绍 📝本节您将学习如何通过将K230开发板的GPIO引脚复用为PWM功能并输出PWM信号;实现输出PWM信号及控制板载无源蜂鸣器发出声音。 🏆学习目标 1️⃣如何将GPIO引脚配置为PWM模式,通过40Pin排针中的部分引脚来输出PWM信号…...
Android配件应用默认启动与USB权限申请区别
使用效果: USB配件授权演示 选择USB配件默认打开应用 申请USB配件使用权限...
【车载开发系列】GPIO模式分类
【车载开发系列】GPIO模式分类 这里写目录标题 【车载开发系列】GPIO模式分类一. GPIO概念二. GPIO的模式区分三. GPIO的八大模式1)推挽输出(Output push-pull)2)开漏输出(Output open-drain)3)…...
uniapp--HBuilder开发
提示:本文为学习内容,若有错误,请联系作者,谦虚受教。 文章目录 前言一、下载HBuilder二、添加modbus相关库1.下载nodejs2.下载modbus库3.项目添加modbus库 三、HBuilder相关功能语句1.文件夹说明2.消息信息框3.开关按钮4.选中按钮…...
学习笔记|arduino uno r3|点亮|hello world|Atmega328P|开发板学习:概述
目录 arduino uno r3开发板学习开发板概述重要引脚介绍配置开发环境安装 Arduino IDE 编程环境介绍Arduino 介绍 实操连接选择程序程序代码编译和执行 总结课后练习 arduino uno r3开发板学习 开发板概述 Arduino UNO 是一款基于Atmega328P 的微控制器开发板。它有 14 个数字…...
Go语言的 的注解(Annotations)核心知识
Go语言的注解(Annotations)核心知识 Go语言是一种简洁且高效的编程语言,广泛应用于后端开发、云计算和微服务架构。在探索Go语言的特性时,我们不可忽视一个重要的概念:注解(Annotations)。虽然…...
WinRAR中“自动加密”如何使用?
WinRAR加密大家都不陌生,那么自动加密功能大家熟悉嘛?如何使用自动加密功能?今天介绍详细教程给大家。 打开WinRAR软件之后选择工具栏中的【选项】,点击设置 然后切换到【压缩】选项卡,点击【创建默认配置】ÿ…...
`http_port_t
http_port_t 是 SELinux(Security-Enhanced Linux)中的一种端口类型标签,用于标识哪些端口可以被 HTTP 和 HTTPS 服务使用。SELinux 是一种强制访问控制(MAC)安全模块,它通过定义安全策略来限制进程对系统资…...
C++编程等级认证学习计划
C编程等级认证学习计划 计划目标 在30天内系统学习并掌握C编程等级认证(一至八级)的知识点,为参加认证考试做好充分准备。 前期准备 学习资料收集 准备涵盖C编程一至八级知识点的专业教材,如《C Primer》等。收集相关的在线教…...
c和c++中为什么要防止头文件被重复包含!
在编程中,头文件就像一本工具书,它包含了函数、类、宏、全局变量等的定义和声明,供其他代码文件引用。想象一下,如果你在写一篇文章时,反复引用同一本工具书的内容,会发生什么情况呢? 1. 避免重…...
安的厦小程序开发日志
目录 背景名字由来架构文件目录app.jsonapp.wxsspackage.jsonproject.config.jsindex.wxmlindex.wxssindex.jsindex.jsondetail.wxmldetail.wxssdetail.jsdetail.json参考资料背景 我们正在经历一场价值观的变迁,过去的丈母娘和女朋友总是要求男方要买房,那是因为房子是当下…...
深度评测uni-app x:开启跨平台开发新篇章
文章目录 一、引言1.1 跨平台开发的崛起1.2 uni-app x 初印象 二、uni-app x 核心特性评测2.1 uts 语言:跨平台编程新利器2.2 uvue 渲染引擎:原生渲染新体验2.3 强大的组件和 API 支持2.4 插件生态:拓展无限可能 三、与 uni-app 对比…...
第06章 重定向与管道
一、概述 在企业生产环境中,如何记录一个程序运行的过程记录或者定时任务执行的结果呢?假设定时任务凌晨执行,我们在白天上班时需要查看执行是否成功要怎么办?就可以使用本章介绍的重定向和管道符号。 二、重定向 2.1 文件描述…...
python中的字典类型数据及其操作
1、字典的定义 映射是一种键(索引)和值(数据)的对应键值对:键是数据索引的扩展字典是键值对的集合,键值对之间无序字典采用大括号{}和dict()创建,键值对用冒号:表示,key…...
『SQLite』表达式操作
摘要:表达式是一个或多个值、运算符和计算值的 SQL 函数的组合。SQL 表达式与公式类似,都写在查询语言中。 基本语法 SELECT column1, column2, columnN FROM table_name WHERE [CONTION | EXPRESSION];布尔表达式 SQLite 的布尔表达式在匹配单个值的…...
PHP7和PHP8的最佳实践
php 7 和 php 8 的最佳实践包括:使用类型提示以避免运行时错误;利用命名空间组织代码并避免命名冲突;采用命名参数、联合类型等新特性增强可读性;用错误处理优雅地处理异常;关注性能优化,如避免全局变量和选…...
Python实现一个简单的 HTTP echo 服务器
一个用来做测试的简单的 HTTP echo 服务器。 from http.server import HTTPServer, BaseHTTPRequestHandler import jsonclass EchoHandler(BaseHTTPRequestHandler):def do_GET(self):# 构造响应数据response_data {path: self.path,method: GET,headers: dict(self.headers…...
字玩FontPlayer开发笔记4 性能优化 首屏加载时间优化
字玩FontPlayer开发笔记4 性能优化 首屏加载时间优化 字玩FontPlayer是笔者开源的一款字体设计工具,使用Vue3 ElementUI开发,源代码: github: https://github.com/HiToysMaker/fontplayer gitee: https://gitee.com/toysmaker/fontplayer …...
NeurIPS 2024 | SHMT:通过潜在扩散模型进行自监督分层化妆转移(阿里,武汉理工)
当前的妆容转移技术面临两个主要挑战: 缺乏成对数据,导致模型训练依赖于低质量的伪配对数据,从而影响妆容的真实感; 不同妆容风格对面部的影响各异,现有方法难以有效处理这种多样性。 今天给大家介绍的方法是由阿里联…...
“知识图谱AI教学辅助系统:点亮智慧学习的新灯塔
嘿,各位教育界的小伙伴们!今天咱们来聊聊一个超级有料的话题——知识图谱AI教学辅助系统。想象一下,如果有一个智能导师能根据你的需求定制专属的学习路径,还能像百科全书一样随时解答疑问,是不是感觉学习变得更高效、…...
STM32-ADC模数转换
定义: ADC(Analog-Digital Converter)模拟-数字转换器 ADC可以将引脚上连续变化的模拟电压转换为内存中存储的数字变量,建立模拟电路到数字电路的桥梁 12位逐次逼近型ADC【表示转化的范围是0-2^12 - 1】,1us转换时间 输…...
Springboot整合MyBatis-Plus
1、整合MyBatis-Plus 1、导入依赖 <dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>3.2.0</version></dependency>2、配置 1)配置数据源,导…...