数据结构,第二张图中画波浪线的那个式子是怎么推导的呢?

 我来答
xgn911
2022-08-21 · TA获得超过1360个赞
知道小有建树答主
回答量:1493
采纳率:96%
帮助的人:638万
展开全部

第一张图:

如图画红线地方,注意是等概率假设:

一共n节点,等概率找到节点j的概率pⱼ=1/n,找到节点j的查找长度cⱼ为节点j所在树的层数。则平均查找长度为p₀c₀+p₁c₁+…+pₙcₙ

当所查节点j处于第i层时,该层节点数为2^(i-1),每个节点的查找概率都为1/n,每个节点的查找长度为对应的层数i,则该层所有节点的平均查找长度为i/n·2^(i-1)=1/n·2^(i-1)·i

一共h层节点,则p₀c₀+p₁c₁+…+pₙcₙ=1/n·2^(1-1)·1+1/n·2^(2-1)·2+...+1/n·2^(h-1)·h

=sum{i=1→h}1/n·2^(i-1)·i=1/n·sum{i=1→h}2^(i-1)·i

第二张图:

因为是折半查找,对n个节点的树先进行一次查找后,目标节点要么在一半的n/2个节点中,要么在另一半的n/2个节点中,也就是n个节点的查找次数等于n/2个节点的查找次数+1,也即C(n)=C(n/2)+1。

那么对于C(n/2),继续递推,等于C(n/2/2)+1=C(n/2²)+1

即C(n)=C(n/2)+1=C(n/2²)+1+1=C(1)+1+1+...+1=O(log₂n)

进一步解释上面的结果:

若n恰好为2的k次幂,即n=2ᵏ,则k=log₂n

C(n)=C(2ᵏ)=C(2ᵏ⁻¹)+1=C(2ᵏ⁻²)+2=...=C(2⁰)+k=1+k=1+log₂n=O(log₂n)

若n不为2的k次幂,即2ᵏ⁻¹<n<2ᵏ,则k-1<log₂n<k,log₂n<k<log₂n+1

那么C(n)<C(2ᵏ)=1+k<log₂n+2,C(n)>C(2ᵏ⁻¹)=k>log₂n

所以log₂n<C(n)<log₂n+2,C(n)的计算复杂度仍为O(log₂n)

对于这个知识点,只要记住折半搜索的计算复杂度为O(log₂n)就可以了

追问
C(1)+1+1+...+1=log₂n这个式子是怎么来的呢?
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式