【北大MOOC】时间复杂度的计算

2023-10-31

课程链接:https://www.icourse163.org/course/PKU-1002525003

1.函数渐近的界

简单说来:

  • f ( n ) = O ( g ( n ) ) f(n)=\Omicron(g(n)) f(n)=O(g(n)) f ( n ) f(n) f(n) 的阶不高于 g ( n ) g(n) g(n) 的阶

  • f ( n ) = Ω ( g ( n ) ) f(n)=\Omega(g(n)) f(n)=Ω(g(n)) f ( n ) f(n) f(n) 的阶不低于 g ( n ) g(n) g(n) 的阶

  • f ( n ) = Θ ( g ( n ) ) f(n)=\Theta(g(n)) f(n)=Θ(g(n)) f ( n ) f(n) f(n) g ( n ) g(n) g(n) 同阶

  • f ( n ) = ο ( g ( n ) ) f(n)=\omicron(g(n)) f(n)=ο(g(n)) f ( n ) f(n) f(n) 的阶低于 g ( n ) g(n) g(n) 的阶

  • f ( n ) = ω ( g ( n ) ) f(n)=\omega(g(n)) f(n)=ω(g(n)) f ( n ) f(n) f(n) 的阶高于 g ( n ) g(n) g(n) 的阶

2.函数渐近的界的定理

定理1

f f f g g g 是定义域为自然数集合的函数,

  • 如果 lim ⁡ n → ∞ f ( n ) g ( n ) \lim\limits_{n\rightarrow \infty}\frac{f(n)}{g(n)} nlimg(n)f(n) 存在,并且等于某个常数 c > 0 c>0 c>0,那么 f ( n ) = Θ ( g ( n ) ) f(n) = \Theta(g(n)) f(n)=Θ(g(n))

  • 如果 lim ⁡ n → ∞ f ( n ) g ( n ) = 0 \lim\limits_{n\rightarrow\infty}\frac{f(n)}{g(n)} = 0 nlimg(n)f(n)=0,那么 f ( n ) = o ( g ( n ) ) f(n) = o(g(n)) f(n)=o(g(n))

  • 如果 lim ⁡ n → ∞ f ( n ) g ( n ) = + ∞ \lim\limits_{n\rightarrow\infty}\frac{f(n)}{g(n)} =+∞ nlimg(n)f(n)=+,那么 f ( n ) = ω ( g ( n ) ) f(n) = ω(g(n)) f(n)=ω(g(n))

一些重要结果

可证明:多项式函数的阶低于指数函数的阶 n d = o ( r n ) n^{d} = o(r^{n}) nd=o(rn) r > 1 r >1 r>1 d > 0 d > 0 d>0

可证明:对数函数的阶低于幂函数的阶 ln ⁡ n = o ( n d ) \ln n = o (n^d ) lnn=o(nd) d > 0 d > 0 d>0

定理2:函数的阶之间的关系具有传递性

设函数 f , g , h f,g,h f,g,h 的定义域为自然数集合,

  • 如果 f = O ( g ) f=O(g) f=O(g) g = O ( h ) g=O(h) g=O(h),那么 f = O ( h ) f=O(h) f=O(h)

  • 如果 f = Ω ( g ) f=Ω(g) f=(g) g = Ω ( h ) g=Ω(h) g=(h), 那么 f = Ω ( h ) f =Ω (h) f=(h)

  • 如果 f = Θ ( g ) f=Θ(g) f=Θ(g) g = Θ ( h ) g=Θ(h) g=Θ(h), 那么 f = Θ ( h ) f =Θ (h) f=Θ(h)

定理3

假设函数 f f f g g g 的定义域为自然数集,若对某个其它函数 h h h,有 f = O ( h ) f =O(h) f=O(h) g = O ( h ) g=O(h) g=O(h),那么 f + g = O ( h ) f + g = O(h) f+g=O(h)

该性质可以推广到有限个函数。

算法由有限步骤构成,若每一步的时间复杂度函数的上界都是 h ( n ) h(n) h(n),那么该算法的时间复杂度函数可以写作 O ( h ( n ) ) O(h(n)) O(h(n))

3.几类重要的函数

对数函数

  • log ⁡ k n = Θ ( log ⁡ l n ) \log_kn = Θ (\log_l n) logkn=Θ(logln)

  • log ⁡ b n = o ( n α )     α > 0 \log_bn = o(n^α)\ \ \ α > 0 logbn=o(nα)   α>0

  • a log ⁡ b n = n log ⁡ b a a^{\log_b n} = n^{\log_b a} alogbn=nlogba

指数函数与阶乘

  • Stirling公式: n ! = 2 π n ( n e ) n ( 1 + Θ ( 1 n ) ) n!=\sqrt{2 \pi n}(\frac{n}{e})^n(1+\Theta(\frac{1}{n})) n!=2πn (en)n(1+Θ(n1))

  • n ! = o ( n n ) n! = o(n^n) n!=o(nn)

  • n ! = ω ( 2 n ) n! = ω (2^n) n!=ω(2n)

  • log ⁡ ( n ! ) = Θ ( n log ⁡ n ) \log(n!) = Θ(n \log n) log(n!)=Θ(nlogn)

取整函数

定义:

  • ⌊ x ⌋ \lfloor x \rfloor x: 表示小于等于 x x x 的最大的整数

  • ⌈ x ⌉ \lceil x \rceil x: 表示大于等于 x x x 的最小的整数

性质:

  • x − 1 < ⌊ x ⌋ ≤ x ≤ ⌈ x ⌉ < x + 1 x−1< \lfloor x \rfloor ≤ x ≤ \lceil x \rceil< x+1 x1<xxx<x+1

  • ⌊ x + n ⌋ = ⌊ x ⌋ + n \lfloor x+n \rfloor = \lfloor x \rfloor + n x+n=x+n ⌈ x + n ⌉ = ⌈ x ⌉ + n \lceil x+n \rceil = \lceil x \rceil+n x+n=x+n n n n 为整数

  • ⌈ n 2 ⌉ + ⌊ n 2 ⌋ = n \lceil \frac{n}{2} \rceil+\lfloor \frac{n}{2} \rfloor=n 2n+2n=n

  • ⌈ ⌈ n a ⌉ b ⌉ = ⌈ n a b ⌉ \lceil \frac{\lceil \frac{n}{a} \rceil}{b} \rceil=\lceil \frac{n}{ab} \rceil ban=abn ⌊ ⌊ n a ⌋ b ⌋ = ⌊ n a b ⌋ \lfloor \frac{\lfloor \frac{n}{a} \rfloor}{b} \rfloor=\lfloor \frac{n}{ab} \rfloor ban=abn

4.序列求和的方法

4.1 等差、等比数列与调和级数

  • ∑ k = 1 n a k = n ( a 1 + a n ) 2 \sum\limits_{k=1}^na_k=\frac{n(a_1+a_n)}{2} k=1nak=2n(a1+an)

  • ∑ k = 0 n a q k = a ( 1 − q n + 1 ) 1 − q \sum\limits_{k=0}^naq^k=\frac{a(1-q^{n+1})}{1-q} k=0naqk=1qa(1qn+1)

  • ∑ k = 0 ∞ a q k = a 1 − q    ( q < 1 ) \sum\limits_{k=0}^{\infty}aq^k=\frac{a}{1-q}\ \ (q<1) k=0aqk=1qa  (q<1)

  • ∑ k = 1 n 1 k = ln ⁡ n + O ( 1 ) \sum\limits_{k=1}^n\frac{1}{k}=\ln n+O(1) k=1nk1=lnn+O(1)

4.2 估计和式上界的放大法

  • ∑ k = 1 n a k ≤ n a m a x \sum\limits_{k=1}^na_k \leq n a_{max} k=1naknamax

  • 假设存在常数 r < 1 r <1 r<1,使得对一切 k ≥ 0 k \geq 0 k0 a k + 1 / a k ≤ r a_{k+1}/a_k \leq r ak+1/akr 成立,即有 a 1 ≤ a 0 r , a 2 ≤ a 1 r ≤ a 0 r 2 , . . . a_1 \leq a_0r,a_2 \leq a_1r \leq a_0r^2,... a1a0ra2a1ra0r2...
    ∑ k = 0 n a k ≤ ∑ k = 0 ∞ a 0 r k = a 0 ∑ k = 0 ∞ r k = a 0 1 − r \sum\limits_{k=0}^na_k \leq \sum\limits_{k=0}^{\infty}a_0r^k=a_0\sum\limits_{k=0}^{\infty}r^k=\frac{a_0}{1-r} k=0nakk=0a0rk=a0k=0rk=1ra0

4.3 用积分估计和式渐近的界

例:估计 ∑ k = 1 n 1 k \sum\limits_{k=1}^n\frac{1}{k} k=1nk1 的渐近的界

解:

5.迭代法求解递推方程

5.1 迭代法

基本步骤:

  • 不断用递推方程的右部替换左部

  • 每次替换,随着 n n n 的降低在和式中多出一项

  • 直到出现初值停止迭代

  • 将初值代入并对和式求和

  • 可用数学归纳法验证解的正确性

例1:Hanoi塔算法 { T ( n ) = 2 T ( n − 1 ) + 1 T ( 1 ) = 1 \left\{\begin{array}{l}T(n)=2T(n-1)+1 \\ T(1)=1\end{array}\right. {T(n)=2T(n1)+1T(1)=1

解:

例2:插入排序算法 { W ( n ) = W ( n − 1 ) + n − 1 W ( 1 ) = 0 \left\{\begin{array}{l}W(n)=W(n-1)+n-1 \\ W(1)=0\end{array}\right. {W(n)=W(n1)+n1W(1)=0

解:

5.2 换元迭代

基本步骤:

  • 将对 n n n 的递推式换成对其他变元 k k k 的递推式

  • k k k 直接迭代

  • 将解 (关于 k k k 的函数) 转换成关于 n n n 的函数

例:二分归并排序递推方程: { W ( n ) = 2 W ( n / 2 ) + n − 1 W ( 1 ) = 0 \left\{\begin{array}{l}W(n)=2W(n/2)+n-1 \\ W(1)=0\end{array}\right. {W(n)=2W(n/2)+n1W(1)=0

解:

假设 n = 2 k n=2^k n=2k,换元: { W ( 2 k ) = 2 W ( 2 k − 1 ) + 2 k − 1 W ( 0 ) = 0 \left\{\begin{array}{l}W(2^k)=2W(2^{k-1})+2^k-1 \\ W(0)=0\end{array}\right. {W(2k)=2W(2k1)+2k1W(0)=0

迭代求解:

5.3 解的正确性(归纳验证)

证明:递推方程 { W ( n ) = W ( n − 1 ) + n − 1 W ( 1 ) = 0 \left\{\begin{array}{l}W(n)=W(n-1)+n-1 \\ W(1)=0\end{array}\right. {W(n)=W(n1)+n1W(1)=0 的解是 W ( n ) = n ( n − 1 ) / 2 W(n)=n(n-1)/2 W(n)=n(n1)/2

方法:数学归纳法

证: n = 1 n=1 n=1 W ( 1 ) = 1 × ( 1 − 1 ) / 2 = 0 W(1)=1×(1-1)/2 = 0 W(1)=1×(11)/2=0

假设对于 n n n,解满足方程,

W ( n + 1 ) = W ( n ) + n = n ( n − 1 ) / 2 + n = n [ ( n − 1 ) / 2 + 1 ] = n ( n + 1 ) / 2 W(n+1)= W(n)+n= n(n-1)/2 + n= n[(n-1)/2+1]= n(n+1)/2 W(n+1)=W(n)+n=n(n1)/2+n=n[(n1)/2+1]=n(n+1)/2

6.差消法化简高阶递推方程

对于高阶递推方程先要用差消法化简为一阶方程,然后迭代求解。

例:求快速排序平均工作量

解:

n n n 种可能的输入,对每个输入,划分的比较次数都是 n − 1 n-1 n1

工作量 = 子问题工作量 + 划分工作量。故工作量总和如下:

假设首元素排好序在每个位置是等概率的,故快速排序平均工作量为

{ T ( n ) = 2 n ∑ i = 1 n − 1 T ( i ) + O ( n ) , n ≥ 2 T ( 1 ) = 0 \left\{\begin{array}{l}T(n)=\frac{2}{n}\sum\limits_{i=1}^{n-1}T(i)+O(n),n \geq 2 \\ T(1)=0\end{array}\right. T(n)=n2i=1n1T(i)+O(n)n2T(1)=0

这是一个全部历史的递推方程。对于高阶方程应该先化简,然后迭代。

差消化简:利用两个方程相减,将右边的项尽可能消去,以达到降阶的目的。

迭代求解:

7.递归树

7.1 概念

  • 递归树是迭代的图形表述

  • 递归树的生成过程与迭代过程一致

  • 递归树上所有项恰好是迭代之后产生和式中的项

  • 对递归树上的项求和就是迭代后方程的解

7.2 迭代在递归树中的表示

如果递归树上某结点标记为 W ( m ) W(m) W(m) W ( m ) = W ( m 1 ) + . . . + W ( m t ) + f ( m ) + . . . + g ( m ) W(m) = W(m_1)+...+W(m_t)+ f(m)+...+g(m) W(m)=W(m1)+...+W(mt)+f(m)+...+g(m) m 1 , . . . , m t < m m_1, ... , m_t< m m1,...,mt<m,其中 W ( m 1 ) , . . . , W ( m t ) W(m_1),...,W(m_t) W(m1),...,W(mt) 称为函数项。

7.3 递归树的生成规则

  • 初始,递归树只有根结点, 其值为 W ( n ) W(n) W(n)

  • 不断继续下述过程:

    • 将函数项叶结点的迭代式 W ( m ) W(m) W(m) 表示成二层子树

    • 用该子树替换该叶结点

  • 继续递归树的生成,直到树中无函数项 (只有初值) 为止。

例1:二分归并排序 W ( n ) = 2 W ( n / 2 ) + n − 1 W(n)=2W(n/2)+n-1 W(n)=2W(n/2)+n1

解:

对递归树上的量求和:

W ( n ) = n − 1 + n − 2 + . . . + n − 2 k − 1 = k n − ( 2 k − 1 ) = n log ⁡ n − n + 1 W(n)=n-1+n-2+...+n-2^{k-1}=kn-(2^k-1)=n\log n-n+1 W(n)=n1+n2+...+n2k1=kn(2k1)=nlognn+1

例2:求解方程: 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

解:

求和:递归树层数 k k k,每层 O ( n ) O(n) O(n)

n ( 2 / 3 ) k = 1 ⇒ ( 3 / 2 ) k = n ⇒ k = O ( l o g 3 / 2 n ) n(2/3)k =1 \Rightarrow (3/2)k = n \Rightarrow k = O(log3/2n) n(2/3)k=1(3/2)k=nk=O(log3/2n)

T ( n ) = O ( n l o g n ) T(n)=O(nlogn) T(n)=O(nlogn)

8.主定理及其应用

求解递推方程 T ( n ) = a T ( n / b ) + f ( n ) T(n) = a T(n/b) + f(n) T(n)=aT(n/b)+f(n)

  • a a a:归约后的子问题个数

  • n / b n/b n/b:归约后子问题的规模

  • f ( n ) f(n) f(n):归约过程及组合子问题的解的工作量

主定理

a ≥ 1 , b > 1 a \geq1, b>1 a1,b>1 为常数, f ( n ) f(n) f(n) 为函数, T ( n ) T(n) T(n) 为非负整数,且 T ( n ) = a T ( n / b ) + f ( n ) T(n)=aT(n/b)+f(n) T(n)=aT(n/b)+f(n),则

  • f ( n ) = O ( n log ⁡ b a − ξ ) , ξ > 0 f(n)=O(n^{\log_ba-\xi}),\xi>0 f(n)=O(nlogbaξ)ξ>0,那么 T ( n ) = Θ ( n log ⁡ b a ) T(n)=\Theta(n^{\log_ba}) T(n)=Θ(nlogba)

  • f ( n ) = Θ ( n log ⁡ b a ) f(n)=\Theta(n^{\log_ba}) f(n)=Θ(nlogba),那么 T ( n ) = Θ ( n log ⁡ b a log ⁡ n ) T(n)=\Theta(n^{\log_ba} \log n) T(n)=Θ(nlogbalogn)

  • f ( n ) = Ω ( n log ⁡ b a + ξ ) , ξ > 0 f(n)=\Omega(n^{\log_ba + \xi}),\xi > 0 f(n)=Ω(nlogba+ξ)ξ>0,且对于某个常数 c < 1 c<1 c<1 和充分大的 n n n a f ( n / b ) ≤ c f ( n ) af(n/b) \leq cf(n) af(n/b)cf(n),那么 T ( n ) = Θ ( f ( n ) ) T(n)=\Theta(f(n)) T(n)=Θ(f(n))

例1

求解递推方程 T ( n ) = 9 T ( n / 3 ) + n T(n) = 9T(n/3) + n T(n)=9T(n/3)+n

解:

上述递推方程中的 a = 9 , b = 3 , f ( n ) = n , n log ⁡ 3 9 = n 2 , f ( n ) = O ( n log ⁡ 3 9 − 1 ) a = 9,b = 3,f(n) = n,n^{\log_39} = n^2,f(n) = O(n^{\log_39-1}) a=9b=3f(n)=nnlog39=n2f(n)=O(nlog391)

相当于主定理的Case1,其中 ξ = 1 \xi =1 ξ=1,根据定理得到 T ( n ) = Θ ( n 2 ) T(n) = \Theta(n^2) T(n)=Θ(n2)

例2

求解递推方程 T ( n ) = T ( 2 n / 3 ) + 1 T(n) = T(2n/3) + 1 T(n)=T(2n/3)+1

解:

上述递推方程中的 a = 1 , b = 3 / 2 , f ( n ) = 1 , n log ⁡ 3 / 2 1 = n 0 = 1 a = 1,b = 3/2,f(n) = 1,n^{\log_{3/2}1} = n^0 = 1 a=1b=3/2f(n)=1nlog3/21=n0=1

相当于主定理的Case2,根据定理得到 T ( n ) = Θ ( log ⁡ n ) T(n) = \Theta( \log n) T(n)=Θ(logn)

例3

求解递推方程 T ( n ) = 3 T ( n / 4 ) + n log ⁡ n T(n) = 3T(n/4) + n\log n T(n)=3T(n/4)+nlogn

解:

上述递推方程中的 a = 3 , b = 4 , f ( n ) = n log ⁡ n a = 3,b = 4,f(n) = n\log n a=3b=4f(n)=nlogn

n log ⁡ n = Ω ( n log ⁡ 4 3 + ξ ) ≈ Ω ( n 0.793 + ξ ) n\log n=\Omega( n^{\log_43+ \xi}) \approx \Omega( n^{0.793+\xi}) nlogn=Ω(nlog43+ξ)Ω(n0.793+ξ),取 ξ = 0.2 \xi = 0.2 ξ=0.2 即可。

条件验证:

要使 a f ( n / b ) ≤ c f ( n ) af (n/b) \leq c f (n) af(n/b)cf(n) 成立,代入 f ( n ) = n log ⁡ n f (n) = n \log n f(n)=nlogn,得到 3 ( n / 4 ) log ⁡ ( n / 4 ) ≤ c n log ⁡ n 3 (n/4) \log (n/4) \leq cn\log n 3(n/4)log(n/4)cnlogn

所以只要 c ≥ 3 / 4 c \geq 3/4 c3/4,上述不等式可以对所有充分大的 n n n 成立。

相当于主定理的Case3,因此有 T ( n ) = Θ ( f ( n ) ) = Θ ( n l o g n ) T(n)=\Theta(f (n))=\Theta(nlogn) T(n)=Θ(f(n))=Θ(nlogn)

例4

求解 T ( n ) = 2 T ( n / 2 ) + n log ⁡ n T(n)=2T(n/2)+n\log n T(n)=2T(n/2)+nlogn

解:

a = b = 2 , n log ⁡ b a = n , f ( n ) = n log ⁡ n a=b=2,n^{\log_ba}=n,f(n)=n\log n a=b=2nlogba=nf(n)=nlogn

不存在 ξ > 0 \xi >0 ξ>0 使 n log ⁡ n = Ω ( n 1 + ξ ) n \log n = \Omega( n^{1+\xi}) nlogn=Ω(n1+ξ) 成立

不存在 c < 1 c <1 c<1 使 a f ( n / b ) = 2 ( n / 2 ) log ⁡ ( n / 2 ) = n ( log ⁡ n − 1 ) ≤ c f ( n ) = c n log ⁡ n af(n/b) = 2(n/2)\log(n/2)=n(\log n-1) \leq cf(n) = cn\log n af(n/b)=2(n/2)log(n/2)=n(logn1)cf(n)=cnlogn 对所有充分大的 n n n 成立

递归树求解:

求和:

T ( n ) = n log ⁡ n + n ( log ⁡ n − 1 ) + n ( log ⁡ n − 2 ) + . . . + n ( log ⁡ n − k + 1 ) = ( n log ⁡ n ) log ⁡ n − n ( 1 + 2 + . . . + k − 1 ) = n log ⁡ 2 n − n k ( k − 1 ) / 2 = O ( n log ⁡ 2 n ) \begin{aligned} T(n) &=n\log n+n(\log n - 1) + n(\log n-2)+...+n(\log n-k+1)\\ &=(n\log n)\log n-n(1+2+...+k-1)\\ &=n\log^2n-nk(k-1)/2\\ &=O(n\log^2n) \end{aligned} T(n)=nlogn+n(logn1)+n(logn2)+...+n(lognk+1)=(nlogn)lognn(1+2+...+k1)=nlog2nnk(k1)/2=O(nlog2n)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【北大MOOC】时间复杂度的计算 的相关文章

  • std::list 中 size() 的时间复杂度

    很奇怪的 xff0c 或者说是一个不应成为问题的问题 std list 的 size 方法时间复杂度是多少 xff1f 第一感觉应该是 O 1 没错吧 xff0c 多一个变量用于储存链表长度应该是很轻易的事情 于是有了下面这段代码 xff1
  • 时间复杂度

    1 时间复杂度 在进行算法分析时 xff0c 语句总的执行次数T n xff09 是关于问题规模n的函数 xff0c 然后分析T n xff09 随n的变化 这样用大写的O来标记算法的时间复杂度 xff0c 称之为大O Order的简写 x
  • onlstm时间复杂度_CNN-LSTM | 一种融合卫星-雨量站降水数据的时空深度融合模型

    1 xff0c 不同模型的降水融合性能 表2 2001 2005年全国796个气象站不同降水校正模型的RMSE RB MAE和CC 如表2所示 xff0c 将4种模型结果与原TRMM数据进行了定量比较 xff0c RMSE和MAE值越小表明
  • 【北大MOOC】时间复杂度的计算

    文章目录 1 函数渐近的界 2 函数渐近的界的定理 3 几类重要的函数 4 序列求和的方法 4 1 等差 等比数列与调和级数 4 2 估计和式上界的放大法 4 3 用积分估计和式渐近的界 5 迭代法求解递推方程 5 1 迭代法 5 2 换元
  • 《算法二》选择排序算法及它的时间复杂度

    1 选择排序算法 选择排序算法的时间复杂度为O N 2 选择排序算法规则 1 指定位置的数和后面的数比较 2 如果指定位置的数大 则两个数交换位置 3 向后移动一个位置 和指定位置的数进行比较 假设数组大小 n 第一轮比较n 1次 最小的数
  • 插入排序算法笔记

    插入排序 1 最简单的排序算法 2 在增量排序中有很高的效率 比如已经存在成绩排序 要插入一个新的成绩并且排序 3 不需要额外的存储空间 属于内部排序 4 时间复杂度为O n 2 首先 定义数组的形式为 num MAX 1 MAX是已经定义
  • 时间复杂度-线性对数时间nlogn的一些研究

    文章目录 排序算法的时间复杂度 二叉树与 n l o g 2 n
  • 十分钟搞定时间复杂度(算法的时间复杂度)

    目录 1 什么是时间复杂度 2 时间复杂度的计算 1 单个循环体的推导法则 2 多重循环体的推导法则 3 多个时间复杂度的推导法则 4 条件语句的推导法则 3 习题练习 1 基础题 2 进阶题 3 再次进阶 1 什么是时间复杂度 算法复杂度
  • 剑指offer总结

    时间复杂度一般比空间复杂度更重要 因为改进时间对算法的要求更高 是空间换时间 还是时间换空间 一般要看具体的应用 对于普通的应用 一般是空间换时间 因为普通用户更关心速度 而且一般有足够的存储空间允许这样操作 对于嵌入式的软件 一般我们会用
  • 枚举子集复杂度 O(n^3) 证明

    困扰多年的问题 居然在学习离散数学后的一分钟内得到解决 形式化问题为 求满足 A B S A sube B sube S A B S 的有序对
  • 迭代和递归的时间复杂度分析

    文章目录 1 迭代 1 1 常数阶 1 2 线性阶 1 3 对数阶 1 4 平方阶 1 5 多个复杂度的顺序组合 1 6 多个复杂度的选择组合 2 递归 3 习题 4 答案 1 迭代 1 1 常数阶 下面算法的时间复杂度为 O 1 O 1
  • 计算时间复杂度--(简单版)

    步骤 1 找到执行次数最多的语句 2 语句执行语句的数量级 3 用O表示结果 计算时间复杂度的3个出发点 掌握这三个出发点 那么一向搞不懂的时间复杂度就可以迎刃而解啦 然后 1 用常数1取代运行时间中的所有加法常数 2 在修改后的运行次数函
  • 数据结构与算法目录

    前言 数据结构与算法系列先看这里 有助于你更好地获取内容 首先明白一个问题 为什么要研究数据结构 这是因为所有的程序本质上是对数据进行处理 如何高效的处理数据 这依赖于数据本身的结构 如类型 整型 浮点型等 维数 是否为复杂类型 结构体类型
  • 初级1 题目一 时间复杂度及示例

    1 什么是时间复杂度 常数时间的操作 一个操作如果和数据量没有关系 每次都是固定时间内完成的操作 叫做常数操作 一个算法流程中 常数操作数量的指标 就是常数操作在算法里总共有多少次 称为时间复杂度 常用O 读作big O 来表示 具体来说
  • 常见排序算法的时间复杂度、空间复杂度、稳定性比较

    常见排序算法的时间空间复杂度 稳定性比较 一 排序算法比较 注 1 归并排序可以通过手摇算法将空间复杂度降到O 1 但是时间复杂度会提高 2 基数排序时间复杂度为O N M 其中N为数据个数 M为数据位数 二 辅助记忆 1 时间复杂度记忆
  • 算法的时间复杂度、空间复杂度

    文章目录 数据结构 算法 数据结构与算法的关系 时间复杂度 O 1 O n O 1 O n O n O n 2 O log2 n 空间复杂度 O 1 O n O n 2 常用算法的时间 空间复杂度 数据结构 数据结构是计算机存储 组织数据的
  • 数据结构与算法之美

    当我们要去做一件事的时候 必须要问自己三个问题 是什么 什么是数据结构与算法 数据结构 就是一组数组的存储结构 算法 就是操作数据的一组方法 数据结构是为算法服务的 算法要作用于特定的数据结构之上 为什么需要数据结构与算法 来谈谈应用层面的
  • 数据结构学习(一)数据结构基础

    文章目录 算法与数据结构学习 一 数据结构基础 1 数据结构 1 1 什么是数据结构 1 2 学习数据结构的必要性 2 算法 2 1 怎么衡量算法的好坏 2 1 1 时间复杂度 2 1 2 空间复杂度 2 2 时间复杂度的计算 2 3 常见
  • 排序算法——比较类排序算法讲解以及c++实现

    首先我先抛一个老哥的博客 我是看着他的博客来学习理解 地址 https www cnblogs com onepixel p 7674659 html 首先说一下排序算法分为2类 一类是比较类排序算法 另一类是非比较类排序 这里主要讲常用的
  • 判断一个大于2的正整数n是否为素数的方法有多种,给出两种算法,说明其中一种算法更好的理由

    判断一个大于2的正整数n是否为素数的方法有多种 给出两种算法 说明其中一种算法更好的理由 问题解答 include

随机推荐

  • python cplex优化包工具箱教程

    python cplex优化包教程 在做优化课题时 常常需要用到优化算法 个人优化算法专栏链接如下 最优化实战例子 需要掌握一些优化算法 但是一些比较出名的优化工具箱还是要会用 今天讲解下cplex工具箱 CPLEX Optimizer 是
  • RocketMQ-实际开发中遇到的几个问题

    消息幂等性 什么是幂等性 一个操作任意执行多次与执行一次的结果相同 这个操作就是幂等 生产者发送消息之后 为了确保消费者消费成功 我们通常会采用手动签收方式确认消费 MQ就是使用了消息超时 重传 确认机制来保证消息必达 场景 1 订单服务
  • 使用Spark ALS模型 + Faiss向量检索实现用户扩量实例

    1 通过ALS模型实现用户 商品Embedding的效果 获得其向量表示 准备训练数据 M U I R 即 用户集U 商品集I 及评分数据R 1 商品集I的选择 可以根据业务目标确定商品候选集 比如TopK热度召回 或者流行度不高但在业务用
  • vite-plugin-svg-icons没有createSvgIconsPlugin成员

    这天运行项目的时候发现报错 大概意思就是在vite plugin svg icons中没有发现createSvgIconsPlugin模块 createSvgIconsPlugin is declared but its value is
  • (十四)Mybatis当中mysql以及oracle批量新增怎么做?

    这篇文章主要讲述Mybatis当中针对于Mysql和orcle数据库批量新增的做法 写的非常详细 对大家的学习或者工作具有一定的参考学习价值 需要的朋友们下面随着小编来一起学习学习吧 目录 foreach标签 Mysql当中如何做 第一种写
  • hadoop之HBase

    传统的关系型 按行存储 行结构是固定的 即使你不用 也必须空到那里 而不能没有 此非关系型数据库 是按列来存储的 不会造成空间浪费 HBase的目标是管理超级大表 数十亿行 数百万列 模仿谷歌的BigTable 底层使用HDFS Hbase
  • 体验ChatGPT在具体应用场景下的能力与表现——vuedraggable的move多次触发问题

    当下人工智能模型在满天飞 今天拿一个具体的应用场景 来体验下ChatGPT的能力与表现 看看是否能解决实际问题 顺便填一下之前遇到的一个具体的坑 vuedraggable的move多次触发问题 背景 背景是这样的 实现低代码开发平台过程中
  • 论文笔记:CVPR2021 OTA: Optimal Transport Assignment for Object Detection

    proporse 利用全局信息 一对多的进行标签匹配 label assignment related work fixed label assignment anchor based 以IOU阈值判断 anchor free 如FCOS
  • 代码托管/版本控制工具:Git的安装和使用

    目录 一 Git的下载和安装 二 Git基本配置 三 代码上传到远程仓库 四 代码下载到本地 一 Git的下载和安装 1 登录GitHub官网https github com 注册账户密码 2 登录https git scm com dow
  • 企业如何有效进行远程控制权限管理?向日葵权限管理能力解析

    企业对于远程控制这一技术的管理 主要分为两部分 一种管理的目的是提升效率 另一种的目的是降低风险 我们这里着重聊聊后者 企业管理远控行为 核心关键词是 权限 通过不同的权限策略和能力 企业可以塑造一个行之有效的远控体系 作为国民级的专业远程
  • Node.js 是个啥?

    趣学 Node js 死月 掘金小册带你重新体悟 Node js 之美 趣学 Node js 由死月撰写 1923人购买https s juejin cn ds SYVvuDw 在这里 我们先装作对 Node js 不了解 从头来过吧 你有
  • 语音识别&文本转换语音(TTS) C#代码

    前一段时间做过语音识别 因为时间比较紧 所以就在网上找了一些代码用上了 发现些的很复杂 现在想要把语音识别应用到Unity项目中来 所以又梳理了一下发现其实微软已经给我们封装了很好类库 下面是采用的微软的Speech SDK5 1 数据库采
  • C++/C#类型大小汇总

    基本类型 类型 含义 字节数 最小值 最大值 sbyte c 有符号的8位整数 1 128 127 byte c 无符号的8位整数 1 0 255 short 有符号的16位整数 2 32768 32767 ushort 16位无符号整数
  • Bluetooth 蓝牙介绍(二):低功耗蓝牙BLE协议栈

    文章目录 Physical LAYER Link LAYER 角色 地址 物理信道 Air Interface Packet PDU Advertising physical channel PDU Primary Advertising
  • android library中引入aar提示找不到

    除了在library的build gradle中加入 repositories flatDir dirs libs 注意注意 还需要在application的build gralde中加入 repositories flatDir dirs
  • 在屏幕上输出以下图案 使用两个循环可以解决 include
  • 数据链路层及交换机工作原理

    目录 一 帧格式 1 1 帧头类型字段的作用 1 2 MAC地址 1 3 MTU值 二 交换机工作原理 2 1 交换机的端口 2 2 端口状态 三 交换机基本工作模式及命令 3 1 交换机的工作模式 3 2 命令 一 帧格式 其中类型是指
  • MyEclipse 10 安装教程(公开版)

    MyEclipse 10 安装教程 公开版 一 下载安装 首先提供我使用的 myeclipse 10 安装包以及 快乐 文件https download csdn net download m0 66309026 84879064 1 双击
  • 第十三讲:MSTP技术应用

    学校因为教师的人数越来越多 部门逐渐也增多 各部门之间都已经采用了vlan技术 但为了实现公司的稳定性和消除内部网络的环路 管理员小赵配合飞越公司去实现学校内部网络时刻不间断 来保证公司网络的运行 为了解决校园网的需求 飞越公司决定采用基于
  • 【北大MOOC】时间复杂度的计算

    文章目录 1 函数渐近的界 2 函数渐近的界的定理 3 几类重要的函数 4 序列求和的方法 4 1 等差 等比数列与调和级数 4 2 估计和式上界的放大法 4 3 用积分估计和式渐近的界 5 迭代法求解递推方程 5 1 迭代法 5 2 换元