VC++ “时间复杂度”需要注意的常见问题

1、以下程序运行的调度次数

int n = 10;
for (int i = 1; i < n; i++)
	for (int j = 1; j < n; j = j + n / 2)
		for (int k = 1; k < n; k = 2 * k)
			x = x + 1;
时间复杂度:(nlogn)

2、按数量级递增排序,常见的时间复杂度有:

常数阶:O(1)

对数阶:O(log(2)n)

线性阶:O(n)

线性对数阶:O(nlog(2)n)

平方阶:O(n^2)

立方阶:O(n^3)

……

K次方阶:O(n^k)

指数阶:O(2^n)

3、以下哪种节构,平均来讲获取任意一个指定值最快:

A:二叉树序树

B:哈希表

C:栈

D:队列

答案:B

4、辗转相除法的时间复杂度:

欧几里算法,又称为辗转相除法,用于求两个自然数的最大公约数,算法的思想很简单,基于下面的数论等式

gcd(a,b)=gcd(a,a mod b),其时间复杂度为O(logn)

5、算法实现如下的问题:

有20个数组,每个数组里面有500个数,升序排序,求出这10000个数字中最大的500个,同时确定时间复杂度。

算法分析:20个数组的最小元素全部进堆。每次去最小的一个时候,从最小元素对应的数组里取下来一个放到堆里。堆里一直最多有20个数,

充分利用20个数组的有序性。

A:判断20个数组的第一个元素,取出最小的放到堆里面,同时被取出数的数组删除对应的数值,长度减1.

B,判断所有数组元素的个数,是否大于500,若大于则执行A,否则停止并输出所有数组的元素

时间复杂度:500*log(20)


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值