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

目录

  • 主定理 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)
在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

紫光展锐5G扬帆出海 | 欧洲积极拥抱更多5G选择

和我国一样&#xff0c;欧洲不少国家也在2019年进入5G商用元年&#xff1a;英国在2019年5月推出了5G商用服务&#xff0c;该国最大的移动运营商EE(Everything Everywhere)最先商用5G&#xff1b;德国在2019年年中推出5G商用服务&#xff0c;德国电信、沃达丰和 Telefonica是首批…

从0开始python学习-42.requsts统一请求封装

统一请求封装的目的&#xff1a; 1.去除重复的冗余的代码 2. 跨py文件实现通过一个sess来自动关联有cookie关联的接口。 3. 设置统一的公共参数&#xff0c;统一的文件处理&#xff0c;统一的异常处理&#xff0c;统一的日志监控&#xff0c;统一的用例校验等 封装前原本代…

手写视频裁剪框

<!-- 截取框 --><divv-show"isShow"class"crop-box":style"{width: cropWidth px,height: cropHeight px,left: cropX px,top: cropY px,}"ref"cropBox"mousedown"startInteraction"><!-- 内容在这里 --…

Kubernetes二进制部署 单节点

一、环境准备 k8s集群master1&#xff1a;192.168.229.90 kube-apiserver kube-controller-manager kube-scheduler etcd k8s集群node1: 192.168.229.80 kubelet kube-proxy docker flannel k8s集群node2: 192.168.229.70 kubelet kube-proxy docker flannel 至少2C2G 常见的k…

软件工程:数据流图相关知识和多实例分析

目录 一、数据流图相关知识 1. 基本介绍 2. 常用符号 3. 附加符号 二、数据流图实例分析 1. 活期存取款业务处理系统 2. 工资计算系统 3. 商业自动化系统 4. 学校人事管理系统 5. 教材征订系统 6. 高考录取统分子系统 7. 订货系统 8. 培训中心管理系统 9. 考务处…

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

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

PyTorch|一次画一批图像

想想这样一个场景&#xff0c;我们训练了一个神经网络&#xff0c;输入一些信息&#xff0c;这个网络可以根据信息为我们生成相关图片。 这些图片并不是一张&#xff0c;而是多张&#xff0c;我们想把这些图片一次全部显示出来&#xff0c;而不是一张一张的显示&#xff08;这…

【JAVA】异常体系

&#x1f34e;个人博客&#xff1a;个人主页 &#x1f3c6;个人专栏&#xff1a; JAVA ⛳️ 功不唐捐&#xff0c;玉汝于成 目录 前言 正文 Exception&#xff08;异常&#xff09;: Error: 结语 我的其他博客 前言 在Java编程中&#xff0c;异常处理是一个至关…

什么?谁?w (who what)

文章目录 什么&#xff1f;谁&#xff1f;w (who & what)默认的显示不显示标题行简洁模式显示更多信息 什么&#xff1f;谁&#xff1f;w (who & what) w可以认为是加强版的who&#xff0c;果然越简洁越强大&#xff0c;就比如less比more是功能更多的。 w不仅可以显示…

leetcode:2451. 差值数组不同的字符串(python3解法)

难度&#xff1a;简单 给你一个字符串数组 words &#xff0c;每一个字符串长度都相同&#xff0c;令所有字符串的长度都为 n 。 每个字符串 words[i] 可以被转化为一个长度为 n - 1 的 差值整数数组 difference[i] &#xff0c;其中对于 0 < j < n - 2 有 difference[i]…

element-ui table height 属性导致界面卡死

问题: 项目上&#xff0c;有个点击按钮弹出抽屉的交互, 此时界面卡死 原因分析: 一些场景下(父组件使用动态单位/弹窗、抽屉中使用), element-ui 的 table 会循环计算高度值, 导致界面卡死 github 上的一些 issues 和解决方案: Issues ElemeFE/element GitHub 官方讲是升…

LLM之RAG实战(十三)| 利用MongoDB矢量搜索实现RAG高级检索

想象一下&#xff0c;你是一名侦探&#xff0c;身处庞大的信息世界&#xff0c;试图在堆积如山的数据中找到隐藏的一条重要线索&#xff0c;这就是检索增强生成&#xff08;RAG&#xff09;发挥作用的地方&#xff0c;它就像你在人工智能和语言模型世界中的可靠助手。但即使是最…

实战演练 | Navicat 中编辑器设置的配置

Navicat 是一款功能强大的数据库管理工具&#xff0c;为开发人员和数据库管理员提供稳健的环境。其中&#xff0c;一个重要功能是 SQL 编辑器&#xff0c;用户可以在 SQL 编辑器中编写和执行 SQL 查询。Navicat 的编辑器设置可让用户自定义编辑器环境&#xff0c;以满足特定的团…

MobaXterm SSH 免密登录配置

文章目录 1.简介2.SSH 免密登录配置第一步&#xff1a;点击 Session第二步&#xff1a;选择 SSH第三步&#xff1a;输入服务器地址与用户名第四步&#xff1a;设置会话名称第五步&#xff1a;点击 OK 并输入密码 3.密码管理4.小结参考文献 1.简介 MobaXterm 是一个功能强大的终…

如何科学地防范冬季流感

如何科学地防范冬季流感 加强对呼吸系统传染病预防的观念 在乘坐地铁、公交、火车、飞机等公共交通工具时&#xff0c;应科学佩戴口罩。要经常洗手&#xff0c;定期通风&#xff0c;咳嗽或打喷嚏时要用手捂住口鼻&#xff0c;不要随地吐痰。 羊大师建议积极接种含有XBB变异株…

基于树种算法优化的Elman神经网络数据预测 - 附代码

基于树种算法优化的Elman神经网络数据预测 - 附代码 文章目录 基于树种算法优化的Elman神经网络数据预测 - 附代码1.Elman 神经网络结构2.Elman 神经用络学习过程3.电力负荷预测概述3.1 模型建立 4.基于树种优化的Elman网络5.测试结果6.参考文献7.Matlab代码 摘要&#xff1a;针…

实现网页跟随系统主题切换

如何实现网页跟随系统主题切换&#xff1f;想必大家都是用过媒体查询media (prefers-color-scheme: dark) 实现亮/暗主题的切换&#xff0c;那如何让其跟随系统自动切换呢&#xff1f;在window对象上&#xff0c;有matchMedia这个API可以帮助我们解决这个问题。它和css中的媒体…

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

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

开源协议简介和选择

软件国产化已经提到日程上了&#xff0c;先来研究一下开源协议。 引言 在追求“自由”的开源软件领域的同时不能忽视程序员的权益。为了激发程序员的创造力&#xff0c;现今世界上有超过60种的开源许可协议被开源促进组织&#xff08;Open Source Initiative&#xff09;所认可…

Vue2 实现内容拖拽或添加 HTML 到 Tinymce 富文本编辑器的高级功能详解

在 Web 开发中&#xff0c;Tinymce 被广泛应用作为富文本编辑器。除了基础的文本编辑功能&#xff0c;Tinymce 还提供了一系列高级功能&#xff0c;使得文本编辑更加灵活和便捷。本文将介绍如何在 Tinymce 中实现一些高级功能&#xff0c;并深入了解每个工具的使用。 Tinymce …