算法设计:回溯法的基础原理与应用
目录
一、基本概念
二、适用问题
三、基本步骤
四、算法模式
递归回溯算法模式(求一个解)
非递归回溯算法模式(求一个解)
非递归回溯算法模式(求所有解)
五、经典应用
1数字组合问题
2数字排列问题
3 着色问题
8 皇后问题
PARTITION 问题
0 - 1 背包问题
六、时间复杂度
七、总结
一、基本概念
回溯法作为一种重要的算法设计策略,在处理组合与排列等复杂问题上展现出独特的优势。其核心在于采用深度优先搜索(DFS)的方式,构建状态空间树,对所有潜在的解进行系统性探索。在这一过程中,通过精心设计的剪枝函数,回溯法能够敏锐地识别并避开那些注定无法产生有效解的搜索路径,极大地提升了算法的执行效率,避免了在庞大解空间中进行盲目搜索。
二、适用问题
回溯法适用于那些可清晰界定为特定状态空间 E 的问题类型。这类问题通常存在一套约束集 D,目标是从中找出所有满足 D 条件的 n 元组。元组中的每个元素均来自有限集合 Si。值得注意的是,问题的解空间往往存在多种表述形式,此时需审慎抉择,挑选出最为简洁且高效的表达方式,这对后续算法的性能起着至关重要的影响。
三、基本步骤
- 定义解空间:精准定义问题的解向量为 n 元组(x₁,x₂,…,xₙ),详细明确每个 xi 的取值范围,并梳理出完整的问题约束集 D。这一步骤如同为算法绘制了一张精确的地图,明确了搜索的边界与方向。
- 确定解空间结构:将解空间巧妙地具象化为一棵高为 n 的带权有序树 T,即状态空间树。树中的每一个节点都对应着问题求解过程中的一个特定状态,而叶子节点则代表着可能的最终解。这种树形结构为深度优先搜索提供了清晰的遍历框架。
- 深度优先搜索:以深度优先的方式有条不紊地遍历状态空间树。在搜索进程中,充分借助剪枝函数的强大功能,及时摒弃那些明显无效的搜索分支。常用的剪枝函数主要包括约束函数和目标函数。约束函数负责剪掉那些不满足既定约束条件的子树,而目标函数则针对优化类问题,剪掉那些无论如何都无法导向最优解的子树,从而显著减少不必要的计算量。
四、算法模式
递归回溯算法模式(求一个解)
- 初始化阶段,将解向量 v 设置为空,同时将标志位 flag 设为 false,以此作为算法执行的起始状态。
- 发起对递归函数 advance (k) 的调用,从解向量的第 k 个元素开始逐步构建解。
- 在 advance (k) 函数内部,针对集合 Xk 中的每一个元素 x,依次将其纳入解向量 v 中进行尝试。
- 一旦 v 构成了最终解,立即将 flag 设置为 true,并终止递归过程;若 v 仅为部分解,则递归调用 advance (k + 1),持续推进解的构造工作。
- 最终,依据 flag 的值输出相应的结果,若 flag 为 true,表明成功找到解,反之则表示未找到符合要求的解。
非递归回溯算法模式(求一个解)
- 初始化解向量 v 为空,flag 设为 false,k 赋值为 1,为非递归回溯过程做好准备。
- 借助外层 while 循环把控整个回溯流程,内层 while 循环则专注于遍历集合 Xk 中的元素。
- 针对每个遍历到的元素 x,将其加入 v 中进行判断。若形成最终解,即刻将 flag 置为 true 并跳出循环;若为部分解,则令 k 自增 1,继续下一位置元素的构造。
- 若遍历完所有元素仍未找到解,执行回溯操作,即 k 减 1,并重置相关元素,以便重新探索其他可能路径。
- 根据 flag 的最终取值输出结果,判断是否成功寻得解。
非递归回溯算法模式(求所有解)
此模式与求一个解的非递归模式大致相仿,关键区别在于,当成功找到一个最终解时,直接将其输出,既不设置 flag,也不退出循环,而是继续在状态空间树中深入搜索,力求找出所有可能的解,全面覆盖问题的解空间。
五、经典应用
1数字组合问题
- 问题描述:从自然数 1、2、……、n 中任取 r 个数,生成所有可能的组合。
- 状态空间:E={(x₁,x₂,...,x_r)∣xi∈S ,i=1,2,...,r},其中 S={1,2,3,...,n},约束集为 x₁ <x₂<... <x_r。
- 递归算法:通过循环结构为组合中的每个位置精准赋值,实时判断当前组合是否为合法解或部分解,借助递归机制层层深入,构建出所有符合条件的组合。
- INPUT: n个数分别为{1,2,…n},r。
OUTPUT: n个数的所有r组合。 -
1. for k =1to r 2. c[k] =0 3. end for 4. Com(1) 过程 Com(k) 1. for m=1 to n 2. c[k] =m 3. if c为合法的解then得到一个r组合,输出c数组 4. else if c是部分的解 then Com(k+1) 5. end for
- 非递归算法:运用 while 循环模拟递归过程,通过巧妙的回溯操作,有条不紊地生成所有可能的数字组合,实现对解空间的全面遍历。
- INPUT: n个数分别为{1,2,…n},r。
OUTPUT: n个数的所有r组合。 -
1. for k =1 to r2. c[k] =03. end for4. k =15. while k≥16. while c[k]≤n-17. c[k] =c[k]+18. if c为合法的 then得到一个r组合,输出c数组9. else if c是部分解 then k =k+110. end while11. c[k] =012. k =k-113. end while
2数字排列问题
- 问题描述:生成数字 1,2,…,n 的所有排列。
- 状态空间:E={(x₁,x₂,...,x_n)∣xi∈S ,i=1,2,...,n},其中 S={1,2,3,...,n},约束集为 xi≠xj (i≠j)。
- 非递归算法:采用回溯策略,借助循环和条件判断,在满足约束条件的前提下,逐一生成所有可能的数字排列,充分展现了回溯法在排列问题上的高效求解能力。
- INPUT: n个数分别为{1,2,…n} 。
OUTPUT: n个数的一个排列。
-
1. for k =1 to n2. c[k] =03. end for4. flag=false,k =15. while k≥16. while c[k]≤n-17. c[k] =c[k]+18. if c为合法的 then flag=true,退出两层循环9. else if c是部分解 then k =k+110. end while11. c[k] =012. k =k-113. end while 14. if flag then output c15. else output “no solution”
3 着色问题
- 问题描述:为无向图 G=(V,E) 的顶点分配三种颜色之一,确保相邻顶点颜色不同。
- 状态空间:用 n 元组 (c₁,c₂,…,c_n) 表示顶点的着色方案,其中 ci∈{1,2,3}。所有可能的着色方案构成一棵完全三叉树。
- 递归算法:依次为每个顶点尝试三种颜色,依据相邻顶点颜色不同的约束条件,判断当前着色是否为合法或部分着色,通过递归调用不断构建合法的着色方案。
- INPUT:无向图G=(V,E)
OUTPUT:G的顶点的3着色c[1…n],其中每个c[j]为
1,2,31. For k ←1to n2. c[k] ←03. End for4. flag ←false5. Graphcolor(1)6. If flag then output c7. Else output “no solution” 过程 graphcolor(k)1. For color=1 to 32. c[k] ←color3. If c为合法着色 then set flag ←true and exit4. Else if c是部分的 then graphcolor(k+1)5. End for
- 非递归算法:利用 while 循环模拟递归过程,通过回溯操作在庞大的解空间中精准定位所有合法的着色方案,有效解决了图的着色难题。
- 输入:无向图G=(V,E)。
输出:G的顶点的3着色c[1…n],其中每个c[j]为
1,2,3。1. For k ←1 to n2. c[k] ←03. End for 4. flag ←false5. k ←16. While k≥17. While c[k]≤28. c[k] ←c[k]+19. If c为合法着色 then set flag←true且从两个while循环退出10. Else if c是部分解 then k ←k+111. End while12. c[k] ←013. k ←k-114. End while 15. If flag then output c16. Else output “no solution”
8 皇后问题
- 问题描述:在 8×8 国际象棋棋盘上合理放置 8 个皇后,使其彼此不能相互攻击。
- 状态空间:以完全四叉树形象地表示皇后的可能放置情况,树的每一层节点对应皇后在该行的不同放置列。
- 算法思想:以深度优先搜索遍历状态空间树,巧妙运用皇后不能相互攻击的约束条件进行剪枝操作,高效找出所有满足要求的合法放置方案,是回溯法解决约束性布局问题的经典范例。
- 算法步骤:INPUT:空
OUTPUT:对应于4皇后问题的解向量c[1…4]1.for k ←1 to 42. c[k] ←03. endfor4.flag ←false5.k ←1 6.while k≥17. While c[k]≤38. c[k] ← c[k] +19. If c为合法 then set flag ←true且从两个while循环退出10. Else if c是部分解 then k ←k+111. End while12. c[k] ←013. k ←k-114. End while15. If flag then output c16. Else output “no solution”
PARTITION 问题
- 问题描述:将自然数 n 拆分成若干数之和,或给定整数集合 X 和整数 y,找出和为 y 的子集 Y。
- 回溯策略:将问题的解巧妙表示为特定形式的元组,运用回溯法对所有可能的组合进行系统搜索,依据问题条件判断是否满足拆分或子集求和要求,从而成功求解。
- 算法步骤:INPUT:X集合(数组), 整数y
OUTPUT:X集合对应的n元布尔向量,使得对应的
元素为1的xi之和为y。1. 初始化n元布尔向量c[n],值为-1;s=02. k ←1 3. while k≥ 14. while c[k]≤05. c[k] ← c[k] +16. if c[k]=1 then s=s+X[k] end if7. if s=y then c[k+1]~c[n]←0 输出c[ ]8. if(k=n) then break endif 9. else if (s<y)&&(k<n) then k ←k+110. endif11. endwhile12. s=s-X[k] 13. c[k] ← -114. k ←k-115. end while
0 - 1 背包问题
- 问题描述:在给定背包容积限制下,合理选择物品放入背包,使总价值达到最大。
- 状态空间:用 n 元组 (c₁,c₂,…,c_n) 表示物品是否被放入背包,其中 ci∈{0,1}。
- 回溯算法:全面生成所有可能的物品选择组合,精确计算每个组合的价值和体积。通过精心设计的剪枝策略,如基于目标函数估计,有效优化搜索过程,快速定位能实现最大价值的解,为背包问题提供了高效解决方案。
- 算法步骤:INPUT: n个物品的体积s[n]和价值v[n],背包容积C
OUTPUT: 所放物品的体积不超过背包容积C的条件下,最
大价值及其所放物品。1. 初始化n元布尔向量c[n],值为2;S ← C; V ← 0; maxv ← 02. k ←1 3. while k≥ 14. while c[k]>05. c[k] ← c[k] -16. if c[k]=1 then S=S-s[k]; V=V+v[k] endif7. if c[k]=0 then S=S+s[k]; V=V-v[k] endif8. if c为合法解 then9. if V>maxv then maxv ←V,记录当前c[] endif 10. else if c为部分解 then k k+1 11. endif 12. endwhile 13. c[k] ← 2 14. k ←k-1 15. end while 16. 输出maxv和解元组c[]
六、时间复杂度
在最坏情况下,回溯算法面临着极为庞大的计算量。以数字组合问题和排列问题为例,其算法可能生成 O (n^r) 和 O (n^n) 个节点。在处理每个节点时,分别需要执行 O (r) 或 O (n) 的检查工作,这直接导致算法的运行时间高达 O (rn^r) 和 O (n^n)。不同问题的时间复杂度受到多种因素影响,包括问题解空间的规模大小、约束条件的严苛程度以及剪枝策略的实际效果。例如,若约束条件足够严格,剪枝策略能够高效发挥作用,及时削减大量无效搜索分支,那么算法的实际运行时间将显著缩短,反之则可能趋近于最坏时间复杂度。
七、总结
回溯法作为一种极具威力的算法设计技术,在各类组合与排列问题的求解中占据着重要地位。其核心在于深度优先搜索状态空间树,并借助剪枝函数大幅减少不必要的搜索开销,显著提升算法效率。在实际应用场景中,根据问题的独特特性,合理定义解空间、准确确定约束集以及精心设计高效的剪枝策略,是充分发挥回溯法优势的关键所在。尽管在最坏情况下,回溯法的时间复杂度可能较高,但通过巧妙运用剪枝技巧,在众多实际问题中仍能获得令人满意的解决方案。无论是判定类问题(如判断是否存在解、寻找一个或所有解),还是最优化问题(追求最优解),回溯法都能大显身手。然而,随着问题规模的不断膨胀以及复杂性的持续提升,回溯法的效率与可行性将面临一定挑战。不过,在解决中等规模问题以及对解的准确性要求极高的场景中,回溯法依然具有不可替代的重要价值 。
相关文章:
算法设计:回溯法的基础原理与应用
目录 一、基本概念 二、适用问题 三、基本步骤 四、算法模式 递归回溯算法模式(求一个解) 非递归回溯算法模式(求一个解) 非递归回溯算法模式(求所有解) 五、经典应用 1数字组合问题 2数字排列问题…...
PyTorch 深度学习实战(23):多任务强化学习(Multi-Task RL)之扩展
之前的PyTorch 深度学习实战(23):多任务强化学习(Multi-Task RL)总结扩展运用代码如下: import torch import torch.nn as nn import torch.optim as optim import numpy as np from torch.distributions import Norm…...
音视频开发---视频编码基础
一、视频编码的必要性 1. 存储与传输成本高 未经编码压缩的原始视频的数据量极大,例如:一般电影的亮度信号采样频率为13.5MHz;色度信号的频带通常为亮度信号的一半或更少,为6.75MHz或3.375MHz。以4:2:2的采样频率为例,Y信号采用13.5MHz,色度信号U和V采用6.75MHz采样,…...
深入蜂窝物联网 第四章 Cat-1 与 5G RedCap:带宽、低时延与未来趋势
1. 前言与应用场景 随着物联网对带宽与时延的需求不断增长,LTE Cat-1 和 5G RedCap(Reduced Capability)应运而生: Cat-1:在传统 LTE 网络上提供最高 10 Mbps 下行、5 Mbps 上行,兼容性佳; 5G RedCap:在 5G NSA/SA 网络中提供 1–20 Mbps,时延可降至 10 ms 级,且模组…...
FPGA 39 ,FPGA 网络通信协议栈进阶,RGMII、ARP 与 UDP 协议与模块设计( RGMII、ARP、UDP原理与模块设计 )
目录 目录 一、核心原理 1.1 RGMII 接口:高效数据传输的物理桥梁 1.2 ARP 协议:IP 与 MAC 地址的动态映射引擎 1.3 UDP 协议:轻量级数据传输的高效选择 1.4 FPGA 实现流程 二、时序约束 2.1 时序约束理论…...
《系统分析师-第三阶段—总结(七)》
背景 采用三遍读书法进行阅读,此阶段是第三遍。 过程 本篇总结第13章第14章的内容 第13章 第14章 总结 系统设计分为概要设计与详细设计,然后重点讲解了处理流程设计,输入输出原型设计,面向对象设计、人机交互设计࿱…...
Lightroom 2025手机版:专业编辑,轻松上手
在摄影和图像编辑的世界里,Adobe Lightroom一直是一个不可或缺的工具。无论是专业摄影师还是摄影爱好者,都依赖它来提升照片的质量和视觉效果。今天,我们要介绍的 Lightroom 2025手机版,是Adobe公司为移动设备量身定制的照片编辑器…...
Cursor:AI时代的智能编辑器
在开发者社区掀起热潮的Cursor,正以破竹之势重塑编程工具格局。这款基于VS Code的AI优先编辑器,不仅延续了经典IDE的稳定基因,更通过深度集成的智能能力,将开发效率推向全新维度。2023年Anysphere公司获得的6000万美元A轮融资&…...
x86架构-k8s设置openebs的hostpath作为默认存储类的部署记录
文章目录 前言一、openebs是什么?二、准备步骤1.下载yaml文件2.准备一个新的单点k8s用于测试2.将openebs-operator.yaml中的镜像修改成使用国内加速源的 三、执行yaml1.openebs-operator.yaml2.local-hostpath-pvc.yaml和local-hostpath-pod.yaml 四、关于默认存储路…...
废品回收小程序:全链路数字化解决方案,赋能绿色未来
用户端:一键触达,便捷回收新体验 废品百科与估价指南:分类标准与实时价格一目了然,用户轻松掌握废品价值。一键预约,轻松回收:指尖轻点即可完成预约,上门服务省时省力。精准定位,导…...
Kotlin和JavaScript的对比
Kotlin和JavaScript有一些相似之处,但也存在显著的差异,下面从多个方面为你详细分析: 相似点 1. 语法灵活性 变量声明:二者在变量声明上都较为灵活。在JavaScript里,借助var、let和const可以声明变量。其中…...
蓝桥杯 5. 拼数
拼数 原题目链接 题目描述 给定 n 个正整数 a1, a2, …, an,你可以将它们任意排序。 现要将这 n 个数字连接成一排,即令相邻数字收尾相接,组成一个数。 问,这个数最大可以是多少。 输入格式 第一行输入一个正整数 n&#x…...
(即插即用模块-特征处理部分) 四十四、(2024 TGRS) FEM 特征增强模块
文章目录 1、Feature Enhancement Module2、代码实现 paper:FFCA-YOLO for Small Object Detection in Remote Sensing Images Code:https://github.com/yemu1138178251/FFCA-YOLO 1、Feature Enhancement Module 遥感图像中,小目标的特征通…...
“情况说明“以后,Unity XR 开发者如何选择?
Unity自4月7日发布了一系列“情况说明”,点进来的朋友应该都是看过的,此处不再赘述。此后引发了开发者社区的广泛关注和讨论。作为细分领域的XR开发者,此时也会面临着工具和版本的抉择或迷茫。笔者同样面临这些问题,因为要确定未来…...
c#版yolo可视化标注和一键免环境训练系统0429更新介绍
yolo免环境一键训练工具c#版yolo标注工具 ## 更新日志 - 2025.4.1: 1、软件上线 - 2025.4.6 1、调整界面,修复用户在1920*1080不能全部显示问题 2、修复 刷新当前目录 无法加载新增图片问题 3、新增 下一张图片快捷键 Enter或者ctrl↓&…...
Leetcode 3533. Concatenated Divisibility
Leetcode 3533. Concatenated Divisibility 1. 解题思路2. 代码实现 题目链接:3533. Concatenated Divisibility 1. 解题思路 这一题的话事实上如果我们原始的数组有序排列一下,然后依次考察每个元素是否可以被选用,此时,我们得…...
CosyVoice、F5-TTS、GPT-SoVITS、Fish-Speech声音模型项目深度对比:选型指南
在数字人、虚拟助手、智能客服等应用快速发展的背景下,文本转语音(TTS)和语音克隆技术已成为AI领域的核心技术之一。本文将对目前主流的四个开源语音合成项目——CosyVoice、F5-TTS、GPT-SoVITS 和 Fish-Speech进行全方位对比分析,…...
什么是DNS缓存?怎么清理DNS缓存?
在网络世界中,当我们输入一个网址想要访问某个网站时,计算机并不能直接识别“www.example.com”这样的网址,而是需要将其转换为对应的IP地址才能进行通信。这个转换过程由域名系统(DomainNameSystem,简称DNS࿰…...
基于STM32、HAL库的ATECC508A安全验证及加密芯片驱动程序设计
一、简介: ATECC508A是Microchip公司生产的一款加密认证芯片,提供以下主要特性: 基于硬件的ECDSA (Elliptic Curve Digital Signature Algorithm) 加密 支持SHA-256哈希算法 内置真随机数生成器(TRNG) 16个密钥存储槽位,可配置多种用途 支持I2C接口,最高1MHz时钟频率 超低…...
初中九年级学生体测准考证照片采集软件使用说明
随着中考体育测试的临近,各校陆续开始组织学生进行准考证照片、中考报名照片的采集工作。为方便学校集中采集和学生自主完成照片拍摄,本文将详细介绍使用"校园证件照采集平台"进行手机拍照线上采集的操作方法,帮助学校轻松完成体测…...
提供一些其他常见的字符串处理算法的Java示例
以下为你提供几种常见字符串处理算法的 Java 示例: 1. 字符串反转 反转字符串即把字符串中的字符顺序颠倒。 public class RemoveSpaces {public static String removeSpaces(String str) {return str.replaceAll("\\s", "");}public static…...
软件设计师-软考知识复习(2)
PERT图详解 PERT(Program Evaluation and Review Technique,计划评审技术)是一种用于项目管理的图形化工具,主要用于分析任务的时间安排、识别关键路径和优化资源分配。它特别适用于复杂项目,其中任务之间存在依赖关系…...
Qwen3快速部署 Qwen3-0.6B、Qwen3-8B、Qwen3-14B,Think Deeper
文章目录 0 Qwen31 平台与环境安装1 模型下载2 模型测试 0 Qwen3 今天,通义千问Qwen团队正式开源推出 Qwen3,这是 Qwen 系列大型语言模型的最新成员。最新的Qwen3系列模型具备双模推理能力(深入思考/快速响应)、支持119种语言及方…...
【C到Java的深度跃迁:从指针到对象,从过程到生态】第四模块·Java特性专精 —— 第十七章 IO流:超越FILE*的维度战争
一、从C文件操作到Java流的进化 1.1 C文件操作的原始挑战 C语言通过FILE*和低级文件描述符进行I/O操作,存在诸多限制: 典型文件复制代码: #include <stdio.h> int copy_file(const char* src, const char* dst) { FILE* in fope…...
Leetcode刷题记录22——滑动窗口最大值
题源:https://leetcode.cn/problems/sliding-window-maximum/description/?envTypestudy-plan-v2&envIdtop-100-liked 题目描述: 思路一: 暴力遍历法,通过一个长度为k的滑动窗口遍历nums,将其中最大的数依次记…...
React 第三十四节 Router 开发中 useLocation Hook 的用法以及案例详解
一、useLocation基础用法 作用:获取当前路由的 location 对象 返回对象结构: {pathname: "/about", // 当前路径search: "?namejohn", // 查询参数(URL参数)hash: "#contact", …...
BT134-ASEMI机器人功率器件专用BT134
编辑:LL BT134-ASEMI机器人功率器件专用BT134 型号:BT134 品牌:ASEMI 封装:TO-126 批号:最新 引脚数量:3 封装尺寸:如图 特性:双向可控硅 工作结温:-40℃~150℃…...
十五种光电器件综合对比——《器件手册--光电器件》
十五、光电器件 名称 原理 特点 应用 发光二极管(LED) 基于半导体材料的电致发光效应,当电流通过时,电子与空穴复合,释放出光子。 高效、节能、寿命长、响应速度快、体积小。 广泛用于指示灯、照明、显示&#…...
网络安全攻防演练实训室建设方案
一、引言 在数字化浪潮席卷全球的当下,网络已深度融入社会的各个层面,成为推动经济发展、社会进步和科技创新的关键力量。从日常生活中的移动支付、社交互动,到企业运营中的数据管理、业务拓展,再到国家关键基础设施的运行&#…...
极客天成受邀参加2050大会,共赴人工智能科技盛宴
2025年4月25日,备受瞩目的2050大会在杭州云栖小镇盛大开幕。作为科技领域的佼佼者,北京极客天成科技有限公司受邀参加了此次盛会,与全球科技爱好者共同探索科技的未来。 大会盛况空前,科技盛宴开启 2050大会是由杭州市云栖科技创…...
GUI_DrawPixel 函数详解
GUI_DrawPixel 是嵌入式GUI库中的基础像素绘制函数,用于在指定坐标绘制单个像素点。下面我将详细介绍这个函数的功能、实现和使用方法。 1. 函数功能 在显示屏的指定位置(x,y)绘制一个像素点 使用当前设定的颜色进行绘制 是构建所有高级图形(线、圆、…...
AWS MSK 集群升级前配置检查:保障升级平稳进行的关键步骤
在 AWS Managed Streaming for Apache Kafka (MSK) 集群升级之前,进行全面的配置检查至关重要。本文将介绍一个用于 MSK 升级前配置检查的 Bash 脚本,帮助您识别潜在的风险点,确保升级过程的顺利进行。 为什么需要升级前检查? AWS MSK 提供了自动升级功能,但在升级过程中,不…...
leetcode 2516. 每种字符至少取 K 个
题目描述 滑动窗口问题 可以转化为求按照题目要求从两端取走字符后,中间部分的最大长度。中间部分就是一个滑动窗口。 class Solution { public:int takeCharacters(string s, int k) {vector<int> count(3,0);int n s.size();for(int i 0;i <n;i){cou…...
通信原理第七版与第六版区别附pdf
介绍 我用夸克网盘分享了「通信原理 第7版》樊昌信」,链接:https://pan.quark.cn/s/be7c5af4cdce 《通信原理(第7版)》是在第6版的基础上,为了适应当前通信技术发展和教学需求,并吸取了数十所院校教师的反…...
CPU 空转解析
在编程中,“避免 CPU 空转” 指的是防止程序在等待某个条件满足时,无意义地消耗 CPU 资源。以下是对这一问题的详细解释: 1. 什么是 CPU 空转? 当代码中出现类似以下逻辑时: while not condition_met: # 循环检查条…...
云蝠智能大模型智能呼叫:赋能零售行业服务,助力客户增长
在数字化浪潮席卷全球的今天,零售行业正面临前所未有的变革压力。消费者需求日益个性化、市场竞争愈发激烈,传统的人工客服模式已难以满足企业对高效触达、精准营销和极致体验的需求。而云蝠智能大模型智能呼叫系统,凭借其突破性的AI技术和深…...
Consul安装部署(Windows环境)
部署资料链接:https://download.csdn.net/download/ly1h1/90722829 1.下载 Consul 1.访问 Consul 官方下载页面:Install | Consul | HashiCorp Developer 2.选择适合 Windows 的版本(如 consul_1.16.1_windows_amd64.zipÿ…...
Sql刷题日志(day7)
面试: 1、怎么样的数据挖取能真正对业务起到指导作用? 明确的业务目标:开始之前明确你想通过数据挖掘解决的业务问题。这些问题应具体、可量化,并与业务战略紧密相关。正确的数据集:确保使用的数据与你的业务问题相关…...
【MuJoCo仿真】开源SO100机械臂导入到仿真环境
主要参考:https://github.com/jpata/gym-so100/tree/integration/gym_so100/assets/trs_so_arm100 参考:(八)lerobot开源项目扩展so100的仿真操控(操作记录)_so100机械臂 仿真-CSDN博客 下载:…...
redis 有序集合zrange和zrangebyscore的区别
起因是查询数据,用了zrangebyscore 但是一直显示没数据 具体命令zrangebyscore key 0 -1 withscores, 原有印象中一直是这么用的,但是突然查不出来了, 于是搜了下问题所在。 通过分数查看 不能用0和-1表示最小和最大,只能用分数来…...
基于C#窗体+GDI+绘图实现分形树
实验:分形树 一. 引言 实验目的:继续学习C#窗体应用程序的图形化界面设计以及GDI绘图的一些基本指示,通过制作各种类型的分形树增强对于递归的理解,在创造分形图形的过程中感受编程的快乐 Tutorial任务 1.制作不同类型的分形图形(本次演示的是两种不同类型的分…...
使用Langchain+DeepSeep进行测试相关工作
1.使用BaseChatModel实现自定义DeepSeekLLM import json import typing from typing import Optional, Any, List, Dict, Union, Sequence, Callable, Literalimport requests from langchain_core.callbacks import CallbackManagerForLLMRun from langchain_core.language_m…...
Java练习6
一.题目 数字加密与解密 需求: 某系统的数字密码(大于 0),比如 1983,采用加密方式进行传输。 规则如下: 先得到每位数,然后每位数都加上 5,再对 10 求余,最后将所有数字反转,得到一…...
二叉树知识点
1、树形结构 1.1概念 二叉树属于树形结构,所以先了解树形结构之后,再学习二叉树。 树形结构是一种非线性的数据结,是由n个有限节点组成的一个具有层次关系的集合,其形状就像一棵到这的树,跟朝上,叶子朝下…...
neo4j暴露公网ip接口——给大模型联通知识图谱
特别鸣谢 我的领导,我的脑子,我的学习能力,感动了 1. 搭建知识图谱数据库(见上一章博客) 这里不加赘述了,请参考上一篇博客搭建 2. FastApi包装接口 这里注意:NEO4J_URI不得写http:,只能写…...
在阿里云实例上部署通义千问QwQ-32B推理模型
通义千问QwQ-32B是阿里云开源的320亿参数推理模型,通过大规模强化学习在数学推理、编程及通用任务中实现性能突破,支持消费级显卡本地部署,兼顾高效推理与低资源消耗。 本文将介绍如何利用vLLM作为通义千问QwQ-32B模型的推理框架,在一台阿里云GPU实例上构建通义千问QwQ-32…...
GEE进行Theil-Sen Median斜率估计和Mann-Kendall检验
介绍一下Theil-Sen Median斜率估计和Mann-Kendall趋势分析,这两种方法经常结合使用,前者用于估计趋势的斜率,后者用于检验趋势的显著性。如多年NPP或者NDVI的趋势分析。 主要介绍使用GEE实现这一内容的代码方法,若使用python&…...
WSL2下Docker desktop的Cadvisor容器监控
由于WSL2的Docker存放是在Linux的docker-desktop目录下,需要从这里面挂载到WSL2里的/var/lib/docker,并且正确挂载启动,才能使 Cadvisor 识别到docker容器并且监控资源。 首先需要在WSL2终端进行挂载操作: sudo mount -t drvfs \…...
深度学习---pytorch搭建深度学习模型(附带图片五分类实例)
一、PyTorch搭建深度学习模型流程 1. 环境准备 安装PyTorch及相关库: pip install torch torchvision numpy matplotlib2. 数据准备 数据集加载:使用内置数据集(如CIFAR-10)或自定义数据集。数据预处理:包括归一化…...
基于 STM32 的智慧图书馆智能控制系统设计与实现
一、系统架构概述 智慧图书馆智能控制系统集成环境调控、安全监控、借阅管理与信息推送功能,通过 STM32 主控芯片联动传感器、执行器及云平台,实现图书馆智能化管理。系统架构分为感知层(传感器)、控制层(STM32 主控)、执行层(继电器 / 显示屏)及云端层(数据交互),…...