数据结构之分块查找
字典就是一种分块查找,也可以叫索引
试想:
给你一本没有索引的字典,里面全部乱序,那么我们不得不用最低级的顺序查找法查找单词,即一页一页地翻,一个一个地对比,费时费力,给你一天时间可能都找不到某一个词…
而有了分块这种操作,将首字母相同的单词放在一个集体里,查找起来可以帮助我们快速定位,效率大大提高,这就是分块查找。
例子:
如果我们按照这个样子建立起索引表,那么查找过程就非常轻松了。注意:索引查找要求块间有序,即第二块里面的所有元素都比第一块里面大,第三块里面的所有元素都比前两块大。
比如上图查找44,我们可以先根据索引表,查找到应该从7号位置开始查找,然后在第二块内部顺序查找即可。
当然,如果块内是有序的,那么我们在块内可以使用折半查找法代替顺序查找。
分块查找的效率分析:
它比顺序查找快,但比折半查找慢。
它的时间开销分为两部分,1.查找索引表;2.在块内进行顺序查找
分块查找的优缺点分析:
分块查找要求块间有序,折半查找要求严格有序
注意,折半查找无法使用线性链表,不是说它不能用链表实现,而是没有必要。首先是因为单链表不具有双向性。
其次就算用双向链表,但链表也不能像数组一样随机存取,因此给链表的数据用折半查找沦为鸡肋,还不如直接用顺序