离散数学——函数增长

离散数学——函数增长

O O O 记法

定义:函数 f f f g g g 都是实值函数,我们说 f ( x ) f(x) f(x) O ( g ( x ) ) O(g(x)) O(g(x)) ,如果存在常数 C C C k k k ,使得 ∣ f ( x ) ∣ ≤ C ∣ g ( x ) ∣ |f(x)| \leq C|g(x)| f(x)Cg(x) x > k x \gt k x>k 的时候。

这说明, f ( x ) f(x) f(x) 的增长速率没有 g ( x ) g(x) g(x) 乘以一个常数快。

注意,一对满足条件的 ( C , k ) (C,k) (C,k) 称为一个 见证 。注意如果 f ( x ) f(x) f(x) O ( g ( x ) ) O(g(x)) O(g(x)) 那么满足条件的一对见证不止一个。

有时也写作是 f ( x ) = O ( g ( x ) ) f(x) = O(g(x)) f(x)=O(g(x)) ,有时也写作是 f ( x ) ∈ O ( g ( x ) ) f(x) \in O(g(x)) f(x)O(g(x)) 因为 O ( g ( x ) ) O(g(x)) O(g(x)) 也可以代表满足 f ( x ) = O ( g ( x ) ) f(x) = O(g(x)) f(x)=O(g(x)) 的所有 f ( x ) f(x) f(x) 构成的集合。

几类重要的大 O O O 估计

多项式估计是经常出现的估计函数,下面的定理给出了多项式估计的基本方法:

定理:让 f ( x ) = a n x n + … + a 1 x + a 0 f(x) = a_n x^n + \ldots + a_1 x + a_0 f(x)=anxn++a1x+a0 ,那么 f ( x ) = O ( x n ) f(x) = O(x^n) f(x)=O(xn)

其中,对于 n ! n! n! 的估计为:

n ! = 1 × 2 × … × n ≤ n × n × … × n = n n = O ( n n ) n! = 1 \times 2 \times \ldots \times n \leq n \times n \times \ldots \times n = n^n = O(n^n) n!=1×2××nn×n××n=nn=O(nn)

因此, log ⁡ n ! = O ( n log ⁡ n ) \log n! = O(n \log n) logn!=O(nlogn)

通过换底公式我们知道, log ⁡ n = O ( n ) \log n = O(n) logn=O(n)

另外,指数增长永远大于多项式增长。两个指数增长满足 a > b > 1 a \gt b \gt 1 a>b>1 ,那么 b n = O ( a n ) b ^n = O(a^n) bn=O(an) 反之永远不成立。

组合函数的大 O O O 估计

下面的定理给出了两个函数相加的大 O 估计:

定理:若 f 1 ( x ) = O ( g 1 ( x ) ) f_1(x) = O(g_1(x)) f1(x)=O(g1(x)) f 2 ( x ) = O ( g 2 ( x ) ) f_2(x) = O(g_2(x)) f2(x)=O(g2(x)) 那么 ( f 1 + f 2 ) ( x ) = O ( max ⁡ ( ∣ g 1 ( x ) ∣ , ∣ g 2 ( x ) ∣ ) ) (f_1 + f_2)(x) = O(\max(|g_1(x)|,|g_2(x)|)) (f1+f2)(x)=O(max(g1(x),g2(x)))

g 1 g_1 g1 g 2 g_2 g2 相同时,有下面的推论:

推论: 若 f 1 ( x ) = O ( g ( x ) ) f_1(x) = O(g(x)) f1(x)=O(g(x)) f 2 ( x ) = O ( g ( x ) ) f_2(x) = O(g(x)) f2(x)=O(g(x)) 那么 ( f 1 + f 2 ) ( x ) = O ( g ( x ) ) (f_1 + f_2)(x) = O(g(x)) (f1+f2)(x)=O(g(x))

很显然,当两个函数相乘的时候的无穷大估计也是相乘:

定理:若 f 1 ( x ) = O ( g 1 ( x ) ) f_1(x) = O(g_1(x)) f1(x)=O(g1(x)) f 2 ( x ) = O ( g 2 ( x ) ) f_2(x) = O(g_2(x)) f2(x)=O(g2(x)) 那么 ( f 1 f 2 ) ( x ) = O ( g 1 ( x ) g 2 ( x ) ) (f_1 f_2)(x) = O(g_1(x) g_2(x)) (f1f2)(x)=O(g1(x)g2(x))

Ω \Omega Ω 和 大 Θ \Theta Θ 记法

另外两个相较于大 O O O 估计不常用的是大 Ω \Omega Ω 和 大 Θ \Theta Θ 记法。

定义:函数 f f f g g g 都是实值函数,我们说 f ( x ) f(x) f(x) Ω ( g ( x ) ) \Omega (g(x)) Ω(g(x)) ,如果存在常数 C C C k k k ,使得 ∣ f ( x ) ∣ ≥ C ∣ g ( x ) ∣ |f(x)| \geq C|g(x)| f(x)Cg(x) x > k x \gt k x>k 的时候。

这表示,大 O O O 能给出函数增长的上界,而大 Ω \Omega Ω 能给出函数增长的下界。

定义:函数 f f f g g g 都是实值函数,我们说 f ( x ) f(x) f(x) Θ ( g ( x ) ) \Theta (g(x)) Θ(g(x)) ,如果 f ( x ) = O ( g ( x ) ) , f ( x ) = Ω ( g ( x ) ) f(x) = O(g(x)),f(x) = \Omega (g(x)) f(x)=O(g(x)),f(x)=Ω(g(x)) ,也称 f ( x ) f(x) f(x) g ( x ) g(x) g(x)同序 的函数。

这说明,大 Θ \Theta Θ 记法给出了一个函数增长的准确界,同时如果 f ( x ) = Θ ( g ( x ) ) f(x) = \Theta (g(x)) f(x)=Θ(g(x)) 那么 g ( x ) = Θ ( f ( x ) ) g(x) = \Theta (f(x)) g(x)=Θ(f(x))

定理:让 f ( x ) = a n x n + … + a 1 x + a 0 f(x) = a_n x^n + \ldots + a_1 x + a_0 f(x)=anxn++a1x+a0 ,那么 f ( x ) = Θ ( x n ) f(x) = \Theta (x^n) f(x)=Θ(xn)

P 和 NP 类问题

如果一个问题有多项式时间复杂度的算法,我们说这个问题是 容易的

如果这个问题不存在算法能够解决,那么称这个问题是 不可解的 。例如停机问题。

如果一个算法有多项式时间复杂度的算法,那么称为 P 问 题 P 问题 P

如果一个问题没有多项式时间复杂度的算法,但是对于验证一个答案,存在多项式时间的算法,称这个问题为 NP 问题 ,例如满足性问题。

如果任何一个 NP 问题都能通过一个多项式时间算法转换为某个 NP 问题,那么这个 NP 问题就称为 NPC 问题

NPC 问题的存在说明如果任何一个 NPC 问题是 P P P 类问题,那么所有的问题都是 P 类问题。

现在已知的 NPC 问题有 300 多个,但是满足性问题是第一个已知的 NPC 问题。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值