笔试题之数据结构
- M字符串找N子字符串算法的时间复杂度如何计算?
[时间复杂度]整个算法的执行时间与基本操作重复执行的次数成正比。
参考kmp算法,该算法的时间复杂度为Q(N),通常,模式串的长度n比主串的长度m要小的多
- 几种排序算法中,哪几个是稳定的?
[稳定排序]排序前后,数值的相对前后位置不变的为稳定排序,否则为不稳定排序。
1、简单排序,时间复杂度O(n的平方),不稳定
2、快速排序,时间复杂度O(nlogn),性能最佳,不稳定
3、堆排序,时间复杂度O(nlogn),不稳定
4、归并排序,时间复杂度O(nlogn),不稳定
5、基数排序,时间复杂度O(d(n+rd)),稳定排序,
- 平衡二叉树插入新节点后,新的平衡二叉树是什么?
平衡二叉树具有如下性质:
1、左子树和右子树都是平衡二叉树,且左子树和右子树的深度之差不超过1
- 哈希表的实现方式有哪几种,实现一种hash_insert
哈希函数的构造方法主要有下面六种:
1、直接定址法,即关键字或关键字的某个线性函数值为哈希地址,H(key) = key 或 H(key) = a*key + b;
2、数字分析法,假设关键字是以r为基数的数,并且哈希表中可能出现的关键字事先都知道的,则可取关键字的诺干位组成哈希地址;
3、平方取中法,取关键字平方后的中间几位为哈希地址;
4、折叠法,将关键字分割为位数相同的几部分,然后取这部分的叠加和(舍去进位)作为哈希地址;
5、除留余数法,取关键字被某个不大于哈希表长m的数p除后所得余数为哈希地址,即H(key) = key MOD p ,p <= m;
6、随机数法,选择一个随即函数,取关键字的随即函数值为它的哈希地址。