活下去了:随机 BST 的深度是几倍 log n

本文是《应用随机过程》一节课半节课的笔记。

γ4.311(2e/γ)γ=e 的解。我们证明:若 c>γ,H=clogn,随机 bst 高 H 的概率为 0 as n。若 c<γ,H=clogn,高 H 的概率为 0 as n。这里的 logln

参考资料:Branching Processes in the Analysis of the Heights of Trees。

上界

我们先考虑上界。

将问题描述成,有一个无限满二叉树,每个点有一个权重,表示子树 size,根的权为 n。对于一个权为 x 的点,左右儿子的权是均匀随机选一个 [0,1] 内的随机实数 p,左为 px,右为 (1p)x。当然有可能两者加起来并不是 x1,但这样的概率为 0,忽略。这样,如果一个点的权重 =0,就说明这里其实没有点了。

由于所有都是下取整,所以深度 h 的概率至少是,深度为 h+1 的每个点在不下取整的前提下的权重都 <1 的概率。对于固定的一个点,它存在的概率就是 h 个随机 [0,1] 实数乘积 >1/n 的概率:取负对数,和的分布就是 Γ(h,1),存在一个和 <lnn 的概率可以 union bound。利用指数矩,设 SΓ(h,1)

2hP(S<lnn)=2hP(eS>1n)2hntE(etS)=2hnt(t+1)h

上式在 t=h/lnn1 时最小:

=n1(2elnnh)h

h=clnn,则

=n1(2ec)clnn

c>γ 时,(2e/c)c<e,所以整个东西 0,上界就证明了。

下界

首先,下界仍然可以用实数权值乘积的技巧。因为每次下取整至多多减 1,只要最终权值乘积 (1+h)/n,这个点就不可能取整到 0,而 h/n 很小(没有对 log 造成大幅改变),想必是可以在论证中比较容易处理的。因此之前的 S 的式子还可以沿用。

有一个问题是乘积下降的幅度很大程度上取决于有没有一个权值特别小的结点。一旦有这样的点,整棵子树都会大幅变小,而我们很讨厌这样的情况,它在局部上一下子造成了很大的权值跳跃。但如果看整棵树,其实没有太大的变化。这启发我们能不能把一大段过程放在一起来尽量让权值跳跃对最终结果的影响尽量小。

注意到 union bound 算出来的值其实是有组合意义的,它就是 h+1 层的期望结点数。我们希望不等式也能反一反方向:如果 h 层期望结点数很多,严格 >1(这里结点存在是指对于固定 n 的情况下权值 >(1+h)/n)会发生什么?首先,显然如果 h=(γϵ)lognϵ 越小,我们直觉上觉得为了使得 h 层有点的 (n,h) 就要越大,但一定存在这样的一对 (n,h)

一旦存在一对这样的 (n,h) 有什么好处呢?注意“赋权值”的过程是递归等价的,如果没有外面的 n,h 限制,每个子树内部的赋权过程都是一样的。我们这么看:从根开始赋 h 层权,期望有多于一个权值乘积 1/n,这里“1/n”是一个泛指,我们待会再确定具体的数。那再赋 h 层,每一个这样的存在权值 >1/n 的点都期望有多于一个它的 h 级后代相对于他权值也 >1/n,那这些 2h 深度的点权值 1/n2,而 h 翻倍带来的“新 n”刚好是 1/n2,也就是说,h 层一组,每次赋一组点的权值,kh 深度的点存在,大概就等价于 n=(2Ch)k 时深度也 (γϵ)logn,而且一组一组做的过程刚好和 Galton-Watson 分支过程的结论一样!因此我们得到一个重要的观察:

如果存在一对 h=(γϵ)logn(n,h) 使得 h 层的权值乘积 1/n 的期望结点数多于 1 个,把这个过程看成一个分支过程(i.e. 每个点的儿子个数的分布就是 h 层权值乘积 1/n 期望结点数的分布),则这个分支过程有正概率活下去,一旦活下去了,立刻证明了我们想要的下界(无论哪个 NnH=(γϵ)logN 层有正概率存在至少一个节点)。不过证明的是正概率,不是高概率。

注意这个 h 对于所有的 n 是一致的,也就是所有 n 都有相同的正概率。如果按照 n 来调整 h(或者直接取 h=(γϵ)logn),这个正概率就不一致了,要变为我们想要的高概率就比较麻烦。

从正概率变成高概率,一般的想法就是增加 sample 数。也就是,如果我能高概率生成很多个树根(例如先取常数 rh 层,取一对 (n,r),当 n 远大于 n 时,前 r 层期望有很多结点都活着),然后以这些树根为起始分别运行分支过程,则高概率至少有一个活下去。一旦有一个活下去(活下去就永远活下去了),我们就证出来了(直接保证对足够大的 n 都满足了)。

上面总结了大概的思路,我们把它转化为严谨的证明。

  • 第一步:给定 c=γϵ,取出一个足够大的 h,使得权值 eh/c 的期望结点数 >1

    因为 h=clnn<γlnn,所以这个权值 eh/c=Θ(n1+α) 其中 α>0 是与 ϵ 有关的常数。但每 h 层只要 Θ(1/n) 就活下去,所以这就足够开始分支过程了。

这个期望结点数 μ 就是

μ=2hP(S<h/c)=2heh/cih(h/c)ii!2heh/c(h/c)hh!2heh/c(h/c)hhh/eh12πh=(2ece1/c)h12πh

注意到 c<γ(2e/c)c>e2e/c>e1/cce1/e<2e,所以左边是指数级的,右边是多项式级的,故 h 足够大时总共一定会 >1

  • 第二步:利用分支过程的结论。

对于上面的 h,把每 h 层看成分支过程的一次产生后代,则有正概率 q 该过程永远存活。也即有至少 q 的概率,任给 k,对于 kh 层,至少有一个结点的权值 ekh/c。(因此当 N 满足 (γϵ)logN=kh 时,也有正概率存在一个 kh 级结点)

  • 第三步:取常数 r,在最开始生成 r 层、2r 个叶子,其中有很多叶子(r 级结点)的权值 4r4r 可以换为任意一个能保证很多叶子(i.e. 随 r 增加趋于无穷)权值都 的常数),设权值 4r 的叶子数为 k。这时正概率 q 变成高概率 1(1q)k

固定常数 r,我们首先说明会有很多 r 层的点权值 4r。考虑如下分支过程:随机产生 [0,1] 随机数 p 表示左边的点的权值是根的权值乘 p,右边是根的权值乘 1p。如果 3/4p1/4,则保留两边的点;否则保留权值更大那边的点。可以发现,有一半概率保留两个点,有一半概率保留一个点,期望每层点的个数乘 3/2。根据分支过程的结论,第 r 层的点数(保留的点权值显然都 4r)依分布收敛于某个随机变量,因此任给 ε,存在常数 δ,当 r 足够大的时候,至少有 1ε 的概率第 r 层至少有 δ1.5r 个点。

假设 r 的下界是 r0,我们现在得到两个不依赖于 n 的常数 h,r0

现在,给定足够大的 n,假设 clnn=kh+r,其中 r0r<r0+h。前 r 层高概率有 δ1.5r0 个点,权值至少是 4r0h。后 kh 层一共有 δ1.5r0 个根,其中存在一个根活下去(后 kh 层权值乘积至少是 ekh/c)的概率至少是 1(1q)δ1.5r0。此时活下去的点在 clnn 层至少有 4r0hekh/c 的权值,整个式子是 O(n1+ϵ) 的,自然 n 足够大时 (1+H)/n


最后总结一下逻辑:任给 ϵ,c=γϵ,可以取出 h 以及活下去正概率 q。当 r 越来越大,可以把 q 的正概率变成 1(1q) 高概率,其中指数越来越大,这就证明了深度 clnn 的概率 1 as n

posted @   tianbu  阅读(105)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
历史上的今天:
2023-11-09 Haskell 期中复习
点击右上角即可分享
微信分享提示