第七章学习小结
本周学习了有关查找的内容:
查找结构
(1)线性表:用于静态查找,有顺序查找和二分查找方法
(2)树表:用于动态查找,有二叉排序树方法
(3)散列表:两种查找都适用
查找算法分类:
1)静态查找和动态查找;
注:静态或者动态都是针对查找表而言的。动态表指查找表中有删除和插入操作的表。
2)无序查找和有序查找。
无序查找:被查找数列有序无序均可;
有序查找:被查找数列必须为有序数列。
平均查找长度(ASL):是查找算法的查找成功时的平均查找长度的缩写,是为确定记录在查找表中的位置,需和给定值进行比较的关键字个数的期望值。
1.顺序查找
顺序查找适合于存储结构为顺序存储或链接存储的线性表,顺序查找的时间复杂度为O(n)。
int SequenceSearch(int a[], int value, int n) { int i; for(i=0; i<n; i++) if(a[i]==value) return i; return -1; }
2.二分查找
二分查找的元素必须是有序的,如果是无序的则要先进行排序操作。其查找的时间复杂度为O(log2n)。
int BinarySearch1(int a[], int value, int n) { int low, high, mid; low = 0; high = n-1; while(low<=high) { mid = (low+high)/2; if(a[mid]==value) return mid; if(a[mid]>value) high = mid-1; if(a[mid]<value) low = mid+1; } return -1; }
3.树表查找
二叉查找树是先对待查找的数据进行生成树,确保树的左分支的值小于右分支的值,然后在就行和每个节点的父节点比较大小,查找最适合的范围。 这个算法的查找效率很高,但是如果使用这种查找方法要首先创建树,可构建平衡二叉树,B树与B+树。
哈希表
1)用给定的哈希函数构造哈希表;
2)根据选择的冲突处理方法解决地址冲突,常见的解决冲突的方法:开放定址法、线性探测法、二次探测法等。
3)在哈希表的基础上执行哈希查找。
时间复杂度:对于无冲突的Hash表而言,查找复杂度为O(1)
总结:在本章学习中,对于树表的掌握其实很不理想,现在距离期末已经没有多少时间了,在接下来的时间里我要不断巩固查找中树表的知识,并且对以往学习的知识进行复习,争取考到个好成绩。