2026.10.25 闲话
世界沉睡童话……
介绍:Calkin–Wilf 树
最近由于某些原因才知道还有 Calkin–Wilf 树这种东西,虽然 oi-wiki 也解释了,但是似乎不太本质,所以我也解释一下。Calkin–Wilf 树虽然不是特别深刻,但是对于理解 Stern–Brocot 树应当是有帮助的。
期望已经知道 Stern–Brocot 树是什么,不过不知道也没有关系。
Stern–Brocot 树和 Calkin–Wilf 树
简略解释一下什么是 Stern–Brocot 树:首先左右是 \(\frac 01\) 和 \(\frac10\),每次在相邻的 \(\frac ab\) 和 \(\frac cd\) 之间插入 \(\frac{a+c}{b+d}\):

Calkin–Wilf 树以 \(\frac11\) 为根,\(\frac pq\) 的左儿子是 \(\frac{p}{p+q}\)、右儿子是 \(\frac{p+q}{q}\):

矩阵形式和两种树之间的关系
对于 Stern–Brocot 树来说,对于每个点 \(\dfrac pq\) 记一个矩阵 \(\begin{bmatrix}b&d\\a&c\end{bmatrix}\) 表示他左边的点是 \(\dfrac ab\)、右边的点是 \(\dfrac cd\),这样就表示 \(\dfrac pq=\dfrac{b+d}{a+c}\)。
那么向左相当于乘 \(L=\begin{bmatrix}1&1\\0&1\end{bmatrix}\)、向右相当于乘 \(R=\begin{bmatrix}1&0\\1&1\end{bmatrix}\):

对于 Calkin–Wilf 树,如果仍然使用上面的树的可以发现每个点 \(\begin{bmatrix}b&d\\a&c\end{bmatrix}\) 其实表示的数是 \(\dfrac{a+c}{b+d}\)。
很难不发现两种矩阵 -> 分数转换方式之间差一个矩阵转置,而且 \(L,R\) 也是互为转置的,所以对于 L/R 的表示序列也就差一个转置,由于把转置分配到乘法里面需要翻转顺序,所以立得两种树之间的重要关系:
对于每一层来说,两种树对应的一排分数互为下标的位逆序关系(或者说蝴蝶变换)。
这个性质直接展示了两种树之间的关系,这可以让我们方便的在两种树之间进行切换。由于 Calkin–Wilf 树在构造上是非常简单的,而 Stern–Brocot 树是 BST,所以可能在处理某些问题上可以更方便。
Calkin–Wilf 树
介于 Calkin–Wilf 树的构造其实有很明显的连分数结构,所以很容易解释 Stern–Brocot 树和连分数间的关系。
下面讨论 Calkin–Wilf 树的一个挺好玩儿的性质:
按 BFS 序,分数 \(u\) 后面的那个分数就是 \(\dfrac1{2\lfloor u\rfloor-u+1}\)。
太神奇了,竟然能直接推下一个(
其实道理是比较显然的,就是直接模拟,设 \(u=\dfrac pq\),通过向上跳 \(\left\lfloor\dfrac pq\right\rfloor+2\) 步可以直接走到它和它后面那个数的 LCA,过程我也懒得写了,反正简单。
另外,Stern's diatomic sequence:
其中 \(\operatorname{fusc}(0)=0,\,\operatorname{fusc}(1)=1\)。
Calkin–Wilf 树按 BFS 序排列的分数就是相邻的 fusc 之比,这个显然,就不解释了。
哎感觉退役太久都不会写博客了,排版直接排成生物书黑体字、、
特别鸣谢
感谢 joke3579, abnormal123 et al. 和我的私人交流(
以下是博客签名,正文无关
本文来自博客园,作者:Jijidawang,转载请注明原文链接:https://www.cnblogs.com/CDOI-24374/p/23427443
版权声明:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议(CC BY-NC-SA 4.0)进行许可。看完如果觉得有用请点个赞吧 QwQ

浙公网安备 33010602011771号