数学建模之数学模型-3:动态规划
文章目录
- 动态规划
- 基本概念
- 阶段
- 状态
- 决策
- 策略
- 状态转移方程
- 指标函数
- 最优指标函数
- 动态规划的求解
- 前向算法
- 后向算法
- 二者比较
- 应用案例
- 一种中文分词的动态规划模型
- 摘要
- 引言
- 动态规划的分词模型
- 问题的数学描述
- 消除状态的后效性
- 选择优化条件
- 算法描述和计算实例
- 算法的效率分析和评价
- 结束语
- 参考文献
动态规划
基本概念
一个多阶段决策过程最优化问题的动态规划模型包括以下 6 6 6个要素:
以下是对动态规划中阶段、状态、决策、策略、状态转移方程、指标函数和最优指标函数这些基本概念更详细的解释:
阶段
- 阶段是对整个问题的求解过程进行的划分,将一个复杂的多阶段决策问题按照时间或空间等顺序,分解为一系列相互联系的子问题,每个子问题就是一个阶段。例如,在生产计划问题中,如果按照月份来安排生产,那么每个月就可以看作是一个阶段;在资源分配问题中,将资源依次分配给不同的项目,每分配一次资源就可以看作是一个阶段。通过这种划分,可以使问题的求解更加有条理和可操作。
状态
- 状态是描述每个阶段开始时系统所处状况的变量或变量组。它包含了在该阶段进行决策所需要的全部信息,并且具有无后效性,即一旦当前状态确定,后续的决策只取决于当前状态,而与之前是如何到达这个状态的过程无关。例如,在背包问题中,背包在每个阶段的剩余容量以及已经装入背包的物品组合情况就是状态;在最短路径问题中,某个节点表示的位置以及到达该节点时已经走过的路径长度等可以作为状态。
决策
- 决策是在每个阶段根据当前状态所做出的选择或决定。决策的结果会使系统从一个状态转移到另一个状态。例如,在背包问题中,决定是否将某个物品放入背包就是一个决策;在生产计划问题中,决定每个月生产多少产品也是决策。决策变量通常用数学符号表示,例如在资源分配问题中,设 x i x_i xi表示分配给第 i i i个项目的资源数量, x i x_i xi就是决策变量,它的取值范围和具体取值取决于问题的约束条件和实际情况。
策略
- 策略是由各个阶段的决策所组成的一个决策序列。它是从问题的初始阶段开始,依次经过各个中间阶段,直到最终阶段的全过程决策方案。一个策略对应着一条从初始状态到最终状态的路径。例如,在背包问题中,“先放入物品A,再放入物品C,不放入物品B”就是一个策略;在多阶段投资问题中,“第一个阶段投资项目1,第二个阶段将资金从项目1撤出并投资项目3,第三个阶段继续持有项目3的投资”也是一个策略。在所有可能的策略中,使指标函数达到最优值的策略称为最优策略。
状态转移方程
- 状态转移方程是描述从一个阶段的状态通过决策转移到下一个阶段状态的数学表达式。它体现了状态与决策之间的关系,是动态规划算法的核心。一般形式为 s k + 1 = T ( s k , x k ) s_{k + 1}=T(s_k, x_k) sk+1=T(sk,xk),其中 s k s_k sk表示第 k k k阶段的状态, x k x_k xk表示第 k k k阶段的决策, s k + 1 s_{k + 1} sk+1表示第 k + 1 k + 1 k+1阶段的状态, T T T是一个函数,表示状态转移的规则。例如,在库存管理问题中,设 s k s_k sk为第 k k k个月初的库存数量, x k x_k xk为第 k k k个月的生产量, d k d_k dk为第 k k k个月的需求量,则状态转移方程为 s k + 1 = s k + x k − d k s_{k + 1}=s_k + x_k - d_k sk+1=sk+xk−dk。
指标函数
- 指标函数是用于衡量每个阶段决策的优劣以及整个决策过程总体效果的函数。它是关于状态和决策的函数,通常表示为 V ( s k , x k , s k + 1 , ⋯ , s n ) V(s_k, x_k, s_{k + 1}, \cdots, s_n) V(sk,xk,sk+1,⋯,sn),其中 s k , s k + 1 , ⋯ , s n s_k, s_{k + 1}, \cdots, s_n sk,sk+1,⋯,sn是从第 k k k阶段到最终阶段的状态序列, x k x_k xk是第 k k k阶段的决策。指标函数的形式根据具体问题而定,例如在背包问题中,指标函数可以是装入背包的物品总价值;在生产计划问题中,指标函数可以是生产成本、库存成本等各种成本的总和;在最短路径问题中,指标函数可以是路径的长度。
最优指标函数
- 最优指标函数是指从某个阶段的某个状态开始到过程结束的最优指标值所对应的函数,记为 f k ( s k ) f_k(s_k) fk(sk)。它表示在第 k k k阶段处于状态 s k s_k sk时,采取最优策略所能获得的最优指标值。例如,在背包问题中, f k ( s k ) f_k(s_k) fk(sk)表示在第 k k k个物品选择阶段,背包剩余容量为 s k s_k sk时,能获得的最大价值;在生产计划问题中, f k ( s k ) f_k(s_k) fk(sk)表示在第 k k k个月初库存为 s k s_k sk时,从第 k k k个月到最后一个月的最小成本。最优指标函数通常通过动态规划的递推关系来求解,即利用已知的后续阶段的最优指标函数值来计算当前阶段的最优指标函数值,逐步向前递推,直到求出初始阶段的最优指标函数值,从而得到整个问题的最优解。
动态规划的求解
动态规划的求解方法有前向算法和后向算法。
动态规划的前向算法和后向算法是求解动态规划问题的两种重要方法,以下从基本思想、计算过程和应用实例等方面进行介绍:
前向算法
- 基本思想:前向算法是从问题的初始阶段开始,逐步向后推进,依次计算每个阶段的最优解,直到到达最终阶段。它基于这样的原理:对于一个多阶段决策问题,先确定第一个阶段的最优决策,然后在已知第一个阶段最优决策的基础上,确定第二个阶段的最优决策,以此类推,直到确定最后一个阶段的最优决策,从而得到整个问题的最优解。
- 计算过程
- 初始化:确定初始阶段的状态和最优指标函数值。例如,在一个资源分配问题中,假设初始阶段资源总量为 R R R,则初始状态可以表示为 s 1 = R s_1 = R s1=R,并根据问题的具体情况确定 f 1 ( s 1 ) f_1(s_1) f1(s1)的值,即初始阶段的最优指标函数值。
- 递推计算:对于第 k k k阶段( k > 1 k > 1 k>1),根据状态转移方程和指标函数的定义,利用已经计算出的第 k − 1 k - 1 k−1阶段的最优指标函数值 f k − 1 ( s k − 1 ) f_{k - 1}(s_{k - 1}) fk−1(sk−1)来计算 f k ( s k ) f_k(s_k) fk(sk)。即对于每个可能的状态 s k s_k sk和决策 x k x_k xk,计算 f k ( s k ) = max x k { V ( s k − 1 , x k ) + f k − 1 ( s k − 1 ) } f_k(s_k)=\max_{x_k}\{V(s_{k - 1}, x_k)+f_{k - 1}(s_{k - 1})\} fk(sk)=maxxk{V(sk−1,xk)+fk−1(sk−1)},其中 V ( s k − 1 , x k ) V(s_{k - 1}, x_k) V(sk−1,xk)是第 k − 1 k - 1 k−1阶段状态为 s k − 1 s_{k - 1} sk−1时采取决策 x k x_k xk所获得的阶段指标值。
- 得到最优解:重复上述递推过程,直到计算出最后一个阶段 n n n的最优指标函数值 f n ( s n ) f_n(s_n) fn(sn),此时 f n ( s n ) f_n(s_n) fn(sn)就是整个问题的最优解,对应的决策序列就是最优策略。
- 应用实例:在投资决策问题中,假设你有一定的资金,要在多个时间段内决定对不同项目的投资金额,以获取最大收益。可以使用前向算法,从第一个时间段开始,依次计算在每个时间段不同资金状态下的最优投资策略和最大收益,最终得到整个投资过程的最优方案。
后向算法
- 基本思想:后向算法则是从问题的最终阶段开始,逐步向前回溯,依次计算每个阶段的最优解。它的核心思想是先考虑最后一个阶段的最优决策,然后在已知最后一个阶段最优决策的情况下,确定倒数第二个阶段的最优决策,以此类推,直到确定第一个阶段的最优决策,从而得到整个问题的最优解。
- 计算过程
- 初始化:确定最终阶段的状态和最优指标函数值。例如,在一个生产计划问题中,假设最后一个阶段 n n n的需求为 D n D_n Dn,生产能力为 C n C_n Cn,则最终阶段的状态可以表示为 s n = D n s_n = D_n sn=Dn,并根据问题的实际情况确定 f n ( s n ) f_n(s_n) fn(sn)的值,即最终阶段的最优指标函数值,通常 f n ( s n ) = 0 f_n(s_n)=0 fn(sn)=0或根据具体问题有特定的取值。
- 递推计算:对于第 k k k阶段( k < n k < n k<n),根据状态转移方程和指标函数的定义,利用已经计算出的第 k + 1 k + 1 k+1阶段的最优指标函数值 f k + 1 ( s k + 1 ) f_{k + 1}(s_{k + 1}) fk+1(sk+1)来计算 f k ( s k ) f_k(s_k) fk(sk)。即对于每个可能的状态 s k s_k sk和决策 x k x_k xk,计算 f k ( s k ) = max x k { V ( s k , x k ) + f k + 1 ( s k + 1 ) } f_k(s_k)=\max_{x_k}\{V(s_k, x_k)+f_{k + 1}(s_{k + 1})\} fk(sk)=maxxk{V(sk,xk)+fk+1(sk+1)},其中 V ( s k , x k ) V(s_k, x_k) V(sk,xk)是第 k k k阶段状态为 s k s_k sk时采取决策 x k x_k xk所获得的阶段指标值, s k + 1 = T ( s k , x k ) s_{k + 1}=T(s_k, x_k) sk+1=T(sk,xk)是状态转移方程。
- 得到最优解:重复上述递推过程,直到计算出第一个阶段的最优指标函数值 f 1 ( s 1 ) f_1(s_1) f1(s1),此时 f 1 ( s 1 ) f_1(s_1) f1(s1)就是整个问题的最优解,对应的决策序列就是最优策略。
- 应用实例:在背包问题中,假设有一个容量为 W W W的背包和 n n n个物品,每个物品有重量和价值。使用后向算法,从最后一个物品开始考虑,依次计算在不同背包剩余容量状态下,选择不同物品组合时的最大价值,最终确定在初始背包容量为 W W W时的最优物品选择方案。
二者比较
- 计算顺序:前向算法是从前往后计算,先处理初始阶段,逐步向后推进;后向算法是从后往前计算,先处理最终阶段,逐步向前回溯。
- 适用场景:一般来说,当前阶段的决策依赖于之前阶段的结果,且问题的初始条件明确时,前向算法可能更自然和直观;而当问题的最终状态比较明确,且后续阶段的决策对当前阶段有较大影响时,后向算法可能更便于理解和计算。
应用案例
一种中文分词的动态规划模型
贾利新
信息工程大学
摘要
基于动态规划,利用反向搜索的方法,通过计算词语的最大“花费”给出了中文文本的切分算法,从而建立了一个能够消除中文分词中切分歧义的中文分词模型。通过对模型中算法求解的运行效率及空间耗费进行分析得出,在统计意义上,该算法具有接近与文本规模成线性关系的复杂度,空间的耗费是常数规模的。
关键词: 自然语言;动态规划;算法;分词
引言
自动分词是计算机中文信息处理领域中一个基础而困难的课题。对以英文为代表的西方语言进行分词比较便利,因为在这些语言中,其基础单位是单词,单词与单词之间有空格,按空格就能对语言进行切分。而中文词与词之间没有空格,机器的自动处理就会变得困难。
中文分词中比较难处理的问题是消除歧义。文献 [1] 描述了多种实用的字符串搜索方法,文献 [2, 3] 介绍了动态规划建模的普遍方法,文献 [4] 介绍了一种采用“长词优先”的方法消除歧义。本文采用动态规划,用反向搜索的方法,通过计算对词语描述“花费”的最大值,来切分中文文本。
动态规划的分词模型
问题的数学描述
设汉字的字符集为 σ \sigma σ,在本文中 x y xy xy 表示字符串 x x x 和 y y y 的拼接。给定字符串 x x x、 y y y、 z z z,则 x x x 是 x y xy xy 的前缀, y y y 是 x y xy xy 的后缀, x x x 是 y x z yxz yxz 的一个因子。
要分析的文本可以表述为:
T = a 1 a 2 ⋯ a n , a i ∈ σ , i = 1 , 2 , ⋯ , n T = a_1a_2\cdots a_n, \quad a_i \in \sigma, \quad i = 1, 2, \cdots, n T=a1a2⋯an,ai∈σ,i=1,2,⋯,n
设 P = { ( ω , V ( ω ) ) ∣ ω 表示字符串 , V ( ω ) ∈ R + } P = \{ (\omega, V(\omega)) \mid \omega \text{ 表示字符串}, V(\omega) \in \mathbb{R}^+ \} P={(ω,V(ω))∣ω 表示字符串,V(ω)∈R+}, V ( ω ) V(\omega) V(ω) 表示词语 ω \omega ω 的花费。“花费”是对词语的词频取对数的绝对值得到的。因为后面计算用到的乘法使得积的位数过大,所以通过取对数,把词频的乘法计算变成了对“花费”的加法计算。
以词语“汽车和服装”为例,表 1 给出了这个词语中元素前后搭配的权重关系,竖向字符在前,横向字符在后。
| 汽 | 车 | 和 | 服 | 装 | |
|---|---|---|---|---|---|
| 汽 | 1 | 3 | 1 | 1 | 1 |
| 车 | 1 | 1 | 1 | 1 | 1 |
| 和 | 1 | 1 | 1 | 1 | 1 |
| 服 | 1 | 1 | 2 | 1 | 3 |
| 装 | 1 | 3 | 1 | 1 | 1 |
表 1:词语中元素前后搭配的权重关系表
将词语按照从样本中统计出的“花费”进行排序,经过整理得到词语的转移关系,示例见表 2。
| 词语组合 | 花费 |
|---|---|
| 汽,车 | 3.0 |
| 和,服 | 2.0 |
| 服,装 | 3.0 |
| 装,车 | 3.0 |
表 2:词语的转移关系表
用 V ( a 1 , a 2 ) V(a_1, a_2) V(a1,a2) 表示词组的“花费”。从表 2 可以看出,存在以下有效的花费: V ( 汽 , 车 ) = 3.0 V(\text{汽}, \text{车}) = 3.0 V(汽,车)=3.0, V ( 和 , 服 ) = 2.0 V(\text{和}, \text{服}) = 2.0 V(和,服)=2.0, V ( 服 , 装 ) = 3.0 V(\text{服}, \text{装}) = 3.0 V(服,装)=3.0, V ( 装 , 车 ) = 3.0 V(\text{装}, \text{车}) = 3.0 V(装,车)=3.0,其他的组合不构成词组。分词问题就是将文本 T T T 规划成由多个词语组成的排列,以 T = ω 1 ω 2 ω 3 ⋯ ω l T = \omega_1\omega_2\omega_3\cdots\omega_l T=ω1ω2ω3⋯ωl 表示, l l l 为切分后的词语数,使得指标函数:
V ( T ) = ∑ i = 1 l V ( ω i ) , ( ω i , V ( ω i ) ) ∈ P V(T) = \sum_{i = 1}^l V(\omega_i), \quad (\omega_i, V(\omega_i)) \in P V(T)=i=1∑lV(ωi),(ωi,V(ωi))∈P
取到全局最大值。
消除状态的后效性
用一个状态转换的自动机来处理文本。对于文本 T = a 1 a 2 a 3 ⋯ a n T = a_{1}a_{2}a_{3}\cdots a_{n} T=a1a2a3⋯an,从文本的开始起,在第 k k k 个位置,读入字符 a k a_{k} ak,状态进行相应的变化。用 s k s_{k} sk 表示当处于读入字符 a k a_{k} ak 时的状态, s k s_{k} sk 中包含了多个可选的元素,每个元素表示一种待选切分序列。通过设计决策函数和筛选条件,保证序列的马尔可夫性,从而消除后效性。
选择优化条件
通过设计决策函数、筛选条件和递推公式,实现动态规划的最优化。状态转移方程为:
s k + 1 = s k ∪ { u ( s k ) u ‾ ( s k ) } − { ( U 1 ∩ U 2 ) ∪ ( U 1 ∩ U 3 ) } s_{k + 1}=s_{k} \cup \{u(s_{k})\overline{u}(s_{k})\}-\{(U_{1} \cap U_{2}) \cup (U_{1} \cap U_{3})\} sk+1=sk∪{u(sk)u(sk)}−{(U1∩U2)∪(U1∩U3)}
指标函数和递推公式为:
v k ( s k , u k ) = { 0 , U 1 ∩ U 2 = ∅ V ( u k ( s k ) ) , U 1 ∩ U 2 ≠ ∅ v_{k}(s_{k}, u_{k})=\begin{cases} 0, & U_{1} \cap U_{2}=\varnothing \\ V(u_{k}(s_{k})), & U_{1} \cap U_{2} \neq \varnothing \end{cases} vk(sk,uk)={0,V(uk(sk)),U1∩U2=∅U1∩U2=∅
f k ( s k ) = v k ( s k , u k ) + f k − 1 ( s k − 1 ) f_{k}(s_{k})=v_{k}(s_{k}, u_{k})+f_{k - 1}(s_{k - 1}) fk(sk)=vk(sk,uk)+fk−1(sk−1)
算法描述和计算实例
算法步骤如下:
- 设定初始状态;
- 读入一个字符,若为终结符则输出结果,否则继续;
- 计算当前步骤的决策函数;
- 排除非最优中间方案,存储可选切分方案;
- 重复执行步骤 2-4。
以“汽车和服装$”为例,算法运行过程如下:
- 初始状态 f 0 ( s 0 ) = 0 f_0(s_0) = 0 f0(s0)=0,读入“汽”字, s 1 = { ( 汽 ) } s_1 = \{(\text{汽})\} s1={(汽)};
- 读入“车”字, s 2 = { ( 汽 , 车 ) , ( 汽车 ) } s_2 = \{(\text{汽}, \text{车}), (\text{汽车})\} s2={(汽,车),(汽车)};
- 读入“和”字, s 3 = { ( 汽车 , 和 ) , ( 汽 , 车和 ) } s_3 = \{(\text{汽车}, \text{和}), (\text{汽}, \text{车和})\} s3={(汽车,和),(汽,车和)};
- 读入“服”字, s 4 = { ( 汽 , 车 , 和 , 服 ) , ( 汽 , 车 , 和服 ) } s_4 = \{(\text{汽}, \text{车}, \text{和}, \text{服}), (\text{汽}, \text{车}, \text{和服})\} s4={(汽,车,和,服),(汽,车,和服)};
- 读入“装”字, s 5 = { ( 汽 , 车 , 和 , 服装 ) } s_5 = \{(\text{汽}, \text{车}, \text{和}, \text{服装})\} s5={(汽,车,和,服装)};
- 读入终结符“$”,输出结果“汽车 和 服装”。
算法的效率分析和评价
该动态规划模型的时间复杂度接近线性 O ( N ) O(N) O(N),空间复杂度为常数级,适合处理大规模文本。其优点包括流式处理能力和对长文本的高效支持,尤其适用于搜索引擎等场景。词频统计过程需独立运行,但结果可复用。
结束语
本文提出了一种基于动态规划的中文分词模型,通过局部极值优化和状态筛选,有效消除切分歧义。该模型具有实践意义,但实际应用和性能评测仍需进一步研究。
参考文献
- Navarro G, Raffinot M. Flexible pattern matching in string: practical on - line search algorithms for texts and biological sequences[M]. 中科院计算所网络信息安全研究组译. 北京: 电子工业出版社, 2007.
- 运筹学教材编写组. 运筹学[M]. 北京: 清华大学出版社, 2005: 191 - 203.
- 韩中庚. 数学建模方法及其应用[M]. 北京: 高等教育出版社, 2005: 220 - 237.
- 王显芳, 杜利民. 一种能够检测所有交叉歧义的汉语分词算法[J]. 电子学报, 2004, 32(1): 51 - 54.
相关文章:
数学建模之数学模型-3:动态规划
文章目录 动态规划基本概念阶段状态决策策略状态转移方程指标函数最优指标函数 动态规划的求解前向算法后向算法二者比较 应用案例 一种中文分词的动态规划模型摘要引言动态规划的分词模型问题的数学描述消除状态的后效性选择优化条件 算法描述和计算实例算法的效率分析和评价结…...
Amazon Quantum Ledger Database (QLDB):革新数据可信记录的终极解决方案
在数字化浪潮中,企业数据的安全性与可信性成为核心挑战。无论是金融交易的透明审计、供应链的全程追踪,还是医疗记录的真实性验证,如何确保数据不可篡改且可追溯,已成为企业亟待解决的难题。Amazon Quantum Ledger Database (QLDB…...
Navicat SqlServer 设置自增主键
Navicat是一款优秀的数据库管理工具,可以连接很多类型的数据库。使用它可以极大的提高工作效率。 Navicat 不能设置SqlServer自增字段,只能通过sql语句来实现 建表时设置 create table <表名> ( <字段1-主键> int identity (1,1) primar…...
开源后台管理系统推荐
前言 在当今数字化时代,企业和组织对于管理和运营资源的需求日益增加。开源后台管理系统应运而生,为用户提供了一个灵活、可定制化的管理平台。本文将介绍开源后台管理系统的概念和优势,探讨常见的开源后台管理系统,以及如何选择…...
韦伯望远镜的拉格朗日点计算推导过程,包含MATLAB和python运动轨迹仿真代码
研究过程 起源与提出:1687 年牛顿提出 “三体问题”,旨在研究三个可视为质点的天体在相互之间万有引力作用下的运动规律,但因运动方程过于复杂,难以得到完全解。欧拉的贡献1:1767 年,瑞士数学家莱昂哈德・…...
iOS OC匹配多个文字修改颜色和字号
1、传入字符串数组,通过NSMutableAttributedString修改匹配文字 可以根据需要搞成匹配单个字符串 - (NSAttributedString *)applyFontSizeToText:(NSString *)text matchStrings:(NSArray<NSString *> *)matchStrings {NSMutableAttributedString *attribut…...
编程助手学Python--Deepseek对OpenAI的Python库调用GPT-4模型生成对话回复理解
编程助手学Python--Deepseek对OpenAI的Python库调用GPT-4模型生成对话回复理解 1. 导入库2. 设置环境变量3. 打印环境变量4. 配置 OpenAI API5. 打印 API 配置6. 定义对话消息7. 调用 OpenAI API8. 打印 API 响应9. 提取并打印生成的回复10. 代码总结11. 注意事项12. 完整代码示…...
计算机的物理组成——微机的物理结构
对于用户和维修人员来说,最重要的是微机实际物理结构,即组成微机的各个部件,通俗来说,他由主机、键盘、鼠标、显示器等部分组成。(在 计算机基础知识——微机系统 中已经介绍了微机的主机部分) PC 系列微机…...
STM32 RS232通信开发全解析 | 零基础入门STM32第五十九步
主题内容教学目的/扩展视频RS232串口电路原理,跳线设置,驱动程序。与超级终端通信。了解电路原理和RS232协议。 师从洋桃电子,杜洋老师 📑文章目录 一、RS232通信系统架构二、RS232核心原理与硬件设计2.1 电气特性对比2.2 典型电路…...
C# net deepseek RAG AI开发 全流程 介绍
deepseek本地部署教程及net开发对接 步骤详解:安装教程及net开发对接全流程介绍 DeepSeekRAG 中的 RAG,全称是 Retrieval-Augmented Generation(检索增强生成),是一种结合外部知识库检索与大模型生成能力的技术架构。其…...
建筑管理(2): 施工承包模式,工程监理,质量监督
文章目录 一. 施工承包模式1. 施工总承包模式1.1 施工总承包的特点1.2 施工总承包模式中的承包方 2. 平行承包模式3. 联合体与合作体承包模式 二. 工程监理1. 强制实行监理的工程范围1.1 国家重点建设工程1.2 大中型公用事业工程(重点)1.3 成片开发建设的住宅小区工程1.4 必须实…...
最节省服务器,手搓电子证书查询系统
用户预算150元,想要一个最简单证书查询系统。前台能查询证书、后台管理员能登录能修改密码,证书能够手动输入修改删除、批量导入导出删除数据、查询搜索。能够兼容苹果、安卓、PC三端浏览器,最后帮忙部署到云服务器上。 用户预算不多…...
Go string 字符串底层逻辑
在 Go 语言中,string 类型的底层结构是一个结构体,包含两个字段:一个指向字节数组的指针和该字节数组的长度。以下是其在 Go 源码中的大致定义:type stringStruct struct {str unsafe.Pointerlen int } str:这是一个指…...
STM32F407 IIC通信
1、IIC 介绍 IIC(Inter-Integrated Circuit)总线是一种由数据线 SDA 和时钟线 SCL 构成的两线式串行总线,可发送和接收数据,常用于 MPU/MCU 与外部设备连接通信、数据传输。每个连接到总线的设备都有一个独立的地址,主机可以通过该地址来访问不同设备。因为 IIC 协议比较简单…...
【论文阅读方法】沐神课程:如何读论文
一篇论文的一般结构 titleabstractintroductionmethodexperienceconclusion 三明治论文阅读法 第一遍:海选 titleabstractconclusion——确定要不要读第二遍:精读 对整个文章过一遍,知道每一块在做什么 可以从标题开始读到最后,注…...
机器人基础知识
在机器人学中,“inverse dynamics”(逆动力学)和 “forward dynamics”(正向动力学)是两个核心概念,它们帮助我们理解和计算机器人如何移动以及需要应用什么样的力来实现这些移动。 Inverse Dynamics&#…...
jupyter无法转换为PDF,HTMLnbconvert failed: Pandoc wasn‘t found.
无法转为PDF 手动下载工具 https://github.com/jgm/pandoc/releases/tag/3.6.3 似乎跟我想的不大一样,还有新的报错 https://nbconvert.readthedocs.io/en/latest/install.html#installing-tex 不知道下的啥玩意儿 sudo apt-get install texlive-xetex texlive-fon…...
Python高级算法与数据结构优化实战
Python高级算法与数据结构优化实战 在算法竞赛中,掌握高级优化技巧和数据结构实现可以显著提升解题效率和代码性能。本文深入探讨Python中常见算法问题的高效实现方法,通过实际比赛案例展示如何优化时间复杂度和空间复杂度。 一、前缀和与差分数组 前缀和与差分数组是算法…...
使用 Excel 实现绩效看板的自动化
引言 在日常工作中,团队的绩效监控和管理是确保项目顺利进行的重要环节。然而,面临着以下问题: 数据分散:系统中的数据难以汇总,缺乏一个宏观的团队执行情况视图。看板缺失:系统本身可能无法提供合适…...
Tomcat新手登峰指南:从零到部署的原子化实践
开篇:为什么选择Tomcat? 2024年StackOverflow调查显示,Tomcat以68.9%占有率蝉联Java Web服务器榜首。但新手常陷入三大误区: 直接使用IDE内置Tomcat导致生产环境配置失准权限配置不当引发安全漏洞内存参数未优化造成性能瓶颈 本…...
vue3怎么和大模型交互?
引言 平时我们都是用的在线的AI工具,直接输入问题,然后AI回答我们,那么怎么把AI接入项目中呢? 这个问题问得好。 方案一:引入第三方已封装好的UI库方案二:自己写 对于方案一,市面上已有一些…...
【网络编程】HTTP网络编程
13.1 HTTP 简介 HTTP(Hyper Text Transfer Protocol,超文本传输协议)是用于从万维网(WWW:World Wide Web) 服务器(简称Web 服务器)传输超文本到本地浏览器的传送协议,基于TCP/IP 通信协 议来传递数据 (HTML 文件、图片文件、查询结果等)。 13.2 HTTP 的工作原理 …...
【Qt】QWidget属性介绍
🏠个人主页:Yui_ 🍑操作环境:Qt Creator 🚀所属专栏:Qt 文章目录 前言1. enabled属性2.geometry属性2.1 改变控件位置2.2 女神表白程序2.3 知识补充——window frame 3. windowsTitle属性4. windowIcon属性…...
『Rust』Rust运行环境搭建
文章目录 rust编译工具rustupVisual Studio VS Code测试编译手动编译VSCode编译配置 参考完 rust编译工具rustup https://www.rust-lang.org/zh-CN/tools/install 换源 RUSTUP_DIST_SERVER https://rsproxy.cn RUSTUP_UPDATE_ROOT https://rsproxy.cn修改rustup和cargo的安…...
vue/react/vite前端项目打包的时候加上时间最简单版本,防止后端扯皮
如果你是vite项目,直接写一个vite的插件,通过这个插件可以动态注入环境变量,然后当打包的时候,自动注入这个时间到环境变量中,然后在项目中App.vue中或者Main.tsx中打印出来,这就知道是什么时候编译的项目了…...
基于大模型的上睑下垂手术全流程预测与方案优化研究报告
目录 一、引言 1.1 研究背景与目的 1.2 研究意义 1.3 研究方法与创新点 二、上睑下垂相关理论基础 2.1 上睑下垂的定义与分类 2.2 发病机制与影响 2.3 传统治疗方法概述 三、大模型技术原理与应用 3.1 大模型概述 3.2 在医疗领域的应用现状 3.3 用于上睑下垂预测的…...
Cadence学习笔记3
设置 PCB 层叠 初始我们有一个两层板,如果需要添加层叠怎么办? 点击进入层叠设置 首先右击 TOP 层下面的空白,然后鼠标右键进行 add layer 然后选择 Plane(一般层就是这个) 就好 然后 add就行 设置光标显示形式 在 setup ->…...
Linux系统下如何部署svmspro平台
上传svmspro服务 rz回车后选择svmspro.zip上传如果提示rz命令未找到,请先运行 yum install -y lrzsz 安装将svmspro.zip解压出来,并拷贝到/usr/目录下,命令如下: unzip svmspro.zip//解压程序包cp svmspro /usr/ -r//将svmspro文件…...
vue3:八、登录界面实现-忘记密码
一、页面效果 二、实现 1、视图层 <el-form-item class"flex flex-between"><el-checkbox label"记住密码" v-model"remember" /> </el-form-item> 参考 Checkbox 多选框 | Element Plus 2、逻辑层 首先设置记住密码的变…...
el-table树形表格合并相同的值
el-table树形表格合并相同的值 el-table树形表格合并相同的值让Ai进行优化后的代码 el-table树形表格合并相同的值 <style lang"scss" scoped> .tableBox {/deep/ &.el-table th:first-child,/deep/ &.el-table td:first-child {padding-left: 0;} } …...
