首页 » 算法技术手册 » 算法技术手册全文在线阅读

《算法技术手册》变种

关灯直达底部

当目标元素并不是均匀分布时,有时就有一些变种可以来改善顺序查找的性能,而不是给程序员添加额外的负担。我们本能地希望待查找的元素能够尽可能地靠近数组的最前面。如果你知道一些目标元素的信息(尤其是你查找的顺序),这里有一些策略能够改善顺序查找的性能。这些策略是非常有用的,但是仅仅对于能够按照如下的查找过程来修改的索引数组:

成功查找到则移动到最前面

这个策略适用于一个查找的元素t有更大的可能被再次查找到。当t在位置i找到时,将A[0,i-1]的所有元素移动到A[1,i],然后把t移动到A[0]。这个就是最多最近使用(MRU)分页算法的基础。

成功查找到则移动前一位

这个策略适用于如果一个查找的元素t有更大的可能能够被再次查找到;并且,这里可以避免移动大量元素所带来的开销。当t在位置i找到时,交换A[i-1]和A[i](除非当i在集合的最前面)。直观地看,如果元素非常频繁地被找到,它们就会最终冒泡到集合的最前面,并且总开销非常小(仅仅是一个元素的交换)。

成功查找到则移动到最后

如果一个元素不会被多次查找,那么当它被查找到一次之后移动到集合的末尾将会改善未来查找的性能,将A[i+1,n)移动到A[i,n-1),然后将找到的元素移动到A[n-1]。

这些变种的性能都各不相同,但是都是基于某个查找元素的概率。根据你对数据集合的深刻理解和目标元素,选择这些策略中的一个。分析这样的算法是众所周知的难,需要的高级数学技巧已经超出了本书范围。