考研/专升本 时间复杂度的计算例题

本次素材来源于cctalk 比特就业课

第一题

计算Func1的时间复杂度

考研/专升本 时间复杂度的计算例题_第1张图片

第一个for循环执行每执行一次,第二个for循环就要执行n次,所以执行n(n-1)次

第三的for循环执行2n次

while 循环执行10次,所以总共是n(n-1)+2n+10次,时间复杂度为0(n^{2})

第二题

考研/专升本 时间复杂度的计算例题_第2张图片

这里分两种情况:

(1)如果题目说明了m和n的大小关系:

        m>n:时间复杂度为O(m)

        m=n:时间复杂度为O(m)或O(n)

        m

(2)题目没说明:O(m+n)

第三题

考研/专升本 时间复杂度的计算例题_第3张图片

第四题

考研/专升本 时间复杂度的计算例题_第4张图片

这题查找字符串,假设字符串长度为N。

最好情况:第一个字符为目标字符O(1),最坏情况O(N).

时间复杂度是求最坏情况的时间,所以这题时间复杂度为O(n)

考研/专升本 时间复杂度的计算例题_第5张图片

第五题:冒泡排序求时间复杂度

考研/专升本 时间复杂度的计算例题_第6张图片

冒泡排序的原理是依次向后比较,如大于后一位则交换顺序。

所以第一趟冒泡要执行n次,第二趟冒泡执行n-1次,........所以是一个等差数列(n+1)n/2

所以时间复杂度为O(n^{2}

第五题:折半查找/二分查找

O(\log_2{n})

考研/专升本 时间复杂度的计算例题_第7张图片

第六题:递归求时间复杂度

考研/专升本 时间复杂度的计算例题_第8张图片

   

 二.空间复杂度的计算

空间复杂度:不是具体比特位大小,而是模糊的空间个数,也是用大O渐进表示

第一题:冒泡排序的空间复杂度

考研/专升本 时间复杂度的计算例题_第9张图片

这里一共定义了5个变量以及参数,形参*a(这里表示的是数组a的第一个元素的首地址)、n、end、i、exchange,所以空间为5是个常数。

所以空间复杂度为O(1)

注意:时间是累计的,空间是不变的,虽然每次循环都建立一个变量,但是空间是不变的

第二题

考研/专升本 时间复杂度的计算例题_第10张图片

这里有6+n个变量/参数 五个:n、fibArray、fibArray【0】,fibArray【1】

        还有一个是malloc函数创建了一个含有n+1个空间的数组

malloc 是开辟一个数组,这里是n+1个容量的数组。所以空间复杂度是 O(n)

第三题 递归以及栈帧问题的空间复杂度

考研/专升本 时间复杂度的计算例题_第11张图片

        递归的栈帧问题:每当递归一次都会创建一个空间,这里创建了N层。但返回时,每返回一次就销毁一个空间,所以空间过程为O(1)->O(N)->O(1)。但空间复杂度与时间复杂度一样取最高值。所以时间复杂度为O(n)

你可能感兴趣的:(数据结构,考研,数据结构)