Date: 2019-08-11
1. 算法的空间复杂度是指()。算法空间复杂度指的是算法 执行过程中需要占用多少内存空间资源
回顾:算法的时间复杂度
2. 在索引顺序表中,实现分块查找,在等概率查找情况下,其平均查找长度不仅与表中元素个数有关,而且与每块中元素个数有关。() 正确
解释:在分块查找过程中,先对块间进行顺序查找,然后对每个块内进行查找(有时采用二分查找)
3. 下列排序算法中,已基本有序却反而变得更复杂的排序算法是:( )。 快速排序算法
快排算法实质上是分治算法的应用:
- 快排采用分治的思想,第一次循环结束时,它实际上会产生一个轴,轴左边的都小于轴值,右边的都大于轴值,这样通过轴就分成了两个子序列,再对两个子序列递归快排,最终得到排好序的序列。
- 快排对越混乱的数据,排序效果越好,现在说一下为什么对一个基本有序的却更复杂,那是因为这样会导致每次轴划分出的两个子序列,一个趋近于1的数量级,一个趋近于n数量级,那么递归快排就近似总是对n做排序,时间复杂度O(n²),而且非常不符合快排的思想。比较好的情况是每次递归大致平分成两个n/2数量级的子序列,时间复杂度O(nlogn)
4. 需要借助于一个队列来实现DFS算法() 错误
解释:
DFS是图的深度优先遍历算法。
例如,图中A节点与B,C节点相连,B节点与D节点相连。从图的顶底A开始,依次访问B,D,C就是图的深度优先遍历。在访问节点D的时候需要保持B的兄弟节点C,需要用到栈;
即:DFS 深度优先遍历,是先进后出的思想,需要用到栈这一种数据结构! 例如:回溯法便是典型的DFS算法,成为扩展节点的节点可以再次成为活节点。
同理:BFS广度优先遍历,是先进先出的思想,需要用到队列这一中数据结构! 例如:分支界限法便是典型的BFS算法,成为扩展节点的节点不可以再次成为活节点了。
5. 下面的哪个序列可能是二叉搜索树中序遍历的结果? B
73 8 2 9 4 11
2 3 4 7 8 9 11
11 2 9 3 8 4 7
解释:因为二叉搜索树(Binary Search Tree)满足:针对所有的节点,若有孩子节点,都有:左孩子的值要小于该节点,而右孩子的值都要大于该节点。如果进行中序遍历(左中右),则返回的结果就是一个非递减的序列
6. 在所有排序方法中,关键字比较的次数与记录的初始排列次序无关的是() 比较:基数+选择
7. 假设线性表的长度为n,则在最坏情况下,冒泡排序需要的比较次数为多少次? (n*(n-1)/2)~O(n^2)
8. 在图采用邻接表存储时,求最小生成树的Prim算法的时间复杂度为() O(n+e)
9. 利用如下递归算法进行x(x(8))的计算时,需要进行多少次的调用x(n)? 18次
int x(int n)
{
if(n<=3)
return 1;
else
return x(n-2)+x(n-4)+1;
}
解释:
x(8)=x(6)+x(4)+1 递归计算x(8)第一次调用
x(6)=x(4)+x(2)+1 递归计算x(6)第二次调用
x(4)= x(2)+x(0)+1 递归计算x(4)第三次调用
x(4)= x(2)+x(0)+1 递归计算x(4)第四次调用
之后再调用x()计算黑体部分的结果(5次,加上前面4次,一共9次),最后x(8)返回值为9
接着计算x(9)
x(9)=x(7)+x(5)+1 递归计算x(9)第一次调用
x(7)=x(5)+x(3)+1 递归计算x(7)第二次调用
x(5)=x(3)+x(1)+1 递归计算x(5)第三次调用
x(5)=x(3)+x(1)+1 递归计算x(5)第四次调用
之后再调用x()计算黑体部分的结果(5次,加上前面4次,一共9次),最后x(8)返回值为9
所以总共调用x()的次数是9+9=18
10. 如果把传输速率定义为单位时间内传送的信息量(以字节计算)多少。关于一下几种典型的数据传输速率:
1.使用USB2.0闪存盘,往USB闪存盘上拷贝文件的数据传输速率
2.使用100M以太网,在局域网内拷贝大文件时网络上的数据传输速率
3.使用一辆卡车拉1000块单块1TB装满数据的硬盘,以100km/h的速度从上海到天津(100km)一趟所等价的数据传输带宽
4.使用电脑播放MP3,电脑的PCI总线到声卡的数据传输速率
在通常情况下,关于这几个传输速率的排序正确的是() 4<1<2<3 【记住吧】
补充常识:
普通U盘写数据的6MB/s,即48Mbps;
100M以太网的速率就是100Mbps;
卡车拉硬盘,1000x1000x8/3600=2222Mbps,这个应该是最快的;
MP3在256kbps码率下也平均只有1分钟2MB,所以不会超过0.3Mbps。
part two:
1. 下面程序段的时间复杂度: O(n^2)
k=1;
for(i=0;i<n;i++)
for(j=0;j<n;j++)
A[i][j]=k++;
2. 排序算法中的比较次数与初始元素序列的排列无关() 错误,,这样的说法太笼统了。选择+基数的比较次数确实与初始序列无关;但是其他排序算法是有关的,尤其是快排 【目前公认的快排是针对混乱序列进行排序的最快排序算法】
3. 对线性表进行折半查找时,要求线性表必须以链式方式存储,且结点按关键字有序排列,这样的说法正确吗? 错误
解释:对线性表进行折半查找,也称作二分查找,需要用到索引,所以需要是顺序存储的线性表,又因为二分法,所以有序。
牛客上的他人的解释:【注意:顺序存储不一定是有序存储】
二分查找也称折半查找(Binary Search),它是一种效率较高的查找方法。但是,折半查找要求线性表必须采用顺序存储结构,而且表中元素按关键字有序排列。
为什么采取顺序存储结构:折半查找需要先对查找的数据集合排序,并且每次要获得数据列表的中间位置,通过数组这种顺序存储结构