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)