第9章 分块查找

【算法实现】

略。

【算法分析】

若有 n n 个元素,每块中有 s s 个元素 ( R R 中总块数 b = n / s b=\lceil n/s \rceil ),

1、若以折半查找来确定元素所在的块,则分块查找成功时的平均查找长度为:
A S L b l k = A S L b n + A S L s q = log 2 ( b + 1 ) 1 + s + 1 2 log 2 ( n / s + 1 ) + s 2     ( o r   log 2 ( b + 1 ) + s 2 ) \begin{aligned} ASL_{blk} &= ASL_{bn} + ASL_{sq} \\ &= \log_2(b+1)-1 + \frac{s+1}{2} \\ &\approx \log_2(n/s+1) + \frac{s}{2} \ \ \ (or \ \log_2(b+1) + \frac{s}{2}) \end{aligned}
显然,当 s s 越小时, A S L b l k ASL_{blk} 的值越小,即当采用折半查找确定块时,每块的长度越小越好。

2、若以顺序查找来确定元素所在的块,则分块查找成功时的平均查找长度为:
A S L b l k = A S L b n + A S L s q = b + 1 2 + s + 1 2 = 1 2 ( n s + s ) + 1     ( o r   1 2 ( b + s ) + 1 ) \begin{aligned} ASL_{blk} &= ASL_{bn} + ASL_{sq} \\ &= \frac{b+1}{2} + \frac{s+1}{2} \\ &= \frac{1}{2}(\frac{n}{s}+s)+1\ \ \ (or \ \frac{1}{2}(b+s)+1) \end{aligned}
显然,当 s = n s=\sqrt{n} 时, A S L b l k ASL_{blk} 取极小值 n + 1 \sqrt{n}+1 ,即当采用顺序查找确定块时,各块中的元素数选定为 n \sqrt{n} 时效果最佳。

发布了674 篇原创文章 · 获赞 103 · 访问量 11万+

猜你喜欢

转载自blog.csdn.net/qq_42815188/article/details/103703770