AI大模型从0到1记录学习 数据结构和算法 day19
常用算法
查找算法
二分查找
算法原理
二分查找又称折半查找,适用于有序列表。其利用数据的有序性,每轮缩小一半搜索范围,直至找到目标元素或搜索区间为空为止。
代码实现
def binary_search(arr, target):
left, right = 0, len(arr) - 1
while left <= right:mid = left + (right - left) // 2if arr[mid] == target:return mid # 找到目标值,返回索引elif arr[mid] < target:left = mid + 1 # 目标值在右半部分else:right = mid - 1 # 目标值在左半部分return -1 # 未找到目标值
复杂度分析
时间复杂度
在循环中,区间每轮缩小一半,因此时间复杂度为O(logn)。
空间复杂度
使用常数大小的额外空间,空间复杂度为O(1)。
查找多数元素
力扣169题https://leetcode.cn/problems/majority-element/description/
返回数组中数量超过半数的元素,要求时间复杂度O(n)、空间复杂度O(1)。
示例:
输入:nums = [2,2,1,1,1,2,2]
输出:2
思路分析
为了严格符合复杂度要求,可以使用多数投票算法,多数投票算法也叫摩尔投票算法。摩尔投票算法的核心思想是对立性和抵消,它基于这样一个事实:如果一个元素在数组中出现的次数超过数组长度的一半,那么在不断消除不同元素对的过程中,这个多数元素最终会留下来。
具体来说,算法维护两个变量:一个是候选元素 candidate,另一个是该候选元素的计数 count。在遍历数组的过程中,遇到与候选元素相同的元素时,计数加 1;遇到不同的元素时,计数减 1。当计数减为 0 时,说明当前候选元素被抵消完,需要更换候选元素为当前遍历到的元素,并将计数重置为 1。
算法步骤
初始化:
选择数组的第一个元素作为初始候选元素 candidate。
将计数 count 初始化为 1。
遍历数组:
从数组的第二个元素开始遍历。
若当前元素与候选元素相同,count 加 1。
若当前元素与候选元素不同,count 减 1。
当 count 变为 0 时,将当前元素设为新的候选元素,并将 count 重置为 1。
返回结果:
遍历结束后,candidate 即为多数元素。
代码实现
def majorityElement(nums):
# 初始化候选元素为数组的第一个元素
candidate = nums[0]
# 初始化候选元素的票数为 1
count = 1
# 从数组的第二个元素开始遍历
for num in nums[1:]:
if num == candidate:
# 如果当前元素与候选元素相同,票数加 1
count += 1
else:
# 如果当前元素与候选元素不同,票数减 1
count -= 1
if count == 0:
# 当票数为 0 时,更新候选元素为当前元素,并将票数重置为 1
candidate = num
count = 1
return candidate
测试示例
nums = [2, 2, 1, 1, 1, 2, 2]
print(majorityElement(nums))
排序算法
冒泡排序
算法原理
将待排序数组分为无序区间和有序区间两部分,无序空间在前,有序空间在后。起初,数组中的所有元素均位于无序区间。冒泡排序算法的宏观思路是,逐个将无序区间中的最大值冒出到末尾(最大值到末尾之后就相当于进入了有序区间)。直到无序区间的所有元素都冒出到有序区间。
冒出最大值的微观逻辑是两两比较并交换,从无序区间的第一个元素开始,将其与后一个相邻元素行进比较,若当前元素较大,则交换到下一个元素的位置。然后继续比较第二个元素和下一个相邻元素,直至无序区间末尾。这样一来,每经历一轮冒泡操作,都会将现有无序区间中的最大值冒出到有序区间。
代码实现
def bubble_sort(nums):
for i in range(len(nums) - 1):
for j in range(len(nums) - 1 - i):
if nums[j] > nums[j + 1]:
nums[j], nums[j + 1] = nums[j + 1], nums[j]
复杂度分析
时间复杂度
上述算法共执行 (n-1) + (n-2) + (n-3) + … + 3 + 2 + 1 = (n×(n-1))/2 轮循环,每轮循环都执行常量个基本指令,时间复杂度为O(n2)。
空间复杂度
就地排序,使用常数大小的额外空间,空间复杂度为O(1)。
选择排序
算法原理
将待排序数组分为无序区间和有序区间两部分,有序空间在前,无序空间在后。起初,所有元素均位于无序区间。选择排序算法的思路是依次在无序区间中遍历找到最小元素,然后将最小元素与无序区间中的第一位进行交换,使最小元素并入有序区间。
代码实现
def select_sort(nums):
for i in range(len(nums) - 1):
min_index = i
for j in range(i + 1, len(nums)):
if nums[j] < nums[min_index]:
min_index = j
nums[i], nums[min_index] = nums[min_index], nums[i]
复杂度分析
时间复杂度
上述算法共执行 (n-1) + (n-2) + (n-3) + … + 3 + 2 + 1 = (n×(n-1))/2 轮循环,每轮循环都执行常量个基本指令,时间复杂度为O(n2)。
空间复杂度
就地排序,使用常数大小的额外空间,空间复杂度为O(1)。
插入排序
算法原理
将待排序的数组分为无序区间和有序区间两部分,有序空间在前,无序空间在后。起初,可以认为第一个元素位于有序区间(只有一个元素,一定是有序的),后边所有元素位于无序区间。插入排序的宏观思路是依次从无序区间选择一个元素,插入到有序区间的正确位置,直到无序区间的所有元素都被插入到有序区间。
插入操作的微观逻辑是,选择无序区间的第一个元素作为待插入元素,将其保存到临时变量,然后从有序区间的最后一个元素开始比较,若大于待插入元素,则将其向后移动一位,然后继续和前一位进行比较,直到找到正确的位置,将元素插入即可。
代码实现
def insert_sort(nums):
for i in range(1, len(nums)):
for j in range(i, 0, -1):
if nums[j] >= nums[j - 1]:
break
nums[j], nums[j - 1] = nums[j - 1], nums[j]
复杂度分析
时间复杂度
上述算法共执行 (n-1) + (n-2) + (n-3) + … + 3 + 2 + 1 = (n×(n-1))/2 轮循环,每轮循环都执行常量个基本指令,时间复杂度为O(n2)。
空间复杂度
就地排序,使用常数大小的额外空间,空间复杂度为O(1)。
归并排序
算法原理
归并排序(Merge Sort)算法的核心是归并操作(Merge)。归并操作指的是将两个已经排好序的列表合并成一个有序列表的操作。
归并操作的核心逻辑十分简单:循环选取两个有序列表各自最小的元素(因为列表本身有序,所以直接取排在最前的元素即可)进行比较,每次都将两者中最小的一个移到临时数组,直到其中一个有序列表被拿空,然后将另一列表中的剩余元素,顺次放入临时数组即可。这样就能将两个有序列表合并为一个有序列表了。
归并排序算法的执行过程分为两个阶段:分解、合并。
分解阶段:不断将数组的排序问题分解为对两个子数组的排序问题,直到子数组中只包含一个元素。
合并阶段:从最小的有序数组(只包含一个数组)开始,逐层进行归并(merge)操作,将两个有序小数组合并为一个有序大数组。
代码实现
def merge(left, right):
“”“合并两个已排序的数组”“”
merged = []
i = j = 0
# 比较两个子数组的元素,按升序放入 merged 数组
while i < len(left) and j < len(right):
if left[i] < right[j]:
merged.append(left[i])
i += 1
else:
merged.append(right[j])
j += 1
# 将数组中剩余元素加入 merged
merged.extend(left[i:])
merged.extend(right[j:])
return merged
def merge_sort(arr):
“”“归并排序”“”
# 数组长度为1时,不再分割
if len(arr) <= 1:
return arr
# 分割数组
mid = len(arr) // 2
left = merge_sort(arr[:mid])
right = merge_sort(arr[mid:])
# 合并已排序的子数组
return merge(left, right)
复杂度分析
时间复杂度
该算法的时间复杂度,主要取决于合并操作的循环次数,由于该算法用到了递归,故计算循环次数时,还需要考虑递归调用的总次数。由于每次递归调用都是将数组一分为二,故递归过程可用一个二叉树进行可视化。
例如对一个长度为8的数组进行排序,递归调用层级如下图所示:
虽然每次递归调用merge_sort()函数,合并操作的循环次数都可能不同,但是不难发现规律,上述递归树中,每层合并操作循环的总次数为n次。所以只需计算出层数,便可得到循环操作的总次数。显然,二叉树的层数level与输入数组长度n的关系为n=2level,因此层数level=log2n。
所以该算法循环执行的总次数为n×log2n(每层循环次数×层数),每次循环操作均执行常数个指令,时间复杂度为O(nlogn)。
空间复杂度
由于每次合并操作都需需要创建一个数组来临时存放合并结果,所以空间复杂度主要考虑临时数组占用的空间。虽然每次合并操作都会创建临时数组,但是,这些合并操作并不是同时运行的,每次合并操作结束后,临时数组的空间就会释放。也就是说,该算法在运行时,同一时刻只会有一个临时数组,所有只需考虑最大的临时数组占用的空间即可,显然临时数组的最大长度等于输入数组的长度。因此该算法的空间复杂度为O(n)。
快速排序
算法原理
快速排序算法每次从数组中挑一个元素,作为基准(pivot),然后将所有小于基准元素的元素放置于其左边,将所有大于基准元素的元素放置于其右边,完成后,就相当于完成了按基准元素的划分。同时,原来乱序的数组就也被基准点一分为二,成为两个乱序子数组。之后对两个子数组采用同样的操作划分,直到子数组只包含一个元素。
在按基准划分时,先从右到左寻找小于基准的元素,并与基准交换位置;再从左到右寻找大于基准的元素,并与基准交换位置。两者依次交替直到左右指针重合,此时将基准值放在重合处。
代码实现
def partition(nums, left, right):
“”“选择基准并按基准划分”“”
pivot = nums[left]
while left < right:
while left < right and nums[right] >= pivot:
right -= 1
nums[left] = nums[right]
while left < right and nums[left] <= pivot:
left += 1
nums[right] = nums[left]
nums[left] = pivot
return left
def quick_sort(nums, left, right):
“”“快速排序”“”
if left < right:
mid = partition(nums, left, right)
quick_sort(nums, left, mid - 1)
quick_sort(nums, mid + 1, right)
复杂度分析
时间复杂度
由于每次递归调用时,pivot的选择会影响到递归调用的总次数,所以该算法的时间复杂度是不固定的。下面分别分析一下最佳和最差两种情况下的时间复杂度。
最佳情况:若每次递归调用时,选择的pivot恰好都是所有数据的中位数,也就是恰好能将数组均匀的一分为二。这种情况下递归调用总次数最少,时间复杂度最低。这种情况下循环总次数约为nlog2n,每次循环都执行常量个基本指令,故时间复杂度为O(nlogn)。
最差情况:若每次递归调用时,选择的pivot都是所有数据的最大值或者最小值,也就是将长度为n的数组分为长度为0和长度为n-1的两个数组。这种情况下递归调用的次数最多,时间复杂度最高。这种情况下循环的总次数为(n-1) + (n-2) + (n-3) +…+ 3 + 2 + 1 = n^2/2,每次循环执行常量个基本指令,故时间复杂度为O(n2)。
虽然快速排序算法的最差时间复杂度是O(n2),但是这种情况出现的概率很低,除此之外,我们还可以通过某些手段(尽量选取接近中值的pivot),进一步降低最差情况出现的概率,总之我们几乎可以完全避免最差情况的出现。
实际上,更为细致的分析推导与实验统计都一致地显示,在大多数情况下,快速排序算法的平均时间复杂度依然可以达到O(nlogn)。并且由于其真实的T(n)时间函数中,常数系数较小,所以一般情况下,其表现要优于其他算法。
空间复杂度
和时间复杂度相同,空间复杂度也不是固定的。
最佳情况:同时存在的最多的未返回的方法栈数量等于递归树的深度,每个方法栈都只保存常量个变量,所以空间复杂度为O(logn)。
最差情况:同时存在的最多的未返回的方法栈的数量等于n-1,所以空间复杂度为O(n)。
同样,大多数情况下,快速排序法的平均空间复杂度可以达到O(logn)。
堆排序
算法原理
堆排序的基本思想是先将输入的数据构建成一个大顶堆,然后依次将堆顶的元素(即最大元素)移到数组的末尾,之后重新调整堆的结构,并将堆的元素个数减1。重复这一过程,直到所有元素都被排好序。
堆排序的步骤:
构建大顶堆
首先将待排序的序列构建成一个大顶堆。大顶堆的特点是,堆中每个父节点的值都大于或等于其子节点的值,因此根节点是整个堆中的最大值。构建大顶堆时从最后一个非叶节点自底向上依次堆化(非叶节点的计算:数组长度为 n,最后一个非叶节点的索引为 (n // 2) -1)。
交换堆顶和堆底元素
将堆顶元素(即最大元素)与当前堆的最后一个元素交换,堆的大小减1。此时,根节点被替换为堆的最后一个元素,堆的结构被破坏,需要调整堆。
重新调整堆
对堆重新进行堆化,使其满足大顶堆的性质。这样,新的堆顶元素将成为剩余元素中的最大值。此时自顶向下堆化。
重复
重复②③,直到堆的大小为 1。
代码实现
#arr 需要进行堆化操作的序列
#n 序列中元素的个数
#i 当前需要进行堆化操作的子树的根节点索引
def heapify(arr, n, i):
“”“堆化”“”
largest = i # 最大节点指向父节点
left = 2 * i + 1 # 左子节点
right = 2 * i + 2 # 右子节点
# 如果左子节点大于父节点,最大节点指向左子节点
if left < n and arr[left] > arr[largest]:largest = left# 如果右子节点大于当前最大节点,最大节点指向右子节点
if right < n and arr[right] > arr[largest]:largest = right# 如果最大节点不是父节点,则交换并递归堆化
if largest != i:arr[i], arr[largest] = arr[largest], arr[i]heapify(arr, n, largest)
def heap_sort(arr):
“”“堆排序”“”
n = len(arr)
构建大顶堆
n//2–1获取最后一个非叶子节点的索引
stop为不包含,所以意味着循环会一直执行到索引为 0 的节点
for i in range(n // 2 - 1, -1, -1):heapify(arr, n, i)
# 依次将堆顶元素放在末尾,并重新堆化
for i in range(n - 1, 0, -1):arr[i], arr[0] = arr[0], arr[i]heapify(arr, i, 0)
return arr
arr = [12, 11, 13, 5, 6, 7]
sorted_arr = heap_sort(arr)
print(“排序后的数组:”, sorted_arr)
复杂度分析
时间复杂度
其初始构建堆时间复杂度为O(n)。正式排序时,重建堆的时间复杂度为O(nlogn)。所以堆排序的总体时间复杂度为O(nlogn)。
堆排序对原始记录的排序状态不敏感,因此它无论最好、最坏和平均时间复杂度都是O(nlogn)。但是与其他O(nlogn) 的排序算法(如归并排序、快速排序)相比,堆排序的常数因子较大,因此在某些情况下效率较低。
空间复杂度
就地排序,空间复杂度是O(1)
相关文章:
AI大模型从0到1记录学习 数据结构和算法 day19
常用算法 查找算法 二分查找 算法原理 二分查找又称折半查找,适用于有序列表。其利用数据的有序性,每轮缩小一半搜索范围,直至找到目标元素或搜索区间为空为止。 代码实现 def binary_search(arr, target): left, right 0, len(arr) - 1 w…...
Python + Playwright:使用正则表达式增强自动化测试
Python + Playwright:使用正则表达式增强自动化测试 前言一、 为什么选择正则表达式?二、 Playwright 中集成正则表达式:途径与方法三、 实战应用:正则表达式解决典型测试难题场景 1:定位 ID 或 Class 包含动态部分的元素场景 2:验证包含可变数字或文本的提示信息场景 3:…...
构建用户友好的记账体验 - LedgerX交互设计与性能优化实践
构建用户友好的记账体验 - LedgerX交互设计与性能优化实践 发布日期: 2025-04-16 引言 在财务管理应用领域,技术实力固然重要,但最终决定用户留存的往往是日常使用体验。本文作为LedgerX技术博客的第二篇,将深入探讨我们如何通过精心的交互…...
AI赋能PLC(一):三菱FX-3U编程实战初级篇
前言 在工业自动化领域,三菱PLC以其高可靠性、灵活性和广泛的应用场景,成为众多工程师的首选控制设备。然而,传统的PLC编程往往需要深厚的专业知识和经验积累,开发周期长且调试复杂。随着人工智能技术的快速发展,利用…...
人工智能——梯度提升决策树算法
目录 摘要 14 梯度提升决策树 14.1 本章工作任务 14.2 本章技能目标 14.3 本章简介 14.4 编程实战 14.5 本章总结 14.6 本章作业 本章已完结! 摘要 本章实现的工作是:首先采用Python语言读取含有英语成绩、数学成绩以及学生所属类型的样本数据…...
智能家居适老化改造:让科技回归“无感服务”
在老龄化加速与科技飞速发展的当下,智能家居适老化改造成为提升老年人生活品质的关键举措。 理想的适老化智能家居,应实现 “无感服务”,即让老年人在无需刻意操作或复杂学习的情况下,自然、流畅地享受科技带来的便利,…...
2025年最新Web安全(面试题)
活动发起人小虚竹 想对你说: 这是一个以写作博客为目的的创作活动,旨在鼓励大学生博主们挖掘自己的创作潜能,展现自己的写作才华。如果你是一位热爱写作的、想要展现自己创作才华的小伙伴,那么,快来参加吧!…...
【linux】命令收集
1. 系统信息 uname -m:显示处理器架构uname -r:显示内核版本arch:显示处理器架构cat /proc/cpuinfo:查看CPU信息cat /proc/meminfo:查看内存使用情况cat /proc/version:显示内核版本date:显示系…...
从零到一:网站设计新手如何快速上手?
从零到一:网站设计新手如何快速上手? 在当今数字化时代,网站已成为企业、个人展示信息、提供服务的重要窗口。对于想要涉足网站设计领域的新手而言,如何快速上手并掌握必要的技能成为首要任务。本文将从基础知识、软件工具、设计…...
API平台(API网关)的API安全保障机制
API安全保障机制是一个复杂而重要的任务,需要综合运用多种技术和策略来确保API的安全性和稳定性。 1.黑名单 将不合法的服务、API及终端加入平台黑名单,限制其访问。支持黑名单的列表展示,且可将内容从黑名单删除。按类型、内容搜索黑名单。…...
【软考】论devops在企业信息系统开发中的应用
摘要: 随着互联网的不断发展,各行各业都在建设自己的企业信息系统,而随着业务的不断升级和复杂化,系统的更新迭代速度越来越快,系统也越来越复杂。对于信息系统开发者,架构师,管理者,…...
端、管、云一体化原生安全架构 告别外挂式防护!
面对数字化转型浪潮,企业网络安全风险日益凸显。数据泄露、黑客勒索等事件频发,合规要求加速推进。尽管企业纷纷部署了防病毒、身份认证、文件加密、入侵防护、流量监控等多种安全系统,但分散且孤立的架构非但没有有效抵御风险,反…...
每天记录一道Java面试题---day39
GC如何判断对象可以被回收了 回答重点 引用计数法: - 每个对象由一个引用计数属性,新增一个引用时计数器加1,引用释放时计数减1,计数为0时可以回收。可达性分析法: - 从GC Roots开始向下搜索,搜索所走过的…...
码界奇缘 Java 觉醒 后记 第二十五章 安全结界攻防战 - 从沙箱到模块化
第二十五章:安全结界攻防战 - 从沙箱到模块化 知识具象化场景 陆小柒站在由安全策略文件堆砌的古城墙上,眼前是千疮百孔的沙箱结界。空中漂浮着残缺的SecurityManager符石,远处java.security包化身的青铜守卫正在崩塌: 权限校验…...
【数据结构】励志大厂版·初阶(复习+刷题):线性表(顺序表)
前引:上一篇我们复习了复杂度,今天我们来通过实践回忆我们的线性表知识点,下面将讲解什么是线性表,顺序结构又是什么,知识点简洁精髓,无废话可言,小编会从每个细节讲起,包含头文件的…...
C 语言结构体中的函数指针与 Kotlin 高阶函数的对比
在学习 C 语言的过程中,很多 Java/Kotlin 背景的开发者都会对结构体中出现的“函数指针”感到陌生。特别是当看到如下代码时: struct Animal {void (*speak)(void); };void dogSpeak() {printf("Woof!\n"); }int main() {struct Animal dog;d…...
MicroK8s和K8s的区别优劣在哪?
运行ubuntu24.04后提示这么一段话: Strictly confined Kubernetes makes edge and IoT secure. Learn how MicroK8sjust raised the bar for easy, resilient and secure K8s cluster deployment.https://ubuntu.com/engage/secure-kubernetes-at-the-edge 这段话…...
C++指针和引用之区别(The Difference between C++Pointers and References)
面试题:C指针和引用有什么区 C指针和引用有什么区别? 在 C 中,指针和引用都是用来访问其他变量的值的方式,但它们之间存在一些重要的区别。了解这些区别有助于更好地理解和使用这两种工具。 01 指针 指针(Pointer…...
Linux——Shell编程之正则表达式与文本处理器(笔记)
目录 基础正则表达式 1:基础正则表达式示例 (4)查找任意一个字符“.”与重新字符“*” (5)查找连续字符范围“{ }” 文本处理器 一、sed工具 二、awk工具 (1)按行输出文本 (2࿰…...
关于k8s的部署
一、实验目的 1、理解k8s的组件的功能; 2、理解k8s中的资源类型; 3、 熟练掌握k8s部署配置; 二、实验内容: 前置知识点: 写出k8s有哪些组件并简述作用? ①Master 组件: Master 组件提供集…...
营销自动化实战指南:如何用全渠道工作流引爆线索转化率?
在数字化浪潮席卷全球的今天,企业争夺用户注意力的战场已从单一渠道转向全渠道。然而,面对海量线索,许多团队依然深陷效率泥潭:人工处理耗时费力、高价值线索流失、跨渠道数据难以整合……如何破局?营销自动化正成为企…...
利用Global.asax在ASP.NET Web应用中实现功能
Global.asax文件(也称为ASP.NET应用程序文件)是ASP.NET Web应用程序中的一个重要文件,它允许您处理应用程序级别和会话级别的事件。下面介绍如何利用Global.asax来实现各种功能。 Global.asax基本结构 <% Application Language"C#&…...
【Linux 并发与竞争实验】
【Linux 并发与竞争实验】 之前学习了四种常用的处理并发和竞争的机制:原子操作、自旋锁、信号量和互斥体。本章我们就通过四个实验来学习如何在驱动中使用这四种机制。 文章目录 【Linux 并发与竞争实验】1.原子操作实验1.1 实验程序编写1.2 运行测试 2.自旋锁实验…...
数据一致性策略之延迟双删-实现
延迟双删 查询数据之前优先去查Redis的缓存数据,减少数据库压力; 如果没有缓存会去查数据库,通过查询数据库后缓存热点Key Cache-Aside策略 高并发场景时,严重生产bug:数据不一致 业务场景: 事务1&#x…...
在PyTorch中,使用不同模型的参数进行模型预热
在PyTorch中,使用不同模型的参数进行模型预热(Warmstarting)是一种常见的迁移学习和加速训练的策略。以下是结合多个参考资料总结的实现方法和注意事项: 1. 核心机制:load_state_dict()与strict参数 • 部分参数加载&…...
【AI论文】InternVL3:探索开源多模态模型的高级训练和测试时间配方
摘要:我们推出了InternVL3,这是InternVL系列的一项重大进步,具有本地多模态预训练范式。 InternVL3不是将纯文本的大型语言模型(LLM)改编成支持视觉输入的多模态大型语言模型(MLLM),…...
基于Linux的ffmpeg python的关键帧抽取
1.FFmpeg的环境配置 首先强调,ffmpeg-python包与ffmpeg包不一样。 1) 创建一个虚拟环境env conda create -n yourenv python3.x conda activate yourenv2) ffmpeg-python包的安装 pip install ffmpeg-python3) 安装系统级别的 FFmpeg 工具 虽然安装了 ffmpeg-p…...
CNN:卷积到底做了什么?
卷积神经网络(Convolutional Neural Network, CNN) 是一种深度学习模型,专门用于处理具有网格结构的数据(如图像、视频等)。它在计算机视觉领域表现卓越,广泛应用于图像分类、目标检测、图像分割等任务。CN…...
C++ IO流
文章目录 C IO流流是什么C标准IO流C文件IO流c字符串流 C IO流 流是什么 在 C 中,“流(Stream)” 是一种 抽象的数据传输机制,它通过统一的接口实现了程序与各种输入/输出设备(如键盘、屏幕、文件、内存等)…...
解决splice改变原数组的BUG(拷贝数据)
项目场景: 项目中难免遇到需要删除改变数组的方法,去重,删除不要的数据等 问题描述: 但是splice方法会删除掉数据改变原数组,返回的是改变之后的数组,即使你是赋值的还是会影响到原数组的数据 GoodsInfo…...
ARINC818协议(二)
ARINC818对图像数据进行帧分割 1.FC协议定了5层模型结构:FC-4;FC-3;FC-2;FC-1;FC-0; 2.ARINC818协议位于FC-4层; 3.ARINC818协议在FC-4层使用FHCP帧头控制协议进行实现数据传递; 4.协议中有容器,容器头,object0~object…...
【Netty篇】Future Promise 详解
目录 一、 Netty Future 与 Promise —— 异步世界的“信使”与“传话筒”🚀1、 理解 Netty Future2、 理解 Netty Promise 二、 代码案例解读💻例1:同步处理任务成功👍例2:异步处理任务成功📲例3ÿ…...
【LaTeX】Misplaced alignment tab character . ^^I
目录 公式中出现Misplaced alignment tab character &. ^^I& 解决1:采用&& 解决2: 公式中出现Misplaced alignment tab character &. ^^I& \begin{equation}J_r & \dfrac{i\hbar}{2m}\left[\psi_2 \dfrac{\partial \psi^…...
数据中台(大数据平台)之元数据管理
👉元数据管理是数据管理的基础,数据中台产品要能够提供各类元数据采集的适配器,自动化采集技术元数据,并在技术元数据的基础上补充管理属性和业务属性,为后续的数据资源目录、数据安全管控、报表开发提供统一的口径。并…...
基于RRT的优化器:一种基于快速探索随机树算法的新型元启发式算法
受机器人路径规划中常用的快速探索随机树(RRT)算法的搜索机制的启发,我们提出了一种新颖的元启发式算法,称为基于RRT的优化器(RRTO)。这是首次将RRT算法的概念与元启发式算法相结合。RRTO的关键创新是其三种…...
设计模式每日硬核训练 Day 13:桥接模式(Bridge Pattern)完整讲解与实战应用
🔄 回顾 Day 12:装饰器模式小结 在 Day 12 中,我们学习了装饰器模式(Decorator Pattern): 强调在不改变原类结构的前提下,动态为对象增强功能。通过“包装对象”实现运行时组合,支…...
【开发语言】悬空指针问题
悬空指针(Dangling Pointer)是编程中常见的内存管理问题,尤其在C/C这类手动管理内存的语言中。以下是详细解释: 什么是悬空指针? 悬空指针是指向已经被释放(或失效)内存的指针。这段内存可能已…...
深入剖析 WiFi 定位解析功能:原理、技术优势与应用场景
WiFi 定位解析功能的原理 信号强度与距离的关系 WiFi 定位的核心原理基于无线信号传播过程中的一个基本特性:信号强度与信号发射源(即 WiFi 接入点,Access Point,简称 AP)和接收设备之间距离的关联。一般来说&am…...
从标准九九表打印解读单行表达式的书写修炼(Python)
解读单行表达式书写,了解修习单行捷径。 笔记模板由python脚本于2025-04-16 23:24:17创建,本篇笔记适合喜欢单行喜好python的coder翻阅。 【学习的细节是欢悦的历程】 博客的核心价值:在于输出思考与经验,而不仅仅是知识的简单复述…...
HTML5好看的水果蔬菜在线商城网站源码系列模板4
文章目录 1.设计来源1.1 主界面1.2 关于我们1.3 商品信息1.4 新闻资讯1.5 联系我们1.5 登录注册 2.效果和源码2.1 动态效果2.2 源代码 源码下载 作者:xcLeigh 文章地址:https://blog.csdn.net/weixin_43151418/article/details/147264262 HTML5好看的水果…...
Arkts应用全局UI状态存储和持久化V2(AppStorageV2、PersistenceV2和@Type)
目录 应用全局UI状态存储和持久化V2版本 AppStorageV2 connect remove keys 示例 使用限制 PersistenceV2 connect remove keys save notifyOnError 示例 使用限制 Type 使用限制 应用全局UI状态存储和持久化V2版本 以下实例AppStorageV2、PersistenceV2和装饰…...
【QT】常用控件 【多元素类 | 容器类 | 布局类】
🌈 个人主页:Zfox_ 🔥 系列专栏:Qt 目录 一:🔥 QT 常用控件【多元素类】 🦋 List Widget -- 列表🦋 Table Widget -- 表格🦋 Tree Widget -- 树形 二:&#x…...
uniapp实现图文聊天功能
Uniapp 实现图文聊天功能 下面我将介绍如何在 Uniapp 中实现一个基本的图文聊天功能,包括消息发送、接收和展示。 一、准备工作 创建 Uniapp 项目准备后端接口(可以使用云开发、自己的服务器或第三方服务) 二、实现步骤 1. 页面结构 &l…...
【场景应用9】多语言预训练语音模型进行自动语音识别
一、理论介绍 “多语言预训练语音模型进行自动语音识别”这个模块是近年来语音识别(ASR, Automatic Speech Recognition)领域非常重要的发展方向。下面我来为你系统地讲解这个模块的基础理论与算法流程,尤其聚焦在如 wav2vec 2.0 multilingual、XLSR(cross-lingual speech…...
华为HCIE-openEuler认证:能否成为国产操作系统领域的技术稀缺人才?
HCIE-openEuler是华为面向开源操作系统领域的高级专家认证,聚焦openEuler系统的深度运维、性能调优与生态集成。作为华为鲲鹏计算生态的核心技术栈,该认证要求持证者具备从底层内核优化到上层云原生适配的全栈能力。以下从技术能力、实验设计、行业适配三…...
Uniapp:列表选择提示框
目录 一、出现场景二、效果展示三、具体使用 一、出现场景 在项目的开发过程中,有这样一种场景,就是点击按钮走后续的逻辑之前还需要选择前提条件,就一个条件的情况下如果使用弹出框就显示比较多余,列表选择提示框刚好能够满足我…...
uni-app 开发安卓 您的应用在运行时,向用户索取(定位、相机、存储)等权限,未同步告知权限申请的使用目的,不符合相关法律法规要求
您的应用在运行时,向用户索取(定位、相机、存储)等权限,未同步告知权限申请的使用目的,不符合相关法律法规要求。 测试步骤:1、 工作台 -打卡,申请定位权限;2、工作台-设置-编辑资料-更换头像,申请相机、存 储权限。 修改建议:APP在申请敏感权限时,应同步说明权限申…...
李宏毅NLP-4-语音识别part3-CTC
Connectionist Temporal Classification|CTC 基于连接主义时间分类(CTC)的语音识别架构,具体描述如下: 输入层:底部的 x 1 , x 2 , x 3 , x 4 x^1, x^2, x^3, x^4 x1,x2,x3,x4代表输入的语音信号分帧数据…...
基于.NET后端实现图片搜索图片库 核心是计算上传图片与库中图片的特征向量相似度并排序展示结果
基于.NET 后端实现图片搜索图片库的方案,核心是计算上传图片与库中图片的特征向量相似度并排序展示结果。 整体思路 图像特征提取:使用深度学习模型(如 ResNet)提取图片的特征向量。特征向量存储:将图片的特征向量存…...
数据中台(大数据平台)之数据仓库建设
数据中台作为企业数据管理的核心枢纽,应支持并促进企业级数据仓库的建设,确保数据的有效整合、治理和高效应用。在建设数据仓库的过程中,设计和规划显得尤为重要,需要深入理解业务需求,制定合理的技术架构,…...