用户:Peter Luschny/Sterns Diatomic
有理树和二进制分区
斯特恩双原子阵列重温
A002487号 :=proc(m)局部a,b,n; a:=1; b:=0; n:=米; 当n>0时,如果类型(n,奇数)为do,则b:=a+b,否则a:=a+b结束if; n:=地板(n/2); 结束do; b; 结束进程:
SternsDiatomic:=proc(m,i,j)局部a,b,n; a:=i; b:=j; n:=米; 当n>0时 如果n mod 2=1,则b:=a+b,否则a:=a+b-fi; n:=iquo(n,2); od; [a,b]结束:
seq(op(1,Sterns双原子(i,1,0)),i=0..32); 1, 1, 1, 1, 1, 2, 1, 1, 1, 3, 2, 3, 1, 2, 1, 1, 1, 4, 3, 5, 2, seq(op(2,Sterns双原子(i,1,0)),i=0..32); 0, 1, 1, 2, 1, 3, 2, 3, 1, 4, 3, 5, 2, 5, 3, 4, 1, 5, 4, 7, 3,
seq(op(1,Sterns双原子(i,0,1)),i=0..32); 0, 0, 1, 0, 2, 1, 1, 0, 3, 2, 3, 1, 2, 1, 1, 0, 4, 3, 5, 2, 5,
seq(op(2,Sterns双原子(i,0,1)),i=0..32); 1, 1, 2, 1, 3, 2, 3, 1, 4, 3, 5, 2, 5, 3, 4, 1, 5, 4, 7, 3, 8, seq(op(1,Sterns双原子(i,1,1)),i=0..32); 1, 1, 2, 1, 3, 3, 2, 1, 4, 5, 5, 4, 3, 3, 2, 1, 5, 7, 8, 7, 7, seq(op(2,Sterns双原子(i,1,1)),i=0..32); 1, 2, 3, 3, 4, 5, 5, 4, 5, 7, 8, 7, 7, 8, 7, 5, 6, 9, 11, 10,
seq(SternsDiatomic(i,`*`,`#`),i=0..20); [1* + 0#, 0* + 1#], [1* + 0#, 1* + 1#], [1* + 1#, 1* + 2#], [1* + 0#, 2* + 1#], [1* + 2#, 1* + 3#], [2* + 1#, 3* + 2#], [1* + 1#, 2* + 3#], [1* + 0#, 3* + 1#], [1* + 3#, 1* + 4#], [3* + 2#, 4* + 3#], [2* + 3#, 3* + 5#], [3* + 1#, 5* + 2#], [1* + 2#, 2* + 5#], [2* + 1#, 5* + 3#], [1* + 1#, 3* + 4#], [1* + 0#, 4* + 1#], [1* + 4#, 1* + 5#], [4* + 3#, 5* + 4#], [3* + 5#, 4* + 7#], [5* + 2#, 7* + 3#], [2* + 5#, 3* + 8#],
seq(lusc(k+1)/lusc(k),k=2..2); seq(lusc(k+1)/lusc(k),k=4..5); seq(lusc(k+1)/lusc(k),k=8..11); seq(lusc(k+1)/lusc(k),k=2^i.(2^i+2^(i-1)-1);
0/1 1/2, 1/1 2/3, 3/2, 1/3, 2/1 3/4, 5/3, 2/5, 5/2, 3/5, 4/3, 1/4, 3/1 4/5,7/4,3/7,8/3,5/8,7/5,2/7,7/2,5/7,8/5,3/8,7/3,4/7,5/4,1/5,4/1
lusc:=进程(m)局部a,b,n; a:=0; b:=1; n:=米; 而n>0则会 如果n mod 2=1,则b:=a+b,否则a:=a+b-fi; n:=iquo(n,2); od; 结束语:
luscSeq:=进程(n)局部i,k; 对于i从1到n do 打印(seq(lusc(k),k=2^i..2^i+2^(i-1))) od端:
luscTree:=进程(n)局部i,k; 对于i从0到n do 打印(seq(lusc(k+1)/lusc(k),k=2^i..2^i+2^(i-1)-1)) od端:
1, 0, 2, 1, 1, 3, 2, 3, 1, 2, 4, 3, 5, 2, 5, 3, 4, 1, 3, 5, 4, 7, 3, 8, 5, 7, 2, 7, 5, 8, 3, 7, 4, 5, 1, 4,
1, 0 2, 1, 1 3, 2, 3, 1, 2 4, 3, 5, 2, 5, 3, 4, 1, 3 5, 4, 7, 3, 8, 5, 7, 2, 7, 5, 8, 3, 7, 4, 5, 1, 4
0, 1, 1, 1, 2, 2, 1, 3, 2, 3, 3, 1, 4, 3, 5, 2, 5, 3, 4, 4, 1, 5, 4, 7, 3, 8, 5, 7, 2, 7, 5, 8, 3, 7, 4, 5
0, 1, 1, 2, 1, 3, 2, 3, 1, 4, 3, 5, 2, 5, 3, 4, 1, 5 4, 7, 3, 8, 5, 7, 2, 7, 5, 8, 3, 7, 4, 5, 1, 6, 5, 9
有理树
FractionToPathInCWtree:=proc(a,b)本地路径,Rec; 记录:=程序(a,b) 如果a=1和b=1,则路径:=“@”.path; elif a<b then path:=“L”.path; Rec(a,b-a); elif a>b则路径:=“R”.path; Rec(a-b,b); else路径:=“?”fi-end;# 不是相对最好的 路径:=“”; Rec(a,b)结束:
PathInCWtreeToFraction:=进程(路径)局部a、b、x; 对于路径do中的x 如果x=“?”,则返回(-1)#无效路径 elif x=“@”则a:=1; b:=1;# 根 elif x=“L”,然后b:=b+a 否则a:=a+b-fi; od; a/b端:
“西式”枚举 1 2 ? 三 4 ? 5 ? 6 ? 7 . . . 和“东方风格”的列举 0 2 ? 1 6 ? 5 ? 4 ? 三 . . .
CWTree:=proc(n)局部i,R; 对于从0到n-1的i,R:=2^i..2^(i+1)-1: 打印(seq([3*2^i-k-2,fusc(k)/fusc(k+1)],k=R)); od端:
[0,1]“东方风格”:[位置,值] [2, 1/2],[1, 2 ] [6, 1/3],[5, 3/2],[4, 2/3],[3, 3 ] [14,1/4]、[13,4/3]、[12,3/5]、[11,5/2]、[10,2/5]、[9,5/3]、[8,3/4]、[7,4]
L树:=proc(n)局部i,R; 对于i从1到n的do R:=2^i..3*2^(i-1)-1: 打印(seq([k-2^(i-1),lusc(k+1)/lusc(k)],k=R)); od端:
[1,0]“西方风格”:[位置,价值] [2,1/2],[3,1 ] [4,2/3],[5,3/2],[6, 1/3],[7, 2 ] [8,3/4],[9,5/3],[10,2/5],[11,5/2],[12,3/5],[13,4/3],[14,1/4],[15,3]
ChildrenByVertexNumber:=进程(n)局部K; K:=2^简化(楼层(对数[2](n)))+n;# 忽略“简化” printf(“顶点%2d:%4a的子节点是%4a和%4a。\n”, n、 lusc(K+1)/lusc(K),lusc seq(儿童按顶点编号(i),i=1..15); 顶点1:0的子节点是1/2和1。 顶点2:1/2的孩子是2/3和3/2。 顶点3:1的孩子是1/3和2。 顶点4:2/3的孩子是3/4和5/3。 顶点5:3/2的孩子是2/5和5/2。 ...
LTreeByVertexNumber:=进程(n)局部K; K:=2^简化(楼层(log[2](n)))+n; lusc(K+1)/lusc(K)结束: CWTreeByVertexNumber:=进程(n)fusc(n)/fusc(n+1)结束: R: =1.511:pplot:=(f,颜色)-> 点图({seq([k,f(k)],k=R)},颜色=颜色,厚度=3): A:=pplot(LTreeByVertexNumber,红色):B:=ppot(CWTreeByVertexNumber,黑色): C:=绘图(log[2](y),y=R,颜色=蓝色):显示([A,B,C]);
魔法:=x->1/(1+楼层(x)-压裂(x)):
LTreeEastEnum:=进程(m)局部a,b,a,b,n; n:=米; a、 b,a,b:=1,0,1,0; 当n>0时,做a+b,a+b; 如果n mod 2=1,则b,A:=% 否则a,B:=%fi; n:=iquo(n,2); od; b/A端:
二进制分区
HyperbinsPerLusc:=proc(n)局部n,L,H; N:=二进制翻转(N); L:=lusc(n);# L:=模糊数(N); 如果N>1,则N:=N-1 fi; H:=双曲线表示(N); printf(“%s%2d%s%2d%s%2d%2d%s%s%a\n”, “lusc(”,n,“)=”,L,“->”,n,“.”,H)结束:
二进制翻转:=进程(n)局部i,B; B:=换算(n,基数,2); 添加((1-B[i])*2^(i-1),i=1..nops(B))结束:
lusc(n)=fusc(简化(2^(楼层(对数[2](n))+1))-n-1),
SuperBinary:=proc(n)选项记忆; 本地索引集,k; 索引集:=proc(n)局部i,i,z; i:=iquo(n,2); I:=I; i:=i-1; z:=1; 而0<=i do i:=i,i; i:=i-z; z:=z+z od; I结束: 如果n<2,则为1 elif n mod 2=1,然后是超级二进制(iquo(n,2)) else add(SuperBinary(k),k=索引集(n))结束:
将分区反复除以2,直到所有部分都等于2 最后一个分区是BIN的幂,这意味着
BIN=[2]或BIN 2 =[2,2]或BIN 三 =[2,2,2]或。。 等。 在这种重复还原的任何阶段,最多2个单线态(“1”部分) 显示在分区中(包括开始分区)。
[4, 4, 2, 1], [8, 2, 1] 除以2->[2,2,1],[4,1] 除以2->[1,1],BIN
[4,4,4,4,2,1], [8,4,4,2,1], [8,8,2,1], [16,2,1] 除以2->[2,2,2,2,1],[4,2,1]、[4,4,1]、[8,1] 除以2->[1,1,1,1],[2,1,1]、BIN^2、[4] 除以2->-、-、-和BIN
超级DuperBinaryFilter:=proc(q)局部p; p:=q; 如果convert(p,set)={2},则返回(q)fi; 如果nops(选择(x->x=1,p))>2,则返回(NULL)fi; p:=删除(x->x=1,p); 如果nops(p)=0,则返回(NULL)fi; p:=p/2; od端:
超级双二进制:=进程(n) 局部h,B,h,C,i,二进制翻转,双精度; 二进制翻转:=进程(n)局部i,B; B:=换算(n,基数,2); 加((1-B[i])*2^(i-1),i=1..nos(B))结束: 双精度:=proc(W,T)局部A,B,L; B:=[]; 对于W do中的L A:=2*L; 如果T=1,则A:=[op(A),1]fi; 如果T=2,则A:=[op(A),1,1]fi; B:=[操作(B),A]; od; B端; 如果n<2,则返回([])fi; 如果n=2,则返回([2])fi; h:=iquo(n,2); 如果n mod 2=1,则 如果BinaryFlip(n)=0,则返回([])fi; H:=超级双二进制(H); B:=双(H,1); 其他的 H:=超级双二进制(H); B:=双(H,0); H:=超级双二进制(H-1); C:=双(H,2); B:=【op(B),op(C)】; 如果BinaryFlip(n)=n-1,则 B:=[op(B),[seq(2,i=1..h)]]fi; fi; B端:
-
现在b(2n+1)=b(n),因为如果给定一个2n+1的sdb分区, “1”必须正好出现一次( sdb的定义,不可能2次),因此删除此“1” 除以2,得到n的超二进制分区。这个分区也是sdb 分区,因为原始分区和被分割的分区减少到同一根 这是BIN通过假设的力量。 反之亦然 ,给定sdb分区n,将每个部分加倍并添加一个“1” 以获得2n+1的sdb分区。 -
假设n不是2的幂。 现在b(2n)=b(n-1)+b(n),因为a sdb 2n的分区p中可能有两个1或没有1。 * 如果p没有1,那么我们除以2得到n的sdb分区。 * 如果p有两个1,那么通过删除它们并除以2,我们得到一个sdb n-1的分区。 反之亦然 ,如果p是n的sdb分区,则每个部分加倍,如果p为a sdb分区n-1,然后将每个部分加倍,再加上两个1。 -
如果2n=2 k个 则b(2n)=b(n)+1。 这是因为b(2 k-1 - 1) = 0, 作为2的唯一超二进制分区 k-1 -1是[1,2,4,…,2 k-2 ] 它不可简化为BIN的幂。因此sdb分区为2 k个 是BIN的幂或BIN的某些幂乘以2的某些幂。 反之亦然 ,给定2的sdb分区 k-1 ,将每个部分加倍以获得 2的sdb分区 k个 最后添加BIN^(2 k-1 )到 sdb分区就是这样生成的。 量化宽松政策。
Dijkstra的fusc函数推广
SternDijkstra:=proc(L,p,n)局部k,i,len,M; 长度:=nops(L); 如果len<2,则返回(“错误”)fi; 如果p<1或p>len,则返回(“错误”)fi; M:=L; k:=n; 当k>0时 M[1+(k mod len)]:=加(M[i],i=1..len); k:=iquo(k,len); od; op(p,M)结束:
seq(SternDijkstra([0,1],1,n),n=0..32); seq(SternDijkstra([1,0],2,n),n=0..32); 0, 0, 1, 0, 2, 1, 1, 0, 3, 2, 3, 1, 2, 1, 0, 1, 1, 2, 1, 3, 2, 3, 1, 4, 3, 5, 2, 5,
seq(SternDikstra([0,0,1],1,n),n=0..32); seq(SternDijkstra([0,1,0],2,n),n=0..32); seq(SternDijkstra([1,0,0],3,n),n=0..32); 0,0,0,1,0,1,0,0,2,1,1,0,0,1, 1, 1, 1, 2, 1, 2, 1, 1, 1, 3, 2, 4, 3, 1, 3, 4, 0, 0, 1, 0, 0, 1, 1, 2, 2, 0, 0, 1, 0, 0, 1, 1,
[x,y,z],[x,x+y+z,z],[x,y,x+y+z],[x+y+z,x+2y+2z,z], [x,2x+y+2z,z],[x,2-x+2y+z,x+y+z],[x+y+z,y,x+2y+2z], [x,x+y+z,2x+y+2z],[x,y,2x+2y+z],[x+2y+2z,x+3y+3z,z], [2x+y+2z、3x+2y+4z、z]、[2x+2y+z、3x+4y+2z,x+y+z]、, [x+y+z,2x+3y+4z,z],[x,3x+y+3z,z][x,4x+3y+2z,x+y+4z], [x+y+z,2x+4y+3z,x+2y+2z]。。。
斯特恩矩阵
SDVect:=进程(L,n)局部k,i,len,M; 长度:=nops(L); 如果len<2,则返回(“错误”)fi; M:=L; k:=n; 当k>0时 M[1+(k mod len)]:=加(M[i],i=1..len); k:=iquo(k,len); od; M端: SDMat:=程序(n,dim)线性矩阵[矩阵]( [seq(SDVect([seq`(如果`(j=i,1,0),j=1..尺寸)],n),i=1..尺寸])结束: SDMatTree:=proc(n,dim)局部i,R,j,k; 对于i从0到n-1 do R:=添加(尺寸^j,j=0..i-1)。。 添加(尺寸^j,j=0..i)-1: 打印(seq(SDMat(k,dim),k=R)); od端:
print(`dim 2的Stern矩阵的二叉树`); SDMatTree(3,2); print(`dim 3的Stern矩阵的三叉树`); SDMatTree(3,3);
OEIS的新序列
我还没有为超级二进制分区找到一个真正好的名称。 有什么建议吗?