目录

​分析算法时间复杂度的基本方法​

​例题​

​算法时间复杂度计算​

​算法空间复杂度​

​算法1​

​算法2​


分析算法时间复杂度的基本方法

1.找出语句频度最大的那条语句作为基本语句。

2.计算基本语句的频度得到问题规模n的某个函数f(n)。

3.取其数量级用符号“O”表示。

如何计算算法的时间复杂度、空间复杂度_i++

例题

分析以下程序段的时间复杂度

i = 1;    // ①
while(i <=n)
i = i*2; // ②

关键是要找出来执行 次数x与n的关系,并表示称n的函数:


若循环执行1次:i=1*2=2,

若循环执行2次:i=2*2=2^2^,

若循环执行3次:i=2*2*2=2^3^,

若循环执行x次:i=2*2*...=2^x^,


设语句②执行次数为x次,由循环条件i<=n可得,2^x^<=n,所以x<=log2n

即f(n)≤log2n,取最大值f(n)=log2n,所以该程序段的时间复杂度T(n)=O(log2n)

算法时间复杂度计算

请注意:有的情况下,算法中基本操作重复执行的次数还随问题的输入、数据集不同而不同。

例如,顺序查找,在数组a[i]中查找值等于e的元素,返回其所在位置。

for (i=0; i<n; i++)
if(a[i] ==e) return i+1; // 找到,则返回是第几个元素
return 0;


最好情况:1次

最坏情况:n次

平均时间复杂度为:O(n)


算法空间复杂度

算法1

for(i=0;i<n/2;i++) {
t=a[i];
a[i]=a[n-i-1];
a[n-i-1]=t;
}

只额外创建了一个t变量,

S(n)=O(1),原地工作。

算法2

for(i=0;i<n;i++)
b[i]=a[n-i-1];
for(i=0;i<n;i++
a[i]=b[i];

额外创建了b[i],所以S(n)=O(n)。