INF421 - Amphi 2 Divide and Conquer

0.Quizz回顾

在数组中同时寻找最大和最小元素

  1. 将n个元素两两分为一组,一组有两个元素,一共有 n 2 \frac{n}{2} 2n
  2. 将每组中的元素按从小到达排序。 ⌊ n 2 ⌋ \left \lfloor \frac{n}{2} \right \rfloor 2n次比较。
  3. 在最小的元素中寻找最小的元素, ⌈ n 2 ⌉ − 1 \left \lceil \frac{n}{2} \right \rceil-1 2n1次比较
  4. 在最大的元素中寻找最小的元素, ⌈ n 2 ⌉ − 1 \left \lceil \frac{n}{2} \right \rceil-1 2n1次比较。
    所以一共要 ⌈ 3 ∗ n 2 ⌉ − 2 \left \lceil 3*\frac{n}{2} \right \rceil-2 32n2次比较。

Big-Oh Notation (Landau Symbols)

定义:
f,g real function
f = O ( g ) f=O(g) f=O(g)意味着 ∃ M , x 0 ∈ R  使得  ∣ f ( x ) ∣ ≤ M ∣ g ( x ) ∣ ∀ x ≥ x 0 \exists M,x_0 \in \mathbb{R} \text{ 使得 } |f(x)|\leq M|g(x)| \forall x \geq x_0 M,x0R 使得 f(x)Mg(x)xx0

注意:

  1. = = =不是symmetric的,因为 2 n = O ( n ) , 3 n = O ( n ) 2n=O(n),3n=O(n) 2n=O(n),3n=O(n)不能推出 2 n = 3 n 2n=3n 2n=3n

其他的:
f = Ω ( g ) : = ⇔ g = O ( f ) f = \Omega(g) :=\Leftrightarrow g = O(f) f=Ω(g):=g=O(f)
f = Θ ( g ) : = ⇔ f = O ( g ) ∧ f = Ω ( g ) f = \Theta(g) :=\Leftrightarrow f = O(g) \wedge f=\Omega(g) f=Θ(g):=f=O(g)f=Ω(g)
f = o ( g ) : = ⇔ ∀ ϵ > 0 ∃ x 0 ∈ R ∀ x ≥ x 0 : ∣ f ( x ) ∣ ≤ ϵ ∗ ∣ g ( x ) ∣ f = o(g) :=\Leftrightarrow \forall \epsilon > 0 \exists x_0 \in \mathbb{R} \forall x \geq x_0: |f(x)| \leq \epsilon*|g(x)| f=o(g):=ϵ>0x0Rxx0:f(x)ϵg(x)
f = w ( g ) : = ⇔ g = o ( f ) f = w(g) :=\Leftrightarrow g = o(f) f=w(g):=g=o(f)

1. Introduction to Divide and Conquer

基本思路:

  1. 将对于n的问题变成independent的n/2问题
  2. solve n/2的问题(recursively
  3. merge两个n/2的结果

Mergesort

目的:对a[0…n]进行排序
Sol:

  1. if(n==1) return a
  2. split b : = a [ 0 , … , ⌈ n 2 ⌉ − 1 ] b:=a[0,\dots,\left \lceil \frac{n}{2} \right \rceil -1] b:=a[0,,2n1], c : = a [ ⌈ n 2 ⌉ , … , n − 1 ] c:=a[\left \lceil \frac{n}{2} \right \rceil,\dots,n-1] c:=a[2n,,n1]
  3. Recursion: Mergesort(b),Mergesort(a)
  4. Merge(可以用Recursive的方式实现)

Analysis of MergeSort (对Recursive algs的分析)

Termination:[Induction]

  1. 用第二数学归纳法假设对 ∀ k < n \forall k<n k<n的数组用Mergesort都Terminate。
  2. 则Mergesort(a[n])调用的 a [ 0 , … , ⌈ n 2 ⌉ − 1 , a [ ⌈ n 2 ⌉ , … , n − 1 ] a[0,\dots,\left \lceil \frac{n}{2} \right \rceil -1, a[\left \lceil \frac{n}{2} \right \rceil,\dots,n-1] a[0,,2n1,a[2n,,n1] Terminates
  3. 最后的Merge Terminates,因为我们用Recursive的方法写,每次都会减少一个元素。

Correctness:[Induction]

  1. 用第二数学归纳法假设对 ∀ k < n \forall k<n k<n的数组用Mergesort都Corrcet。
  2. 则Mergesort(a[n])调用的 a [ 0 , … , ⌈ n 2 ⌉ − 1 , a [ ⌈ n 2 ⌉ , … , n − 1 ] a[0,\dots,\left \lceil \frac{n}{2} \right \rceil -1, a[\left \lceil \frac{n}{2} \right \rceil,\dots,n-1] a[0,,2n1,a[2n,,n1] Corrcet.
  3. 最后的Merge根据我们的做法可以保证顺序,所以Correct

Complexity: [看递推式]
看比较次数,这里的 ≥ \geq 是因为我们在merge的过程中,最坏的情况是比较n-1次。
T ( n ) ≤ T ( ⌈ n 2 ⌉ ) + T ( ⌊ n 2 ⌋ ) + n − 1 T(n) \leq T(\left \lceil \frac{n}{2} \right \rceil ) + T(\left \lfloor \frac{n}{2} \right \rfloor ) + n -1 T(n)T(2n)+T(2n)+n1
T ( 1 ) = 0 T(1)=0 T(1)=0

求解Reccurence 的方法1:Guess & Check

  • Guess
    T ( n ) ≤ 2 ∗ T ( n 2 ) + n ≤ n ∗ T ( 1 ) + l o g 2 ( n ) ∗ n \begin{aligned} T(n) &\leq 2*T(\frac{n}{2})+n\\ &\leq n*T(1)+log_2(n)*n\\ \end{aligned} T(n)2T(2n)+nnT(1)+log2(n)n

  • Check
    根据上面的式子,我们猜测 T ( n ) ≤ U ( n ) : = n ⌈ l o g 2 ( n ) ⌉ T(n) \leq U(n):=n\left \lceil log_2(n) \right \rceil T(n)U(n):=nlog2(n)(因为 l o g 2 ( n ) log_2(n) log2(n)不行)
    下用数学归纳法给出证明

  1. n = 1 n=1 n=1时, T ( 1 ) = 0 T(1)=0 T(1)=0,所以成立。
  2. 假设猜测对于任意 k < n k < n k<n都成立
  3. 此时
    T ( n ) ≤ T ( ⌈ n 2 ⌉ ) + T ( ⌊ n 2 ⌋ ) + n ≤ ⌈ n 2 ⌉ ⌈ l o g 2 ⌈ n 2 ⌉ ⌉ + ⌊ n 2 ⌋ ⌈ l o g 2 ( ⌊ n 2 ⌋ ) ⌉ + n ≤ n + n ⌈ l o g 2 ( n / 2 ) ⌉ ≤ n ⌈ l o g 2 ( n ) ⌉ \begin{aligned} T(n) &\leq T(\left \lceil \frac{n}{2} \right \rceil ) + T(\left \lfloor \frac{n}{2} \right \rfloor ) + n \\ &\leq \left \lceil \frac{n}{2} \right \rceil \left \lceil log_2{\left \lceil \frac{n}{2} \right \rceil} \right \rceil + \left \lfloor \frac{n}{2} \right \rfloor \left \lceil log_2(\left \lfloor \frac{n}{2} \right \rfloor) \right \rceil +n \\ &\leq n+ n \left \lceil log_2(n/2) \right \rceil\\ &\leq n \left \lceil log_2(n) \right \rceil\\ \end{aligned} T(n)T(2n)+T(2n)+n2nlog22n+2nlog2(2n)+nn+nlog2(n/2)nlog2(n)

用到了
⌈ l o g 2 ⌈ n 2 ⌉ ⌉ = ⌈ l o g 2 n 2 ⌉ \left \lceil log_2{\left \lceil \frac{n}{2} \right \rceil} \right \rceil = \left \lceil log_2{ \frac{n}{2}} \right \rceil log22n=log22n 🌟

2. 🌟Master Theorem

我们将一个大小为n的问题分为a个大小为 n b \frac{n}{b} bn的子问题。
具体来说,

  • a ∈ N ≥ 1 , K ∈ N ≥ 1 , b ∈ R > 1 , d ∈ R > 0 a \in \mathbb{N}_{\geq 1},K \in \mathbb{N}_{\geq 1}, b \in \mathbb{R}_{>1}, d \in \mathbb{R}_{>0} aN1,KN1,bR>1,dR>0
  • Base case:解决一个size为1的case所需要的时间为K
  • Recursion:
    • 我们递归解决 a a a个子问题
    • 每个子问题的大小为 n b \frac{n}{b} bn
  • 将解合并在一起需要的复杂度为 Θ ( n d ) \Theta(n^d) Θ(nd)

例如,对于MergeSort而言,我们每次分成 a = 2 a=2 a=2个大小为 n 2 \frac{n}{2} 2n b = 2 b=2 b=2的子问题,base case的复杂度为 K = 0 K=0 K=0,Merge的复杂度为 Θ ( n ) \Theta(n) Θ(n)

Recursion Tree

【Recursion Tree】
🌟 用上了 l o g b ( n ) l o g n ( a ) = l o g b ( a ) log_b(n) log_n(a) = log_b(a) logb(n)logn(a)=logb(a),所以有 a l = a l o g b ( n ) = n l o g b ( a ) = n c a^l=a^{log_b(n)}=n^{log_b(a)}=n^c al=alogb(n)=nlogb(a)=nc

[回顾] 等比数列
这里我们关心的是asymptotique的结果

  • q > 1 : ∑ i = 0 k − 1 q i = Θ ( q k − 1 ) q > 1 : \sum_{i=0}^{k-1} q^i = \Theta(q^{k-1}) q>1:i=0k1qi=Θ(qk1)
  • q = 1 : ∑ i = 0 k − 1 q i = k q = 1 : \sum_{i=0}^{k-1} q^i = k q=1:i=0k1qi=k
  • q < 1 : ∑ i = 0 k − 1 q i = Θ ( q 0 ) = Θ ( 1 ) q < 1 : \sum_{i=0}^{k-1} q^i = \Theta(q^0)=\Theta(1) q<1:i=0k1qi=Θ(q0)=Θ(1)

回到我们的Recursion Tree
【Amphi 2 Recurssion Tree 结果】
Rq:

  1. 以上分析对于n不是b的次数也成立
  2. 以上分析对于Stop the recursion earlier than at problem size 1也成立

Master Theorem❓

【Master Theorem】

3. 例子:大数乘法与Karatsuba’s Trick

我们目前已经证明了Divide and Conquer原则上怎么可以运作,但是我们并不知道怎么设计一个Divide and Conquer的算法,为此,我们研究三个问题:

  • Fast Multiplication of Large Numbers
    • 这个问题的难点在于如何在子问题做到比Naive更好
  • Closet pair of points
    • 这个问题的难点是如何构建Recursion,即如何merge两个不同的解
  • Selection

3.1 Multiplying Large Numbers

问题:

  • x = ( x n − 1 x n − 2 … x 0 ) B = ∑ i = 0 n − 1 x i B i x=(x_{n-1}x_{n-2}\dots x_0)_B = \sum_{i=0}^{n-1}x_iB^i x=(xn1xn2x0)B=i=0n1xiBi
  • y = ( y n − 1 y n − 2 … y 0 ) B = ∑ i = 0 n − 1 y i B i y=(y_{n-1}y_{n-2}\dots y_0)_B = \sum_{i=0}^{n-1}y_iB^i y=(yn1yn2y0)B=i=0n1yiBi
  • 求x*y

Naive Solution Θ ( n 2 ) \Theta(n^2) Θ(n2)

  • 因为 x y = ∑ i = 0 n − 1 ∑ j = 0 n − 1 x i y j B i + j xy=\sum_{i=0}^{n-1}\sum_{j=0}^{n-1}x_iy_jB^{i+j} xy=i=0n1j=0n1xiyjBi+j

  • Naive Divide and Conquer Θ ( n 2 ) \Theta(n^2) Θ(n2)

  • Divide
    假设n是偶数,令 m = n / 2 m=n/2 m=n/2
    x = x b B m + x a x=x_bB^m+x_a x=xbBm+xa, x b = ( x n − 1 x n − 2 … x m ) B , x a = ( x m − 1 x n − 2 … x 0 ) B x_b=(x_{n-1}x_{n-2}\dots x_m)_B,x_a=(x_{m-1}x_{n-2}\dots x_0)_B xb=(xn1xn2xm)B,xa=(xm1xn2x0)B
    y = y b B m + y a y=y_bB^m+y_a y=ybBm+ya, y b = ( y n − 1 y n − 2 … y m ) B , y a = ( y m − 1 y n − 2 … y 0 ) B y_b=(y_{n-1}y_{n-2}\dots y_m)_B,y_a=(y_{m-1}y_{n-2}\dots y_0)_B yb=(yn1yn2ym)B,ya=(ym1yn2y0)B

  • Recurse
    运用递归计算 x b y b , x a y b , x b y a , x a y a x_by_b,x_ay_b,x_by_a,x_ay_a xbyb,xayb,xbya,xaya这四个大数的乘法
    所以 a = 4 , b = 2 a=4,b=2 a=4,b=2

  • Merge
    x y = x b y b B 2 m + ( x a y b + x b y a ) B m + x a y a xy = x_by_bB^{2m}+(x_ay_b+x_by_a)B^m+x_ay_a xy=xbybB2m+(xayb+xbya)Bm+xaya

  • 分析
    运用Master Theorem知 a = 4 , b = 2 , d = 1 a=4,b=2,d=1 a=4,b=2,d=1,因为 a b d > 1 \frac{a}{b^d}>1 bda>1,所以复杂度为 O ( n c ) = O ( n l o g b ( a ) ) = O ( n 2 ) O(n^c)=O(n^{log_b(a)})=O(n^2) O(nc)=O(nlogb(a))=O(n2)

Karatsuba: Θ ( n l o g 2 ( 3 ) ) \Theta(n^{log_2(3)}) Θ(nlog2(3))

  • Divide
    假设n是偶数,令 m = n / 2 m=n/2 m=n/2
    x = x b B m + x a x=x_bB^m+x_a x=xbBm+xa, x b = ( x n − 1 x n − 2 … x m ) B , x a = ( x m − 1 x n − 2 … x 0 ) B x_b=(x_{n-1}x_{n-2}\dots x_m)_B,x_a=(x_{m-1}x_{n-2}\dots x_0)_B xb=(xn1xn2xm)B,xa=(xm1xn2x0)B
    y = y b B m + y a y=y_bB^m+y_a y=ybBm+ya, y b = ( y n − 1 y n − 2 … y m ) B , y a = ( y m − 1 y n − 2 … y 0 ) B y_b=(y_{n-1}y_{n-2}\dots y_m)_B,y_a=(y_{m-1}y_{n-2}\dots y_0)_B yb=(yn1yn2ym)B,ya=(ym1yn2y0)B
  • Recurse:
    计算 x b y b , x a y a , ( x a + x b ) ( y a + y b ) x_by_b,x_ay_a,(x_a+x_b)(y_a+y_b) xbyb,xaya,(xa+xb)(ya+yb)
  • Merge
    x y = x b y b B 2 m + ( ( x a + x b ) ( y a + y b ) − x b y b − x a y b ) B m + x a y a xy = x_by_bB^{2m}+((x_a+x_b)(y_a+y_b)-x_by_b-x_ay_b)B^m+x_ay_a xy=xbybB2m+((xa+xb)(ya+yb)xbybxayb)Bm+xaya
  • 分析
    运用Master Theorem知 a = 3 , b = 2 , d = 1 a=3,b=2,d=1 a=3,b=2,d=1,因为 a b d > 1 \frac{a}{b^d}>1 bda>1,所以复杂度为 O ( n c ) = O ( n l o g b ( a ) ) = O ( n l o g 2 ( 3 ) ) O(n^c)=O(n^{log_b(a)})=O(n^{log_2(3)}) O(nc)=O(nlogb(a))=O(nlog2(3))

3.2 Closet pair of points O(nlogn) [Poly]

问题描述
在一个平面上给定 n n n个点 p i = ( x i , y i ) p_i=(x_i,y_i) pi=(xi,yi),目的是找到两个点 p i , p j p_i,p_j pi,pj它们两个之间的欧几里得距离最短。

解法1:暴力配对

此时时间复杂度为 O ( n 2 ) O(n^2) O(n2)

3.3 Computing the Median[Selection Problem]

定义:

  • 第k小的元素
    一个元素a[i]被称为第k小的元素,如果存在 J ⊆ [ n ] : = { 1 , 2 , … , n } J\subseteq [n]:=\{1,2,\dots,n\} J[n]:={1,2,,n}使得
    ∣ J ∣ = k − 1 ∀ j ∈ J : a [ j ] ≤ a [ i ] ∀ j ∈ [ n ] ∖ ( J ∪ { i } ) : a [ j ] ≥ a [ i ] \begin{aligned} |J| & = k-1 \\ \forall j \in J &: a[j] \leq a[i] \\ \forall j \in [n]\setminus(J\cup \{i\}) &: a[j] \geq a[i] \\ \end{aligned} JjJj[n](J{i})=k1:a[j]a[i]:a[j]a[i]
  • rank:如果a中都是distinct的元素,则每一个元素 a [ i ] a[i] a[i]都对应一个k,意味着它是第k小的元素,则k被称为它的rank。

Selection 问题表述
求一个数组a中的第k小的元素。
特别的,如果数组下标从1开始,则 k = ⌈ n 2 ⌉ k=\left \lceil \frac{n}{2} \right \rceil k=2n对应着求中位数的问题。[对于偶数,有时候我们定义中间两数字的平均值为median]

解法1:Selection via Sorting

Selection via Sorting Θ ( n l o g n ) \Theta(nlogn) Θ(nlogn)

Rq:

  1. 在要多次求不同k小的元素的问题中,这个方法刚好
  2. 但是当n比较大,如果没有 l o g ( n ) log(n) log(n)会更好。

解法2:Naive Divide and Conquer

Divide and Conquer

  • Divide:
    将a分成b和c两个部分,b中所有的元素都小于等于c中所有元素。
    我们可以用pivot a[p]来实现:左边的b全部严格小于a[p],中间的元素等于a[p],右边的元素严格大于a[p]。
  • Recurse:
    • 如果b中有大于等于k个元素,则在b中寻找第k大的元素。Select(b,k) [下面的伪代码中分出了a[p]恰好为第k小的情况]
    • 反之,我们在c中寻找第(k-len(b)) 大的元素。Select(a,k-len(b))

【Pseudocode for Selection Pbm】
分析

对于任意一种选择pivot p的方式

  1. Select(a,k) terminates
  2. 最多用O(n^2) comparaisons
  3. Is correct

Dem:

  • Termination:🌟
    The recursive call terminates by inuction (对于Select(a,k)中a的长度运用归纳法), the rest terminates trivally
  • Correctness
    By induction
  • Runtime:
    T ( n ) ≤ n − 1 + T ( n − 1 ) , T ( 1 ) = 0 T(n)\leq n-1+T(n-1),T(1)=0 T(n)n1+T(n1),T(1)=0我们可以用Guess&Check证明 U ( n ) = 0 + 1 + ⋯ + ( n − 1 ) = O ( n 2 ) U(n)=0+1+\dots+(n-1)=O(n^2) U(n)=0+1++(n1)=O(n2) T ( n ) T(n) T(n)的一个Upper Bound

因此我们需要一种更好地找到pivot P的方法,一种最好的想法就是找到最中间的元素,但可惜我们的目的就是求Median。
Sol: Median-of-Medians

Median-of-Medians:更好的pivot

基本想法:

  • 将a,5个一组,分成 ⌊ n 5 ⌋ \left \lfloor \frac{n}{5} \right \rfloor 5n组。
  • 每组中花 K = 6 K=6 K=6次比较找到每组中的中位数
  • 通过递归找到这 ⌊ n 5 ⌋ \left \lfloor \frac{n}{5} \right \rfloor 5n个中位数中的中位数(Median of these medians, MoM)并用它作为pivot。

示例(这里我们为了方便演示每列大小顺序都拍好了,横向也排好了,红色的是中位数,5*20)
在这里插入图片描述
关于MoM的rank k的Lemma:

The MoM has a rank k with 0.3 n − 1.2 ≤ k ≤ 0.7 n − 0.3 0.3n-1.2\leq k \leq 0.7n-0.3 0.3n1.2k0.7n0.3
这里我们可以发现k已经很靠中间了。

构造运用MoM的Selection Algo的复杂度递推式

【建立递推式】

求解递推式

这里T(n)应该代表从n个元素中找到中位数的开销, n − 1 n-1 n1是因为我们要根据pivot得到b和c。
【求解递推式】
结果:

The MoM algorithm solves the selection problem with O(n) comparisons.

一些改进和Stronger Bounds

首先我们可以对我们的方法进行更细致的分析

  • 如K=6
    在这里插入图片描述
  • T ( n ) ≤ T ( 0.2 n ) + T ( 0.7 n ) + 2.2 n T(n)\leq T(0.2n)+T(0.7n)+2.2n T(n)T(0.2n)+T(0.7n)+2.2n,因此 T ( n ) ≤ 22 n T(n)\leq22n T(n)22n (见Poly)
  • 因此当 22 ≤ l o g 2 ( n ) 22 \leq log_2(n) 22log2(n) n ≥ 2 22 n\geq 2^{22} n222时,MoM比sorting更好。

其他人的工作:
在这里插入图片描述

4. Lower Bounds

目的:

证明没有一个Algorithm能在worst case下有一个比 Ω ( . . . ) \Omega(...) Ω(...)更好的表现。
这个问题至少需要多少的复杂度才能解决

3 ways to show bounds

“Reading the Input” Lower Bound

每一个算法都至少需要读入数据。

例子:两个n*n的矩阵乘法 Ω ( n 2 ) \Omega(n^2) Ω(n2)

证明Selection Problem的Lower Bound为 Ω ( n ) \Omega(n) Ω(n)
【diapo】
🌟这类的证明思路基本是

  1. 假设一个算法可以用少于N次就可以完成任务,因此可以找到一个元素 a [ i ] a[i] a[i]没有在这个算法中读取
  2. 通过对 a [ i ] a[i] a[i]进行改变得到两个不同的问题(它们答案也不同),鉴于算法只读取了n-1个元素的数据,所以这个算法对两个不同问题都有相同的答案 -> Absurde

Information-theoretic Lower Bound

如果一个问题有N个possible solutions,算法的每一步最多有k个结果(信息),则 l o g k N log_kN logkN是lower bound。[可以用树来思考]

例子:Sorting an array of length n via comparaison-based algorithms:

  • 长度为n的array一共有n!种排列方式
  • 每一种排列方式只有2种结果
  • 所以要知道所有的可能性,需要用 l o g 2 n ! ≥ n l o g 2 ( n ) − n l o g 2 ( e ) + 0.5 l o g 2 ( 2 ∗ π ∗ n ) log_2n! \geq nlog_2(n)-nlog_2(e)+0.5log_2(2*\pi*n) log2n!nlog2(n)nlog2(e)+0.5log2(2πn)
  • 最后一步用上了🌟斯特林公式: n ! ≈ 2 π n   ( n e ) n . n! \approx \sqrt{2\pi n}\, \left(\frac{n}{e}\right)^{n}. n!2πn (en)n.
    Rq:
    这个Lower Bound并不是很紧,因为对于13个元素,我们需要34次比较,但是 ⌈ l o g 2 ( 13 ) ⌉ = 13 \left \lceil log_2(13) \right \rceil = 13 log2(13)=13

Lower Bound for Sorting 正式证明:
【Amphi 2 Lower Bound for Sorting】

依旧延续之前的思路,
假设可以比这个Lower Bound少一次,则可以找到两个不同的输入使得他们经过这个算法最后得到的结果是相同的,矛盾。

Custom-Tailored Lower Bounds

这里我们需要结合具体问题的性质。

例子:Merge操作

  • Reading the input argument:鉴于我们需要读取所有的数据,所以O(2n)
  • Information-theoretic argument
    • ( 2 n n ) = Θ ( 2 2 n n − 1 / 2 ) \binom{2n}{n}=\Theta(2^{2n}n^{-1/2}) (n2n)=Θ(22nn1/2)
    • 2 results per comparaison (如果比较的两个元素不同的话)
    • 最少需要 l o g 2 ( ( 2 n n ) ) = 2 n − 0.5 ∗ l o g 2 ( n ) − O ( 1 ) log_2(\binom{2n}{n})=2n-0.5*log_2(n)-O(1) log2((n2n))=2n0.5log2(n)O(1)次比较

证明:
【Amphi 2 Lower Bound for Merging】

依旧使用反证法,假设我们的算法还可以再快一点,然后修改某一个没有被看到的数据,两个不同输入->同样的输出->导致矛盾。

Hot Topic: Conditional Lower Bounds

例子 Longest Common Subsequence [我们只有Conditional Lower Bounds]
如,如果我们可以用 O ( n 2 − ϵ ) O(n^{2-\epsilon}) O(n2ϵ)解决LCS问题,则我们可以用 O ( 2 ( 1 − ϵ ) n ) O(2^{(1-\epsilon)n}) O(2(1ϵ)n)的时间解决这个问题。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值