首页 > 其他分享 >分数相关:Farey Sequence,Stern-Brocot Tree

分数相关:Farey Sequence,Stern-Brocot Tree

时间:2023-06-14 22:26:04浏览次数:45  
标签:frac Sequence Tree Farey Brocot Stern

Farey Sequence

记 \(n\) 阶 Farey Sequence 为 \(L_n\) , \(L_n\) 即为集合 \(\{\frac{y}{x}\mid (x,y)=1\land1\leq x\leq n\}\) 中的数从小到大写下来,如 \(L_5=[\frac01,\frac15,\frac14,\frac13,\frac25,\frac12,\frac35,\frac23,\frac34,\frac45,\frac11]\) 。

一个比较显然的是 \(L_n\) 的长度为 \(\sum_{i=1}^{n}\varphi(i)+1\) 。

观察 \(L_n\) 中的相邻两项 \(\frac{a}{b},\frac{c}{d}\) 其中 \(\frac{a}{b}<\frac{c}{d}\) ,可以发现 \(\frac{a}{b}-\frac{c}{d}=\frac{1}{bd}\) , 虽然不会证但是确实是对的。

实际上反过来也是对的,当 \(\frac{a}{b}-\frac{c}{d}=\frac{1}{bd}\) 时, \(\frac{a}{b},\frac{c}{d}\) 在 \(L_{\max\{b,d\}}\) 中相邻。

根据上述的性质还能推出另一个结论:假设 \(\frac{a}{b},\frac{p}{q},\frac{c}{d}\) 为相邻三项,那么有 \(\frac{p}{q}=\frac{a+c}{b+d}\) 。

那么可以通过上述性质构造 \(L_n\) 。具体来说已经构造了若干项,最近的两项为 \(\frac{a}{b},\frac{c}{d}\) ,假设接下的一项为 \(\frac{p}{q}\) 。通过上述的性质列方程,最后可以得到 \(p,q\) 关于一个参数 \(k\) 的表达式,即 \(p=kc-a,q=kd-b\) 。由于 \(\frac{p}{q}-\frac{c}{d}=\frac{cb-da}{d(kd-b)}\) ,所以 \(k\) 越大 \(\frac{p}{q}\) 和 \(\frac{c}{d}\) 越接近,那么 \(k\) 取最大值即 \(\lfloor \frac{n+b}{d}\rfloor\) 。所以最后就有如下递推式:

\[\begin{aligned} k & = \lfloor\frac{n+b}{d}\rfloor\\ p & =kc-a\\ q & =kd-b\\ \end{aligned} \]

根据上述式子递推即可。

具体内容可以看: Farey Sequence

例题: FRACTION - Sort fractions

Stern-Brocot Tree

Stern-Brocot Tree 把所有的最简分数放到了一棵二叉搜索树上,建立方式是一种简单的构造,在二分精确值上有比较好的作用。

具体来说可以看下面这张图:

注意到构造方法就是每个节点的权等于左右两条虚线的值分子分母分别相加,如果要构建也是比较方便的。

在二分这方面,可以注意到如果转了一次向,比如先左后右,那么目前的权是 \(L+R\) ,左儿子是 \(2L+R\) ,左儿子的右儿子是 \(3L+2R\) ,由于权是分子分母分别相加,就是说分母分子都至少翻了一倍,所以如果限定了分母的最大值是 \(V\) ,那么最多转 \(O(\log V)\) 次向。根据这个性质,只需要在一条直链上二分,复杂度就是 \(O(\log^2V)\) 的。

标签:frac,Sequence,Tree,Farey,Brocot,Stern
From: https://www.cnblogs.com/jerryjiang/p/17435182.html

相关文章

  • 题解 ABC207F【Tree Patrolling】
    挺简单的树上背包,就是有点难写。设\({dp}_{u,i,x,y}\)表示仅考虑\(u\)的子树内,有\(i\)个节点被控制,\(x\)为节点\(u\)是否有警卫,\(y\)为节点\(u\)是否被控制。(其实所有\(x=1,y=0\)的状态都没用,但我懒得管了。)每个点\(u\)的初始值为\({dp}_{u,0,0,0}={dp}_{u,1,1......
  • jqtreetable jquery-treeview
    jqtreetable[img]http://dl.iteye.com/upload/attachment/466717/80fc34ec-ed82-3c04-b2f4-5de688bbf990.jpg[/img]jquery-treeview[img]http://dl.iteye.com/upload/attachment/466715/3c0521cb-37e0-3fc6-8dfc-f438b48e8569.jpg[/img]......
  • Codeforces Beta Round #29 (Div. 2, Codeforces format)-D. Ant on the Tree
    原题链接D.AntontheTreetimelimitpertestmemorylimitpertestinputoutputConnectedundirectedgraphwithoutcyclesiscalledatree.Treesisaclassofgraphswhic......
  • AtCoder Beginner Contest 258 F Main Street
    洛谷传送门AtCoder传送门发现这题有个远古的WA就来改了(发现走法很多种,不想分类讨论,考虑最短路。设起点编号为\(1\),终点为\(11\)。\(x=Bn\)和\(y=Bn\)把坐标系分成了若干块。考虑过起点作一条平行于\(Ox\)的直线,与左右两条\(x=Bn\)的线有两个交点,给它们编号......
  • 决策树DecisionTree
    模型亮点数据清洗方式得当由于模型、数据集太小,没有什么好调的,就当练习吧~-----------------------------------------以下为模型具体实现-----------------------------------------Step1.数据读取importpandasaspddf=pd.read_csv('bankdebt.csv',index_col=0,header......
  • mac下gitLab、sourceTree的配合使用
         1、认识一下gitLab这个版本管理工具。说到版本管理工具,大家会想到svn,git和svn还是有差别的。svn是集中化的版本控制系统,只有一个单一的集中管理的服务器,保存所有文件的修订版本,而协同工作的人们都通过客户端连到这台服务器,取出最新的文件或者提交更新。git是分布式......
  • 2023年6月11日,TreeSet,Comparable,HashMap
    1.Set1.TreeSetTreeSet1、存储Integer的元素,升序排列2、存储String的元素,字典排列TreeSet根据元素的不同类型使用不同的排序规则publicclasstest01{/***知识点:TreeSet*1、存储Integer的元素,升序排列*2、存储String的元素,字典排列*......
  • DSU on tree
    DSUonTreeDSUonTree是指在树上利用类似于并查集的启发式合并的方法处理一类统计的问题。比如这些问题:对于每一个子树T,计算:1)T中结点的值组成的众数2)T中不同的结点的值的个数3)T结点的值从小到大排序后最接近T的根结点的值以子树中不同的结点的值的个数为例,如果直接对每一......
  • CMU15445 (Fall 2020) 数据库系统 Project#2 - B+ Tree 详解(上篇)
    前言考虑到B+树较为复杂,CMU15-445将B+树实验拆成了两部分,这篇博客将介绍Checkpoint#1部分的实现过程,搭配教材《DataBaseSystemConcepts》食用更佳。B+树索引许多查询只涉及文件中的少量记录,例如“找出物理系所有教师”的查询就只涉及教师记录中的一小部分,如果数据库......
  • odoo14在tree、kanban视图上添加dashboard
    效果图:  实现代码:js:view的类型原来1个js给拆分成了4个:view,controller,renderer,model​​1、view:AbstractView​​的子类,这是工厂类:类需要解析 ​​arch​​字段并设置其它3个类2、Renderer:渲染器,来自 ​​AbstractRenderer:负责在用户界面中展示数据;​​3、Contr......