1 查找的定义
查找: 又称检索或查询,是指在查找表中找出满足一定条件的结点或记录对应的操作。
查找表: 在计算机中,是指被查找的数据对象是由同一类型的记录构成的集合,如顺序表,链表、二叉树和哈希表等。
查找效率: 查找算法中的基本运算是通过记录的关键字与给定值进行比较,所以查找的效率同常取决于比较所花的时间,而时间取决于比较的次数。通常以关键字与给定值进行比较的记录个数的平均值来计算。
查找操作及分类:
操作:
- 查找某个“特定的”数据元素是否存在在查找表中。
- 某个“特定的”数据元素的各种属性。
- 在查找表中插入一个数据元素。
- 从查找表中删除某个数据元素。
分类:
- 若对查找表只进行(1) 或(2)两种操作,则称此类查找表为静态查找表。
- 若在查找过程中同时插入查找表中存在的数据元素,或者从查找表中删除已存在的某个数据元素,则称此类查找表为动态查找表。
2 数组和索引
索引把线性表分成若干块,每一块中的元素存储顺序是任意的,但是块与块间必须按关键字大小按顺序排列。即前一块中的最大关键字值小于后一块中的最小关键字值。
分块以后,为了快速定义块,还需要建立一个索引表,索引表中的一项对应于线性表中的一块,索引项由键域和链域组成。键域存放相应关键字的键值,链域存放指向本块第一个节点和最后一个节点的指针,索引表按关键字由小到大的顺序排列!
数组是特殊的块索引(一个块一个元素):
哈希表是非常经典的块索引!
分块查找的算法分两步进行,首先确定所查找的节点属于哪一块,即在索引表中查找其所在的块,然后在块内查找待查询的数据。由于索引表是递增有序的,可采用二分查找,而块内元素是无序的,只能采用顺序查找。(块内元素较少,则不会对执行速度有太大的影响)
参考资料: