第七章小结
查找(在数据结构中寻找满足某种条件的数据元素的过程)
静态查找表:可以查询,检索。(表不变)
动态查找表:可以查询,检索,插入,删除(表可变)
关键字:数据元素中唯一标识该元素的某个数据项的值
ASL(平均查找长度):关键字比较次数的平均值
顺序查找
线性查找,主要用于在线性表(顺序存储、链式存储)中进行查找(有序无序皆可)
哨兵:设置数组零号下标的位置的值为key,与该key比较,可以提高效率
二分查找(有序的顺序表!!!)
(注意是low<=high,写成low<high就会漏掉low=high时的情况)
分块查找
建立索引表,索引表中的每个元素含有各块的最大关键字和各块中的第一个元素的地址,索引表按关键字有序排列
查找表分为若干子块,块内元素可以无序,块间有序,对于所有块有第i块的最大关键字小于第i+1块的所有记录的关键字
(块内可以有序,无序,索引表必须有序排列)
散列表(根据关键字而直接进行访问的数据结构。建立了关键字与存储地址之间的一种直接映射关系)
散列函数(把查找表中的关键字映射成该关键字对应的的)
构造方法:数字分析法、平方取中法(适用事先不清楚关键字情况)、折叠法(边界和移位叠加,适用关键字位数多,散列地址位数少)、除留余数法(最常用)
冲突:散列函数可能会把多个不同的关键字映射到同一地址下的情况(H(key1)=H(key2),key1,key2互为同义词)
处理冲突:开放地址法,链地址法(个人偏向后者)
装填因子:α=表中记录数n/散列表长度m