关于查找算法错题集锦

来源:互联网 发布:网络犯罪调查第三季mp4 编辑:程序博客网 时间:2024/06/05 05:46

1、设串长为n,模式串长为m,则KMP算法所需的附加空间O(m)

分析:KMP算法时间复杂度为O(m+n),空间复杂度为O(m).因为KMP算法涉及到next数组的存储,且next数组是基于模式串长度计算的。

 

BF算法(普通匹配算法):时间复杂度O(m*n);空间复杂度O(1)

KMP算法:时间复杂度O(m+n);空间复杂度O(n)

 

2、cin遇到空格符,结束输入。

 

3 n个顶点的网,求出权最小的n-1条边便不可构成其最小生成树。如果权值最小的n-1条边构成了环的话,就不能构成最小生成树。

 

平衡二叉树的左右子树高度之差的绝对值不超过1.

 

选择排序包括直接选择排序和堆排序,都是不稳定的算法。

 

4、折半查找时间复杂度log n,顺序查找是n/2

 

5、要求一个线性表能较快地查找,又能适应动态变化的要求,可以采用哈希查找方法。

 

分块法:把整个线性表分成若干块进行保存,若动态变化则可以添加在表的尾部(非顺序结构),时间复杂度是O(1),查找复杂度是O(N); 若每个表内部为顺序结构,则可以用二分法将查找时间复杂度降至O(log n),但同时动态变化复杂度则变成O(n).

分块查找,需要分块的部分之间是有序的,块内是否有序无所谓。

 

顺序法是挨个查找,容易实现,查找时间复杂度是O(n),动态变化时可将保存值放入线性表尾部,则时间复杂度为O(1)

 

二分法是基于顺序表的一种查找方法,查找时间复杂度为O(log n),若是动态变化的情况,移动次数还是O(n)

 

哈希法,通过哈希函数将值转化成存放该值得目标地址,查找性能是O(1),对于动态变化要求,可以再进行散列,时间复杂度是O(1)

 

6、序列长度为n,在最坏情况下,时间复杂度为O(log n)的算法是:二分查找

分析:

在最坏情况下,顺序查找为O(n);分块查找复杂度与分块规则有关;哈希查找时间复杂度是O(1);

 

7、选择排序是每轮选一个最小值出来,选择排序是O(n),所以就用n个排列。

 

8、深度优先搜索和前序二叉遍历都类似图的深度遍历,都要借助栈的数据结构;

广度优先搜索要借助队列数据结构,类似图的层序遍历。

 

9、线性表采用链式存储时,结点的存储地址:连续与否均可。

存储地址可以随意分配,链表中有指针域可以找到下一个链表节点的存储地址。

连续与不连续都可以用指针域连起来。

 

10、非线性结构的逻辑特征是一个结点元素可能对应多个直接前驱和多个后继。(二维数组、多维数组、广义表、树。图)

            线性结构指数据元素直接存在“一对一”的线性关系的数据结构。(线性表、栈、队列、双队列、数组、串)

 

11、要求能够进行较快地插入和删除,则可选范围内为链式存储和散列存储;

再加上要求存储结构能反映数据之间的逻辑关系,则只能选择链式存储。因为散列技术的记录数据间不存在什么逻辑关系,只和关键字有关联。

 

12在双向链表存储结构中,删除p所指的节点时需要修改指针:

p->next->prior = p->prior; p->prior->next= p->next;

分析:点击打开链接

 

 


0 0
原创粉丝点击