《2018年3月9日》【连续150天】
标题:搜索问题和查找算法;
内容:
文件(File):若干条结构相同的记录构成。
记录:由若干相关字段取值构成的整体;
字段(Field):是最小的不可分割的数据单位,每个字段都有一个特定的数据类型;
关键字(Keyword):就是记录中的一个字段,用它来标记和控制一条记录;
1.主关键字:能够唯一的标记和控制一条记录的关键字;
2.其他的称为辅关键字(次关键字);
a.顺序查找:
从最后一条记录开始,按照记录的逻辑次序,根据给定的关键字,逐一查找,找到即返回相应的记录;
线性表顺序查找算法:
在数组前加一个哨兵,其K值就是我们要查找的K,
例如,在一个数组中查找,共N个记录,从1~N,则找到时,返回其序号,找不到时,返回0;
这样,当写函数时,就不需要写记录序号是否大于0的比较
while(i>0&&a[i]!=k)
{i--;}
节省了一半的时间;
查找成功的平均检索长度:ASL:(n+1)/2;
加上查找失败的情况(与成功概率相同):(3/4)(n+1);
b.折半查找:如果文件中的记录的关键字是有序的,就可以采用折半查找(比中间值就行)
假设在0~10中查找,此为折半查找树;
ASL=log(n+1)-1