【算法设计与分析】分治-时间复杂度计算

news2025/2/23 11:03:14

目录

  • 主定理 Master Theorem
      • 分治算法运行时间的递归表示
      • 主定理的简化形式
    • 主定理的一般形式
  • 递归树 Recursion Tree
    • 递归树的简单结论

主定理 Master Theorem

分治算法运行时间的递归表示

将原问题分解成 a 个子问题递归求解,每个子问题的规模是原问题的 1/b。同时子问题合并成原问题的时间为 n c n^c nc ,n 是原问题的规模。

对应的时间复杂度表达式: T ( n ) = a T ( n / b ) + O ( n c ) T(n) = aT(n/b) + O(n^c) T(n)=aT(n/b)+O(nc) ,对应的要求 a > = 1 a >=1 a>=1 b > = 2 b>=2 b>=2 c > = 0 c>=0 c>=0

主定理的简化形式

T ( n ) = a T ( n / b ) + O ( n c ) T(n) = aT(n/b) + O(n^c) T(n)=aT(n/b)+O(nc) ,要求 a > = 1 a >=1 a>=1 b > = 2 b>=2 b>=2 c > = 0 c>=0 c>=0 T ( 1 ) = O ( 1 ) T(1) = O(1) T(1)=O(1)

  • 如果 a < b c a < b^c a<bc,那么 T ( n ) = O ( n c ) T(n) = O(n^c) T(n)=O(nc)
  • 如果 a = b c a = b^c a=bc,那么 T ( n ) = O ( n c l o g n ) T(n) = O(n^clogn) T(n)=O(nclogn)
  • 如果 a > b c a > b^c a>bc,那么 T ( n ) = O ( n l o g b a ) T(n) = O(n^{log_ba}) T(n)=O(nlogba)

二分搜索

时间复杂度: T ( n ) = T ( n / 2 ) + 1 T(n)=T(n/2)+1 T(n)=T(n/2)+1
a = 1 a=1 a=1 b = 2 b=2 b=2 c = 0 c=0 c=0
对应 a = b c a=b^c a=bc,因此 T ( n ) = n 0 l o g n = l o g n T(n)=n^0logn=logn T(n)=n0logn=logn

归并排序

时间复杂度: T ( n ) = 2 T ( n / 2 ) + O ( n ) T(n)=2T(n/2)+O(n) T(n)=2T(n/2)+O(n)
a = 2 a=2 a=2 b = 2 b=2 b=2 c = 1 c=1 c=1
对应 a = b c a=b^c a=bc,因此 T ( n ) = n 1 l o g n = n l o g n T(n)=n^1logn=nlogn T(n)=n1logn=nlogn

多项式乘法(直接分治)

时间复杂度: T ( n ) = 4 T ( n / 2 ) + O ( n ) T(n)=4T(n/2)+O(n) T(n)=4T(n/2)+O(n)
a = 4 a=4 a=4 b = 2 b=2 b=2 c = 1 c=1 c=1
对应 a > b c a>b^c a>bc,因此 T ( n ) = n l o g 2 4 = n 2 T(n)=n^{log_24}=n^2 T(n)=nlog24=n2

多项式乘法(递归优化,Karatsuba算法)

时间复杂度: T ( n ) = 3 T ( n / 2 ) + O ( n ) T(n)=3T(n/2)+O(n) T(n)=3T(n/2)+O(n)
a = 3 a=3 a=3 b = 2 b=2 b=2 c = 1 c=1 c=1
对应 a > b c a>b^c a>bc,因此 T ( n ) = n l o g 2 3 = n 1 . 58 T(n)=n^{log_23}=n^1.58 T(n)=nlog23=n1.58

矩阵乘法(直接分治)

时间复杂度: T ( n ) = 8 T ( n / 2 ) + O ( n 2 ) T(n)=8T(n/2)+O(n^2) T(n)=8T(n/2)+O(n2)
a = 8 a=8 a=8 b = 2 b=2 b=2 c = 2 c=2 c=2
对应 a > b c a>b^c a>bc,因此 T ( n ) = n l o g 2 8 = n 3 T(n)=n^{log_28}=n^3 T(n)=nlog28=n3

矩阵乘法(Strassen算法)
时间复杂度: T ( n ) = 7 T ( n / 2 ) + O ( n 2 ) T(n)=7T(n/2)+O(n^2) T(n)=7T(n/2)+O(n2)
a = 7 a=7 a=7 b = 2 b=2 b=2 c = 2 c=2 c=2
对应 a > b c a>b^c a>bc,因此 T ( n ) = n l o g 2 7 = n 2.81 T(n)=n^{log_27}=n^{2.81} T(n)=nlog27=n2.81

主定理的一般形式

一般 主定理的简化形式 可以满足大部分的分治算法的时间复杂度分析,但是也存在 简化主定理 不适用的情况:

  • 子问题数量不是常数:
    • T ( n ) = n T ( n / 2 ) + O ( n 2 ) T(n) = nT(n/2) + O(n^2) T(n)=nT(n/2)+O(n2)
  • 子问题数量小于1:
    • T ( n ) = 1 / 2 T ( n / 2 ) + O ( n 2 ) T(n) = 1/2 T(n/2) + O(n^2) T(n)=1/2T(n/2)+O(n2)
  • 分解原问题与合并子问题的总时间并不是 n c n^c nc
    • T ( n ) = 2 T ( n / 2 ) + O ( n l o g n ) T(n) = 2T(n/2) + O(nlogn) T(n)=2T(n/2)+O(nlogn)

因此,使用更广泛的主定理的一般形式:

T ( n ) = a T ( n / b ) + f ( n ) T(n) = aT(n/b) + f(n) T(n)=aT(n/b)+f(n) ,要求 a > 0 a > 0 a>0 b > 1 b>1 b>1 T ( 1 ) = O ( 1 ) T(1) = O(1) T(1)=O(1)

  • 如果 ∃ ϵ > 0 ∃ϵ > 0 ϵ>0 使 f ( n ) = O ( n l o g b a − ϵ ) f(n) = O(n^{log_ba-ϵ}) f(n)=O(nlogbaϵ),那么 T ( n ) = Θ ( n l o g b a ) T(n) = Θ(n^{log_ba}) T(n)=Θ(nlogba)
  • 如果 ∃ k > = 0 ∃k >= 0 k>=0 使 f ( n ) = O ( n l o g b a l o g k n ) f(n) = O(n^{log_ba}log^kn) f(n)=O(nlogbalogkn),那么 T ( n ) = Θ n l o g b a l o g k + 1 n ) T(n) = Θn^{log_ba}log^{k+1}n) T(n)=Θnlogbalogk+1n)
  • 如果 ∃ ϵ > 0 ∃ϵ > 0 ϵ>0 使 f ( n ) = Ω ( n l o g b a + ϵ ) f(n) = Ω(n^{log_ba+ϵ}) f(n)=Ω(nlogba+ϵ),且对于某个常数 c < 1 c < 1 c<1和足够大的 n n n a f ( n / b ) < = c f ( n ) af(n/b)<=cf(n) af(n/b)<=cf(n),那么 T ( n ) = Θ ( f ( n ) ) T(n) = Θ(f(n)) T(n)=Θ(f(n))

通俗的来解释,就是看 n l o g b a n^{log_ba} nlogba f ( n ) f(n) f(n) 的增长率大小:

  • 情况一: n l o g b a n^{log_ba} nlogba f ( n ) f(n) f(n) 的增长更快
  • 情况二: n l o g b a n^{log_ba} nlogba f ( n ) f(n) f(n) 的增长快慢类似
  • 情况三: n l o g b a n^{log_ba} nlogba f ( n ) f(n) f(n) 的增长更慢

情况一

n l o g b a n^{log_ba} nlogba f ( n ) f(n) f(n) 的增长更快,至少要快 Θ ( n ϵ ) Θ(n^ϵ) Θ(nϵ)倍。

T ( n ) = 9 T ( n / 3 ) + n T(n) = 9T(n/3) + n T(n)=9T(n/3)+n
n l o g b a = n 2 n^{log_ba} = n^2 nlogba=n2 f ( n ) = n = O ( n 2 − ϵ ) f(n) = n = O(n^{2-ϵ}) f(n)=n=O(n2ϵ) 0 < ϵ < = 1 0< ϵ <= 1 0<ϵ<=1
因此 T ( n ) = O ( n 2 ) T(n) = O(n^2) T(n)=O(n2)

情况二

n l o g b a n^{log_ba} nlogba f ( n ) f(n) f(n) 的增长快慢类似,同时 f ( n ) f(n) f(n)要比 n l o g b a n^{log_ba} nlogba Θ ( l o g k n ) Θ(log^kn) Θ(logkn)倍。

T ( n ) = T ( 2 n / 3 ) + 1 T(n) = T(2n/3) + 1 T(n)=T(2n/3)+1
n l o g b a = n l o g 3 / 2 1 = n 0 = 1 n^{log_ba} = n^{log_{3/2}1} = n^0 = 1 nlogba=nlog3/21=n0=1 f ( n ) = 1 = Θ ( n l o g b a l o g 0 n ) f(n) = 1 = Θ(n^{log_ba}log^0n) f(n)=1=Θ(nlogbalog0n)
因此 T ( n ) = Θ ( l o g n ) T(n) = Θ(logn) T(n)=Θ(logn)

情况三

f ( n ) f(n) f(n) n l o g b a n^{log_ba} nlogba 的增长更快,至少要快 Θ ( n ϵ ) Θ(n^ϵ) Θ(nϵ)倍,且 a f ( n / b ) ≤ c f ( n ) af(n/b) ≤ cf(n) af(n/b)cf(n)

T ( n ) = 3 T ( n / 4 ) + n l o g n T(n) = 3T(n/4) + n log n T(n)=3T(n/4)+nlogn
n l o g b a = n l o g 4 3 = n 0.793 n^{log_ba} = n^{log_43} = n^{0.793} nlogba=nlog43=n0.793 f ( n ) = n l o g n = Ω ( n l o g 4 3 + ϵ ) f(n) = nlogn = Ω(n^{log_43+ϵ}) f(n)=nlogn=Ω(nlog43+ϵ) ϵ ≤ 0.207 ϵ ≤ 0.207 ϵ0.207
并且 a f ( n / b ) = 3 f ( n / 4 ) = 3 ( n / 4 ) l o g ( n / 4 ) ≤ ( 3 / 4 ) n l o g n = c f ( n ) af(n/b) = 3f(n/4) = 3(n/4)log(n/4) ≤ (3/4)nlogn = cf(n) af(n/b)=3f(n/4)=3(n/4)log(n/4)(3/4)nlogn=cf(n) c = 3 / 4 c= 3/4 c=3/4
因此 T ( n ) = Θ ( n l o g n ) T(n) = Θ(nlogn) T(n)=Θ(nlogn)

使用主定理一般形式求解时间复杂度

T ( n ) = 8 T ( n / 2 ) + Θ ( 1 ) T(n) = 8T(n/2) + Θ(1) T(n)=8T(n/2)+Θ(1)
n l o g b a n^{log_ba} nlogba = n 3 n^3 n3 f ( n ) = Θ ( 1 ) = O ( n 3 − ϵ ) f(n) = Θ(1) = O(n^{3-ϵ}) f(n)=Θ(1)=O(n3ϵ),对于 ϵ < 3 ϵ<3 ϵ<3成立
因此 T ( n ) = Θ ( n l o g b a ) T(n)=Θ(n^{log_ba}) T(n)=Θ(nlogba) = Θ ( n 3 ) = Θ(n^3) =Θ(n3)

T ( n ) = 7 T ( n / 2 ) + Θ ( n 2 ) T(n) = 7T(n/2) + Θ(n^2) T(n)=7T(n/2)+Θ(n2)
n l o g b a n^{log_ba} nlogba = n l o g 2 7 = n^{log_27} =nlog27 = n 2.81 = n^{2.81} =n2.81 f ( n ) = Θ ( n 2 ) = O ( n 2.81 − ϵ ) f(n) = Θ(n^2) = O(n^{2.81-ϵ}) f(n)=Θ(n2)=O(n2.81ϵ),对于 ϵ < 0.8 ϵ<0.8 ϵ<0.8成立
因此 T ( n ) = Θ ( n l o g b a ) T(n)=Θ(n^{log_ba}) T(n)=Θ(nlogba) = Θ ( n 2.81 ) = Θ(n^{2.81}) =Θ(n2.81)

T ( n ) = 2 T ( n / 2 ) + Θ ( n ) T(n) = 2T(n/2) + Θ(n) T(n)=2T(n/2)+Θ(n)
n l o g b a n^{log_ba} nlogba = n l o g 2 2 = n = n^{log_22} = n =nlog22=n f ( n ) = Θ ( n ) f(n) = Θ(n) f(n)=Θ(n),二者增长率类似。
并且 f ( n ) = Θ ( n ) = Θ ( n l o g 2 2 l o g 0 n ) f(n) = Θ(n) = Θ(n^{log_22}log^0n) f(n)=Θ(n)=Θ(nlog22log0n)
因此 T ( n ) = Θ ( n l o g n ) T(n) = Θ(nlogn) T(n)=Θ(nlogn)

T ( n ) = 2 T ( n / 2 ) + n l o g n T(n) = 2T(n/2) + nlogn T(n)=2T(n/2)+nlogn
n l o g b a n^{log_ba} nlogba = n l o g 2 2 = n = n^{log_22} = n =nlog22=n f ( n ) = n l o g n = Θ ( n l o g b a l o g 1 n ) f(n) = nlogn = Θ(n^{log_ba} log^1n) f(n)=nlogn=Θ(nlogbalog1n)
注意:虽然 f ( n ) f(n) f(n)要比 n l o g b a n^{log_ba} nlogba,,但没有快 n ϵ n^ϵ nϵ,因此不适用于情况三。
因此 T ( n ) = Θ ( n l o g n ) T(n) = Θ(nlogn) T(n)=Θ(nlogn)

主定理的一般形式虽然适用范围更的广,但是仍然有不适用的情况:

  • n l o g b a n^{log_ba} nlogba f ( n ) f(n) f(n) 的增长率不能比
  • n l o g b a n^{log_ba} nlogba f ( n ) f(n) f(n) 增长的更快,但没有快 Θ ( n ϵ ) Θ(n^ϵ) Θ(nϵ)
  • f ( n ) f(n) f(n) n l o g b a n^{log_ba} nlogba 增长的更快,但没有快 Θ ( n ϵ ) Θ(n^ϵ) Θ(nϵ)

T ( n ) = 2 T ( n / 2 ) + n / l o g n T(n) = 2T(n/2) + n/log n T(n)=2T(n/2)+n/logn
n l o g b a = n nlogb a = n nlogba=n f ( n ) = n / l o g n f(n) = n/logn f(n)=n/logn
n l o g b a nlogb a nlogba f ( n ) f(n) f(n) 增长的更快,但也只快 Θ ( l o g n ) Θ(logn) Θ(logn),因此不适用情况1
f ( n ) = n / l o g n = Θ ( n l o g b a l o g − 1 n ) f(n) = n/log n = Θ(n^{logb a} log^{−1} n) f(n)=n/logn=Θ(nlogbalog1n) k = − 1 k=-1 k=1,因此也不适用于情况2

递归树 Recursion Tree

递归树:有根树,根节点代表原问题,根节点以外的所有节点都代表一个子问题。节点的值代表解决该子问题所花费的除递归调用的时间。
原问题的运行时间等于该树所有节点的值的和。
递归树的叶子节点是递归的基本情况。

递归树的示例:
T ( n ) = a T ( n / b ) + f ( n ) T(n) = aT(n/b) + f(n) T(n)=aT(n/b)+f(n)
最终该公式的递归树如下图所示:
其中蓝色箭头表示递归树的每一层的时间花销之和。每一层的时间花销,相当于每一层递归是 f ( n ) f(n) f(n)产生的时间花销。
在这里插入图片描述

假设叶子节点的时间花销 f ( n / b L ) = 0 f(n/b^L) = 0 f(n/bL)=0,则 L = l o g b n L = log_bn L=logbn
整体的时间复杂度: T ( n ) = ∑ i = 0 L a i f ( n / b i ) T(n) = \sum_{i=0}^{L}a^if(n/b^i) T(n)=i=0Laif(n/bi)

递归树的简单结论

假设每⼀层节点值之和是上⼀层节点值之和的 r 倍(即构成几何级数)

  • r < 1 r < 1 r<1,那么 T ( n ) = O ( f ( n ) ) T(n) = O(f(n)) T(n)=O(f(n))
  • r = 1 r = 1 r=1,那么 T ( n ) = O ( f ( n ) l o g n ) T(n) = O(f(n)logn) T(n)=O(f(n)logn)
  • r > 1 r > 1 r>1,那么 T ( n ) = O ( a L ) = O ( a l o g b n ) = O ( n l o g b a ) T(n) = O(a^L) = O(a^{log_bn}) = O(n^{log_ba}) T(n)=O(aL)=O(alogbn)=O(nlogba)

T ( n ) = 3 T ( n / 4 ) + Θ ( n 2 ) T(n) = 3T(n/4) + Θ(n^2) T(n)=3T(n/4)+Θ(n2)
最终递归树如图所示,每一层(除根节点)都和上一层差距 3 / 16 < 1 3/16 < 1 3/16<1 倍,因此 T ( n ) = O ( f ( n ) ) = O ( n 2 ) T(n) = O(f(n)) = O(n^2) T(n)=O(f(n))=O(n2)
在这里插入图片描述

但有的递归树各层节点值之和并不构成几何级数:

T ( n ) = 2 T ( n / 2 ) + n / l g n T(n) = 2T(n/2) + n/lg n T(n)=2T(n/2)+n/lgn

i i i 层的和为 n / l g ( n / 2 i ) = n / ( l g n − i ) n/lg(n/2^i) = n/(lg n − i) n/lg(n/2i)=n/(lgni) l g n − i ≥ 1 ⇒ i ≤ l g n − 1 lg n − i ≥ 1 ⇒ i ≤ lg n − 1 lgni1ilgn1
T ( n ) = ∑ i = 0 L n / ( l g n − i ) = ∑ i = 0 l g n − 1 n / ( l g n − i ) = = ∑ j = 1 l g n n / i T(n) = \sum_{i=0}^{L}n/(lg n − i) = \sum_{i=0}^{lgn - 1}n/(lg n − i) = = \sum_{j=1}^{lgn}n/ i T(n)=i=0Ln/(lgni)=i=0lgn1n/(lgni)==j=1lgnn/i
使用调和级数: H n = ∑ i = 1 n 1 / i = Θ ( l o g n ) H_n = \sum_{i=1}^{n}1/i = Θ(log n) Hn=i=1n1/i=Θ(logn)
因此 T ( n ) = ∑ j = 1 l g n n / i = n H l g n = Θ ( n l g l g n ) T(n) = \sum_{j=1}^{lgn}n/ i = nH_{lgn} =Θ(n lg lg n) T(n)=j=1lgnn/i=nHlgn=Θ(nlglgn)
在这里插入图片描述

T ( n ) = 4 T ( n / 2 ) + n l g n T(n) = 4T(n/2) + n lg n T(n)=4T(n/2)+nlgn
第 i 层共有 4 i 4^i 4i 个节点,其每个节点的时间花销: ( n / 2 i ) l g ( n / 2 i ) = ( n / 2 i ) ( l g n − i ) (n/2^i)lg(n/2^i) = (n/2^i)(lgn - i) (n/2i)lg(n/2i)=(n/2i)(lgni)
因此总的时间花销: T ( n ) = ∑ i = 0 l g n ( n / 2 i ) ( l g n − i ) = Θ ( n 2 ) T(n) = \sum_{i=0}^{lgn}(n/2^i)(lgn - i) = Θ(n^2) T(n)=i=0lgn(n/2i)(lgni)=Θ(n2)
在这里插入图片描述

T ( n ) = n T ( n ) + n T(n) = n T( n) + n T(n)=nT(n)+n
前几层的节点时间花销之和:
在这里插入图片描述
T ( n ) = ∑ i = 0 L n T(n) = \sum_{i=0}^{L}n T(n)=i=0Ln L = l g l g n L = lg lg n L=lglgn
T ( n ) = Θ ( n l g l g n ) T(n) = Θ(n lg lg n) T(n)=Θ(nlglgn)

T ( n ) = T ( n / 3 ) + T ( 2 n / 3 ) + n T(n) = T(n/3) + T(2n/3) + n T(n)=T(n/3)+T(2n/3)+n
该递归公式,最终绘制成的递归树,左右是不平衡的。
考虑上界和下界:
l o g 3 n ≤ L ≤ l o g 3 / 2 n log_3n ≤ L ≤ log_{3/2}n log3nLlog3/2n
上界 T ( n ) ≤ ∑ i = 0 l o g 3 / 2 n i = n l o g 3 / 2 n T(n) ≤ \sum_{i=0}^{log_{3/2}n} i = nlog_{3/2}n T(n)i=0log3/2ni=nlog3/2n
上界 T ( n ) ≤ ∑ i = 0 l o g 3 n i = n l o g 3 n T(n) ≤ \sum_{i=0}^{log_{3}n} i = nlog_{3}n T(n)i=0log3ni=nlog3n
因此: T ( n ) = Θ ( n l o g n ) T(n) = Θ(n log n) T(n)=Θ(nlogn)
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1361399.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Unity游戏内相机(主角头部视角)的旋转问题:“万向节锁定”(Gimbal Lock)

前言&#xff1a; 在Unity中&#xff0c;相机的正前方是Z正半轴&#xff0c;相机的正右方是X正半轴&#xff0c;相机的正上方是Y正半轴。这个很好理解。 现在&#xff0c;我想要相机看向左前上方45&#xff0c;你会觉得要怎么做呢&#xff1f; 如果是我的话&#xff0c;我的第一…

在VM下使用Composer完成快照方式的软件制作

Composer允许您构建软件、应用程序、偏好设置文件或是文档的安装包&#xff0c;安装包可以部署到远程电脑或是作为镜像流程的一部分。构建软件包的第一步就是创建包源&#xff0c;根据要打包的软件&#xff0c;Composer允许您监视软件的安装和使用驱动器上已存在的文件来创建包…

Linux的top命令

通过top命令可以查看CPU、内存使用情况 -p&#xff1a;只显示某个进程的信息 -d&#xff1a;设置刷新时间 -c&#xff1a;显示产生进程的完整命令&#xff0c;默认是进程名 -n&#xff1a;指定刷新次数 -u&#xff1a;查找特点用户启动的进程 -b&#xff1a;以非交互非全…

【数据结构】八大排序之快速排序算法

&#x1f984;个人主页:修修修也 &#x1f38f;所属专栏:数据结构 ⚙️操作环境:Visual Studio 2022 目录 一.快速排序简介及思路 二.快速排序代码实现的三种方式 &#x1f4cc;左右交换法 &#x1f4cc;挖坑填坑法 &#x1f4cc;前后指针法 三.快速排序的时间复杂度分析…

MvvmToolkit的使用

背景&#xff1a;MvvmLight不更新了&#xff0c;用Toolkit代替 1、首先下载好社区版本的NuGet包 2、ViewModel中需要继承ObservableObject&#xff0c;查看ObservableObject可以看到里面有实现好InotifyPropertyChanged。 3、对于属性的set&#xff0c;可以简写成一行&#xff…

网络名称解读 -入门5

WAN: Wide Area Network(跨区域&#xff09;&#xff0c;LAN&#xff1a; Local Area NetworkWAN MAC&#xff0c; 用来连接上级网络&#xff0c; LAN MAC&#xff0c; 用于内部网路。 LAN & WAN 3.1&#xff0c;LAN表示子网&#xff0c;通过掩码来筛选子网内主机数量&…

【动态规划】【字符串】C++算法:140单词拆分

作者推荐 【动态规划】【字符串】扰乱字符串 本文涉及的基础知识点 动态规划 字符串 LeetCode140:单词拆分 II 给定一个字符串 s 和一个字符串字典 wordDict &#xff0c;在字符串 s 中增加空格来构建一个句子&#xff0c;使得句子中所有的单词都在词典中。以任意顺序 返回…

创建专业电子邮件签名:提升个人与品牌形象的实用指南

电子邮件签名乃是品牌建设中常被忽略的一环。试想一下&#xff0c;若名片只是普通的、手工切割的复印纸&#xff0c;上面用黑体打印着你的联系方式&#xff0c;那将是多么平凡无奇。这将显得廉价、乏味且不专业——这正是人们不愿如此的原因。相反&#xff0c;他们渴望让自己的…

MySQL-DDL

DDL是数据定义语言&#xff0c;用来定义数据对象&#xff08;数据库&#xff0c;表&#xff0c;字段&#xff09; 数据库操作&#xff1a; 1.查询&#xff1a; 查询所有数据库&#xff1a;SHOW DATABASES; 查询当前数据库&#xff1a;SELECT DATABASE(); 2.创建&#xff1a; C…

彻底解决vue-video-player视频铺满div

需求 最近需要接入海康视频摄像头&#xff0c;然后把视频的画面接入到自己的网站系统中。以前对接过rtsp固定IP的显示视频&#xff0c;这次的不一样&#xff0c;没有了固定IP。海康的解决办法是&#xff0c;摄像头通过配置服务器到萤石云平台&#xff0c;然后购买企业版账号和…

编程语言的未来?直观点5年之际!

编程语言的未来&#xff1f;未来5年应该如何发展&#xff01; 随着科技的飞速发展&#xff0c;编程语言在计算机领域中扮演着至关重要的角色。它们是软件开发的核心&#xff0c;为程序员提供了与机器沟通的桥梁。那么&#xff0c;在技术不断进步的未来&#xff0c;编程语言的走…

selenium实现UI自动化

1.selenium简介 selenium是支持web浏览器自动化的一系列工具和库的综合项目。具有支持linux、windows等多个平台&#xff0c;支持Firefox、chrome等多种主流浏览器&#xff1b;支持Java、Python等多种语言。 主要包括的三大工具有&#xff1a; WebDriver&#xff08;rc 1.0)、…

优雅永不过时: spring-retry 重试框架

文章目录 前言一、幂等性是重试的前提二、使用步骤1.引入依赖2.启动类或配置类上添加EnableRetry,启用retry框架3.创建一个要重试的方法4.自定义一个retry监听5.创建一个测试类 总结 前言 Spring Retry 是一个用于在 Spring 应用中实现重试机制的库。它提供了一种方便的方式来…

AOP(面向切面编程)基于XML方式配置

概念解释&#xff1a;&#xff08;理解基本概念方可快速入手&#xff09; 连接点&#xff08;joinpoint&#xff09; 被拦截到的点&#xff0c;因为Spring只支持方法类型的连接点&#xff0c;所以在Spring中连接点指的就是被拦截到的方法。 切入点&#xff08;pointcut&#x…

在电商狂欢中,什么平台更加对商家有利?

我是电商珠珠 近年来&#xff0c;不管是直播电商也好&#xff0c;电商平台也好&#xff0c;都一直朝着向上走的趋势。 我做电商也已经有5年时间了&#xff0c;期间做过天猫&#xff0c;快手、抖店&#xff0c;团队从原来的几个人&#xff0c;扩大到了70。 在22年10月&#x…

使用ObjectARX事务功能做小动画处理

使用ObjectARX事务功能做小动画处理&#xff0c;可以用于几何算法调试等 void CmdFun::Test() {if (true){ads_point pt;ads_name en;if (RTNORM ! acedEntSel(_T("\n选中对象 : "), en, pt))return;AcDbObjectId id;if (Acad::eOk ! acdbGetObjectId(id, en))retur…

哈尔滨爆火的背后有什么值得我们学习的,2024普通人如何创业/2024风口行业

这个冬天&#xff0c;“南方小土豆”带火东北冰雪游。“冰城”黑龙江哈尔滨的文旅市场异常火爆&#xff0c;元旦假期3天&#xff0c;哈尔滨市累计接待游客304.79万人次&#xff0c;实现旅游总收入59.14亿元。旅游总收入达到历史峰值。哈尔滨旅游怎么就爆火了&#xff1f;背后究…

鸿蒙学习笔记

DevEco Studio, ArkTS, ArkUI, ArkCompiler, DevEco Testing是啥 DevEco Studio是华为开发的一款集成开发环境&#xff08;IDE&#xff09;&#xff0c;用于开发基于华为鸿蒙操作系统&#xff08;HarmonyOS&#xff09;的应用程序。它提供了丰富的开发工具和功能&#xff0c;包…

Baumer工业相机堡盟工业相机如何通过NEOAPI SDK修改图像像素格式Mono8或者Mono10(C#)

Baumer工业相机堡盟工业相机如何通过NEOAPI SDK修改图像像素格式Mono8或者Mono10&#xff08;C#&#xff09; Baumer工业相机Baumer工业相机的图像像素格式的技术背景CameraExplorer如何查看修改相机图像像素格式信息在NEOAPI SDK里通过函数修改图像像素格式修改像素格式测试演…

微信小程序启用组件按需注入

微信小程序在预览或上传的时候会进行代码质量检测&#xff0c;有时候会提示‘组件需按需注入’&#xff0c;如下图所示&#xff1a; 这是只要加一句代码"lazyCodeLoading": "requiredComponents" 就行了 &#xff0c;添加的位置在app.json文件的里面&#…