4qwerty7 在讲 Splay 时为了方便,把节点父亲的父亲称为“爷爷”,这引发了他的进一步思考:
在一棵树上任选 4 个节点,前两个的 LCA 与 后两个的 LCA 的 LCA 的标号的期望是多少?
我们可以对该问题做如下形式化的表述:
给定一棵 n 个节点的有根树,将根节点标号 1,将其他节点标号 2∼n,标号为 i 为节点记作 vi,记 getId(vi)=i,求 E[getId(lca(lca(vA,vB),lca(vC,vD))]。
其中 A, B, C, D 为四个相互独立离散型随机变量,P(A=i)=P(B=i)=P(C=i)=P(D=i)=n1, i=1,2,3,…,n。
上文 P(X) 表示事件 X 发生的概率,E[X] 表示随机变量 X 的数学期望,lca(x,y) 表示 x, y 两节点的最近公共祖先节点,即两节点祖先节点集合的交中深度最大的节点。
我们定义一个结点的祖先节点集合即从根节点到该结点的所经分支上的所有结点(含根与该节点自身)的集合,一个节点的深度即它祖先节点集合的大小。