空间复杂度
- 该程序运行所需内存大小
程序所需要的空间主要由以下部分构成:
- 指令空间( instruction space ):是指编译之后的程序指令所需要的存储空间。
- 数据空间( data space ):是指所有常量和变量值所需要的存储空间。它由两个部分构成: 1. 常量和简单变量所需要的存储空间。2. 动态数组和动态类实例等动态对象所需要的空间。
- 环境栈空间( enyjronment stack space ):用来保存暂停的函数和方法在恢复运行时所需要的信息。
- 每当一个函数被调用时, 下面的数据将被保存在环境栈中:
●返回地址。
●正在调用的函数的所有局部变量的值以及形式参数的值(仅对递归函数而言)。
可以把一个程序所需要的空间分成两部分:
- 固定部分。它独立于实例特征。这一部分通常包括指令空间(即代码空间)、简单变量空间和常量空间等。
- 可变部分。它由动态分配空间构成和递归栈空间构成。前者在某种程度上依赖实例特征,而后者主要依赖实例特征。任意程序P所需要的空间可以表示为: c+S (实例特征)。
时间复杂度
- 运行程序所需要的时间
- 估算一个程序或函数的时间复杂度,一种方法是选择一种或多种关键操作, 例如:加、乘、比较等,然后确定每一种操作的执行次数。使用这种方法成功与否取决于是否能够找到耗时最大的操作。
- 一个程序步(a program step)可以大概地定义为一个语法或语义上的程序片段,该片段的执行时间独立于实例特征。
- Tsum(n)是函数sum从初始调用到结束调用时stepCount的增值。在分析一个递归函数的步数时,通常可以得到一个递归公式(例如,Tsum (n)=m +Tsum (n-1), n>0,且sum (0)=m)。
渐进记法
-
主要确定的是:复杂函数中的最大项
-
令 p(n)和q(n)是两个非负函数。称p(n)渐近地大于q(n) ( p(n)渐近地优于
q(n)),当且仅当:
称q(n)渐近地小于p(n)。当且仅当任何一个都不是渐近地大于另一个,称p(n)渐近地等于q(n)。
渐进顺序
- 1 < log n < n< nlog n< n^ 2 < n^ 3 < 2 ^n <n!
大O记法
- 渐近记法( asymptotic notation )描述的是大实例特征的时间或空间复杂度。我们将用它表示法f(n)=O(g(n)) :代表f(n)渐近小于或等于g(n)。
- 例子:
渐进记法:Ω,Θ
- 记法f(n)=Ω(g(n)) :表示f(n)渐近大于或等于g(n)。因此,在渐近意义上,g(n) 是f(n)的下界。
- 记法f(n)= Θ(g(n)):表示f(n)渐近等于8(n)。
- 例子: