第七章学习小结
本章学习了几种查找方式和哈希表。
一、基本概念
(1)查找:根据给定的某个值,在查找表中确定一个其关键字等于给定值的数据元素(。
(2)无序查找和有序查找。
无序查找:被查找数列有序无序均可;
有序查找:被查找数列必须为有序数列。
(3)平均查找长度(ASL):需和指定key进行比较的关键字的个数的期望值,称为查找算法在查找成功时的平均查找长度。
(4)关键字(Key):是数据元素中某个数据项的值,又称为键值,用它可以标识一个数据元素。若关键字可以唯一地标识一个记录,则称此关键字为主关键字;若关键字对应多个记录,则称此关键字为次关键字。\
二、查找方法
顺序查找:
int Search(SSTable ST,keyType key) { for(i = ST.length;i>=1;--i) if(ST.R[i].key == key) return i; return 0; }
查成功最好的情况是在第一次就找到,此时的算法时间复杂度为O(1),最坏的情况是查找到只余一个元素时才找到,需要n次比较,时间复杂度为O(n)。
带哨兵的顺序查找:
int Search_Seq(SSTable ST,KeyType key){ ST.R[0].key = key; for(int i = ST.length;ST.R[i].key!=key;--i); return i ; }
二分查找:
int binarySearch(int[] a, int key) { int low = 0; int high = a.length-1; while(low <= high) { int mid = (low + high)/2; if(key < a[mid]) else if(key > a[mid]) low = mid + 1; else return mid; } return -1; }
除此之外,还有分块查找和二叉排序树。接下来还引入了二叉平衡树
三、心得
学会了一些新的查找方式,感觉各有各的特点,要灵活运用。期末快到了,感觉还是有很多学得不精的地方,上网课也经常容易走神,还是要好好复习,准备考试。