【算法与数据结构】前言

算法与数据结构是OI中不可或缺的一部分。

今天,让我们走进算法与数据结构独特世界。


性能

算法与数据结构都是完成任务的方法。
方法就要有性能。
有性能就有描述性能的语言。
这就是复杂度

复杂度的描述

由于复杂度描述的是大致性能,所以采用的是近似的方法,将复杂度用一个一个记号和一个函数表示,记号称为渐进记号。
渐进记号有三种:(实际上有六种,在这里看,但一般只用这三种)

  1. f ( n ) = Θ ( g ( n ) ) f(n)=\Theta(g(n)) f(n)=Θ(g(n)),其中 f ( n ) , g ( n ) f(n),g(n) f(n),g(n) 为函数,下同
    它表示 f ( n ) f(n) f(n) g ( n ) g(n) g(n) 的两个常数倍之间。
    形式化的, ∃ c 1 , c 2 , n 0 > 0 \exist c_1,c_2,n_0>0 c1,c2,n0>0 使得 ∀ n ≥ n 0 \forall n\ge n_0 nn0 0 ≤ c 1 ⋅ g ( n ) ≤ f ( n ) ≤ c 2 ⋅ g ( n ) 0\le c_1\cdot g(n)\le f(n)\le c_2\cdot g(n) 0c1g(n)f(n)c2g(n)
  2. f ( n ) = O ( g ( n ) ) f(n)=O(g(n)) f(n)=O(g(n))
    它表示 f ( n ) f(n) f(n) g ( n ) g(n) g(n) 的某个常数倍以下。
    形式化的, ∃ c , n 0 > 0 \exist c,n_0>0 c,n0>0 使得 ∀ n ≥ n 0 \forall n\ge n_0 nn0 0 ≤ f ( n ) ≤ c ⋅ g ( n ) 0\le f(n)\le c\cdot g(n) 0f(n)cg(n)
  3. 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) 的某个常数倍以上。
    形式化的, ∃ c , n 0 > 0 \exist c,n_0>0 c,n0>0 使得 ∀ n ≥ n 0 \forall n\ge n_0 nn0 0 ≤ c ⋅ g ( n ) ≤ f ( n ) 0\le c\cdot g(n)\le f(n) 0cg(n)f(n)

复杂度的计算简单来说如下:

  1. 舍去各项常数
  2. 舍去除最高次项外的其它项(若数据范围特殊可保留一定项
  3. 余下的即为所求

对于OI来说,算法与数据结构需要达到一定的时间和空间性能,对应的,产生了时间复杂度和空间复杂度

时间复杂度

时间复杂度是描述算法消耗时间的语言。
时间复杂度分为三种,最好时间复杂度,最坏时间复杂度,平均时间复杂度,顾名思义。
OI赛制下一般不考虑最好时间复杂度。

时间复杂度的计算

取某种情况,例如输入序列 a a a 按升序排序, ∀ n ≥ n 0 \forall n\ge n_0 nn0,在该条件下,有执行次数始终为 n ( n + 1 ) 2 \frac{n(n+1)}2 2n(n+1),可以将这种情况下的时间复杂度表达为 n ( n + 1 ) 2 = Θ ( n 2 ) \frac{n(n+1)}2=\Theta(n^2) 2n(n+1)=Θ(n2)
同理,我们可以在分析各种情况的基础下计算出三种时间复杂度,一般取平均时间复杂度和最坏时间复杂度来比较算法的速度。

空间复杂度

空间复杂度是描述算法消耗空间的语言。
空间复杂度直接定义对变量的数量计算即可。
空间复杂度非常简单,就不多说了。


N e x t : Next: Next:

算法前言

数据结构前言

你可能感兴趣的:(算法,数据结构,算法,数据结构,复杂度,OI)