渐进符号
符号O:
比如说这里有个式子: f(n)=O(g(n)) 他表达了函数f(n)和g(n)的一种关系 什么关系呢? 数学定义如下:
存在c>0 n0>0 使得 n>=n0时:
0<=f(n)<=c * g(n) 恒成立.
我们来用这个式子证明 100(n^2)=O(n^3) 其中 f(n) 是100(n^2) g(n) 是n^3
要证明 存在c>0 n0>0 使得 n>=n0时:
f(n)<=c * g(n) 即 100(n^2)<=c*(n^3) 恒成立.
哈哈既然是说存在一个c>0 我们就取c=100 等式两边的 100消掉 即 n^2<=n^3
可以看到 n0就算取1 n^2<=n^3 也是恒成立的.
所以 100(n^2)=O(n^3).
那么这个渐进符号是为了解决什么问题呢?
比如说我们有两个排序算法
算法a 他的执行时间满足 y=f(n) n是要排序的数的个数 即为输入规模
算法b 他的执行时间满足 y=g(n)
如果 f(n)和g(n)满足: f(n)=O(g(n))
那么我们可以证明 存在n0>0 使得g(n)>=f(n) 恒成立.
也就是说 当输入规模越来越大超过一定的规模时 算法b 消耗的时间 大于等于 算法a 消耗的时间
算法里面喜欢用算法随着问题规模变大 消耗时间的变化速度来描述算法的有效性 名曰 算法的时间复杂度
这是因为我们无法比较 几个算法实际运行的速度 因为咱这里有不同的 电脑 不同的 问题规模 这都是变数 不好比
不过时间复杂度还是很好用的
符号Ω: f(n)=Ωg(n)
存在c>0 n0>0 使得 n>=n0时:
0<=c*g(n)<=f(n) 恒成立.
时间: 2024-11-07 23:35:42