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:

\[\begin{aligned}\operatorname{fusc}(2n)&=\operatorname{fusc}(n)\\\operatorname{fusc}(2n+1)&=\operatorname{fusc}(n)+\operatorname{fusc}(n+1)\end{aligned} \]

其中 \(\operatorname{fusc}(0)=0,\,\operatorname{fusc}(1)=1\)。

Calkin–Wilf 树按 BFS 序排列的分数就是相邻的 fusc 之比,这个显然,就不解释了。

哎感觉退役太久都不会写博客了,排版直接排成生物书黑体字、、

特别鸣谢

感谢 joke3579, abnormal123 et al. 和我的私人交流(

posted @ 2026-10-25 01:27  Jijidawang  阅读(116)  评论(4)    收藏  举报
😅​