Overlap Study
Overlap Study
by Ed Pegg Jr
Initialization
Initialization
StringOverlaps[a_String]:=Select[Table[StringJoin[StringTake[a,i],a],{i,StringLength[a]-1}],StringMatchQ[#,a~~__]&]
StringOverlaps[{a_String,b_String}]:=Union[StringOverlaps0[a,b],StringOverlaps0[b,a],StringOverlaps1[a,b],StringOverlaps1[b,a]]
StringOverlaps0[a_String,b_String]:=Select[Table[StringJoin[StringTake[a,i],b],{i,StringLength[a]-1}],StringMatchQ[#,a~~__]&]
StringOverlaps1[a_String,b_String]:=If[StringPosition[b,a,1]==={},{},{b}]
StringOverlapsQ[list:{_String..}]:=!((Length[Union[list]]Length[list])&&!Apply[Or,StringOverlapsQ/@list]&&Catch[Scan[If[!(SameQ@@#)&&(StringOverlapsQ@@#),Throw[False]]&,Tuples[list,2]];True])
StringOverlapsQ[a_String]:=!(StringLength[a]==1||MatchQ[StringPosition[a,Table[StringTake[a,-i],{i,StringLength[a]-1}],1],{}|{{x_,_}}/;x>1])
onepercent[table_]:=N[Count[Flatten[table],1]/Length[Flatten[table]]];
NKS: notes-9-10--string-overlaps -- Approximations
NKS: notes-9-10--string-overlaps -- Approximations
Length/@Table[Select[ToString[FromDigits[#]]&/@Partition[DeBruijnSequence[Range[2],k],k,1,1],Not[StringOverlapsQ[#]]&],{k,1,12}]
{2,2,4,6,12,20,40,74,148,284,568,1116}
a[0]=1;a[n_]:=ka[n-1]-If[EvenQ[n],a[n/2],0]
a[10]/.k2
284
OEIS
OEIS
A003000 Number of bifix-free (or primary, or unbordered) words of length n over a two-letter alphabet.
A003000[n]/2^n converges to 0.2677868402178891123766714035843025525550598979934845320763118885112149...
N[(a[200]/.k2)/2^200,50]
0.26778684021788911237667140358451379912424045658290
NSum-1Product-1,{m,2,n},{n,1,4},50
n-1
(-1)
2
(-1)
n+1
2
2
(-1)
m
2
2
(-1)
m
2
2
0.26778684021788911212689482147090374617173890124715
N[(a[200]/.k3)/3^200,100]
0.5569798397642302936529413190253562568356116596043093950906928955668660775762511906554109976074594572
N[(a[200]/.k4)/4^200,100]
0.6877480120883629865157307881281905516741574947528722573136150598611735495440385705285448433200001072
unforge=Table[N[(a[100]/.km)/m^100,20],{m,2,20}];
approx=Flatten[Table[x/.Solve[m-Sqrt[-1/(1/(1/(1-x)-(m-1))-(m+1))]0],{m,2,20}]]
,,,,,,,,,,,,,,,,,,
4
15
44
79
174
253
472
621
1040
1291
2004
2395
3514
4089
5744
6553
8892
9991
13180
14631
18854
20725
26184
28549
35464
38403
47012
50611
61170
65521
78304
83505
98804
104959
123084
130303
151582
159981
N[unforge-approx]
{0.00112017,0.0000178144,9.76515×,1.03726×,1.66666×,3.5579×,9.34515×,2.87498×,1.0018×,3.86071×,1.61677×,7.25991×,3.4595×,1.73511×,9.09911×,4.96223×,2.80166×,1.63149×,9.76794×}
-7
10
-7
10
-8
10
-9
10
-10
10
-10
10
-10
10
-11
10
-11
10
-12
10
-12
10
-12
10
-13
10
-13
10
-13
10
-13
10
-14
10
Alphabet “12”, No self-overlap, up to length 11 --- no overlap chance 0.278271
Alphabet “12”, No self-overlap, up to length 11 --- no overlap chance 0.278271
dbsnall=SortBy[Sort[Flatten[Table[Select[ToString[FromDigits[#]]&/@Partition[DeBruijnSequence[Range[2],k],k,1,1],Not[StringOverlapsQ[#]]&],{k,1,11}]]],StringLength[#]&];
Length[dbsnall]
1160
tabnall=Table[If[Length[StringOverlaps[{dbsnall[[a]],dbsnall[[b]]}]]0,1,0],{a,1,Length[dbsnall]-1},{b,a+1,Length[dbsnall]}];
onepercent[tabnall]
0.278271
There is no benefit to comparing “1___2” strings with “2___1” strings, since these will always overlap.
ArrayPlot[tabnall,PixelConstrained1,FrameFalse]
Alphabet “12”, No self-overlap, up to length 12, always start “1” --- no overlap chance 0.582985
Alphabet “12”, No self-overlap, up to length 12, always start “1” --- no overlap chance 0.582985
dbsnall=Flatten[Table[Select[ToString[FromDigits[#]]&/@Partition[DeBruijnSequence[Range[2],k],k,1,1],Not[StringOverlapsQ[#]]&],{k,1,12}]];
dbsnall=Select[dbsnall,StringTake[#,1]"1"&];
Length[dbsnall]
Alphabet “123”, No self-overlap, up to length 8, always start “1”--- no overlap chance 0.759355
Alphabet “123”, No self-overlap, up to length 8, always start “1”--- no overlap chance 0.759355
Alphabet “1234”, No self-overlap, up to length 6, always start “1”--- no overlap chance .859005
Alphabet “1234”, No self-overlap, up to length 6, always start “1”--- no overlap chance .859005
Alphabet “12345”, No self-overlap, up to length 5, always start “1”--- no overlap chance 0.905358
Alphabet “12345”, No self-overlap, up to length 5, always start “1”--- no overlap chance 0.905358