Stern-Brocot-FolgeDie Stern-Brocot-Folge (A002487 in OEIS[1]), auch als „diatomische Folge von Stern und Brocot“ oder „Stern-Sequenz“ bekannt, ist eine Folge ganzer Zahlen, die unabhängig vom Mathematiker Gotthold Eisenstein[2] und dem Uhrmacher Achille Brocot[3] entdeckt und vom Mathematiker Moritz Stern[4] genauer untersucht wurde. Sie startet mit dem Zahlenpaar s0 = 0 und s1 = 1. Zusätzliche Glieder der Folge ergeben sich, indem fortgesetzt die bisherige Folge kopiert und in der Kopie zwischen je zwei Glieder deren Summe eingefügt wird. Die ersten 33 Glieder der Folge sind
wobei auch die folgende Stufentafel (Beginn der Folge mit s1 und Unterteilung bei den Semikolons „;“) zur besseren Darstellung verschiedener Eigenschaften benutzt wird:
siehe #Eigenschaften der Stufentafel. Die Stern-Brocot-Folge weist einige bemerkenswerte mathematische Besonderheiten auf:
Diese und andere Eigenschaften sowie ihr relativ geringer Bekanntheitsgrad haben Jean-Paul Delahaye veranlasst, die Folge „die verkannte Schwester der Fibonacci-Folge“ zu nennen.[6] GeschichteGotthold Eisenstein veröffentlichte im Februar 1850 eine Arbeit über eine Zahlenreihe,
– G. Eisenstein[2] Er konnte einige der #Eigenschaften der Stufentafel angeben und regte M. Stern schon im Januar 1850 dazu an, die Reihe auch zu untersuchen. Stern entsprach 1858 mit seiner Arbeit, wie er schrieb, „leider zu spät, dem Wunsche meines unvergeßlichen Freundes;“[4]:193 Eisenstein starb 1852 im Alter von nur 29 Jahren. Der Aufsatz von Brocot datiert auf das Jahr 1861.[3] Definition der Stern-Brocot-Folge![]() Die Stern-Brocot-Folge s0, s1, s2,… ist durch das rekursive Bildungsgesetz
mit den Anfangswerten
definiert. Das bedeutet in Worten:
Das Bildungsgesetz für die Glieder an ungeraden Stellen kann wegen s2n = sn umgeformt werden in
Das entspricht dem eingangs angegebenen Rezept, aus dem Zahlenpaar (0,1) zusätzliche Glieder zu generieren, indem fortgesetzt die bisherige Folge kopiert und in der Kopie zwischen je zwei Glieder deren Summe eingefügt wird; M. Stern nannte das die Entwicklung (0,1).[4]:194 Die ersten 100 Glieder der Folge sind:
Eisenstein und M. Stern betrachteten auch die Entwicklung zweier beliebiger natürlicher Zahlen (m,n). Wenn diese nicht teilerfremd sind, dann enthalten alle Glieder der Folge deren größten gemeinsamen Teiler k. Werden alle Glieder der Folge durch k geteilt, entsteht eine Folge mit teilerfremdem m und n, und nur diese brauchen untersucht zu werden. Die Entwicklung mit teilerfremdem m und n ist als Bruchstück in der Entwicklung (0,1) enthalten, denn in dieser kommen alle möglichen Paare teilerfremder Zahlen vor. Allerdings treten in diesen Bruchstücken nicht mehr alle positiven Zahlen auf, sondern nur solche, die als Summe ganzzahliger Vielfache von m und n darstellbar sind.[4]:210 Die Stern-Brocot-Folge wurde auch auf Polynome verallgemeinert.[6]:69 Quantitative EigenschaftenBerechnung der FolgengliederNeben dem Bildungsgesetz aus der #Definition der Stern-Brocot-Folge gibt es weitere bemerkenswerte Methoden zur Berechnung von Folgengliedern. Der #Zusammenhang mit dem Pascal’schen Dreieck führt auf das explizite Bildungsgesetz worin die Gaußklammer [·] auf die nächste Ganzzahl abrundet und „mod 2“ den Rest bei der Division durch zwei gibt, also eins bei ungeraden Zahlen und null bei geraden.[6] Für große n erfordert diese Darstellung die Handhabung sehr großer Zahlen; beispielsweise lautet der Binomialkoeffizient . Die folgenden Methoden basieren auf der mehrfachen Anwendung einer Berechnungsvorschrift:
Weitere Formeln können aus den #Zähleigenschaften der Stern-Brocot-Folge abgeleitet werden. Eigenschaften der FolgeFür die Glieder der Stern-Brocot-Folge gilt:[4]
Die letzten drei Aussagen bedeuten, dass die Brüche s0/s1, s1/s2, s2/s3, s3/s4, s4/s5,… alle nicht negativen rationalen Zahlen ohne Zweifachnennungen durchlaufen, siehe auch #Abzählung der rationalen Zahlen und #Calkin-Wilf-Baum. Eigenschaften der StufentafelM. Stern[4] entwickelte seine Folge in Reihen, beginnend mit zwei natürlichen Zahlen (m,n), indem er fortgesetzt die Reihe kopierte und in der Kopie zwischen je zwei aufeinanderfolgende Zahlen die Summe derselben einfügte. Dies nannte er Entwicklung (m,n). Die Stern-Brocot-Folge ist die Entwicklung (0,1) und die #Stufentafel entsteht aus der Entwicklung (1,1); die erste Hälfte jeder ihrer Reihen ergibt sich aus der Entwicklung (1,2), die Eisenstein untersuchte. M. Stern definierte:
Die Entwicklung (1,1) beginnt mit
Entfernt man in jeder Reihe die endständige Eins, entstehen die Zeilen der eingangs angegebenen #Stufentafel. Die folgenden Eigenschaften der Reihen trug M. Stern zusammen, wenn nicht anders angegeben:
ZähleigenschaftenZusammenhang mit dem Pascal’schen DreieckWenn man das Pascal’sche Dreieck als Stufentafel anordnet (siehe folgende Tabelle), so bildet die Anzahl der ungeraden Zahlen in den aufsteigenden Diagonalen, von denen eine gelb markiert ist, die Stern-Brocot-Folge. Die Fibonacci-Folge findet sich hier ebenfalls, und zwar in der Summe der Zahlen.
Die hervorgehobene Diagonale zeigt ein Beispiel. In der ersten Spalte geht man von Zeile n = 9 aus und betrachtet die übrigen Werte der Diagonalen: Die Anzahl der ungeraden Zahlen ist 4 und s9 ist ebenfalls 4; Die Summe auf der Diagonalen ist 1+7+15+10+1 = 34 = f9 in der Fibonacci-Folge. Auf der n-ten Diagonale steht die Zahl der Spalte j in Zeile n+1−j und hat den Wert des Binomialkoeffizienten . Daraus kann eine explizite Formel zur #Berechnung der Folgenglieder abgeleitet werden. Zusammenhang mit der Binärdarstellung von ZahlenDie Stern-Brocot-Folge weist folgende bemerkenswerten Beziehungen zur Binärdarstellung von Zahlen auf. Die Anzahl der alternierenden Folgen aus Einsen und Nullen, die aus der Binärdarstellung von n gebildet werden können, ist gleich sn. Gezählt werden Folgen, die mit einer Eins beginnen und enden und in denen keine zwei Nullen und keine zwei Einsen hintereinander stehen. Eine einzelne Eins zählt hier auch als alternierende Folge. Beispielsweise ist 13 = 11012, woraus sich die fünf alternierenden, mit Unterstreichung markierten Folgen
bilden lassen und somit ist s13 = 5. Die Stelle, an der zwei teilerfremde Zahlen a, b in der Stern-Brocot-Folge hintereinander stehen, kann wie folgt bestimmt werden. Dazu wird der Bruch a/b als Kettenbruch (k0;k1,…,km) mit Teilnennern k0,…,m dargestellt. Der Kettenbruch wird in eine Binärzahl übersetzt mit von links km Einsen, km-1 Nullen, wieder km-2 Einsen usw. Die Binärzahl entspricht der Stelle in der Stern-Brocot-Folge, an der a vor b steht. Beispielsweise ist Wenn m ungerade ist, wird der letzte Teilnenner km ersetzt durch km−1 und eine Eins als Teilnenner hinzugefügt, entsprechend : Konkret steht in Übereinstimmung mit obigen Formeln das Paar (5,1) an der Stelle 31, (5,6) an der Stelle 62, (1,5) an der Stelle 16 und (13,4) = (4·3+1,4) an der Stelle 71. In der „Hyperbinärdarstellung“[10] einer Zahl n+1 sind neben den Ziffern Null und Eins noch die Zwei zur Darstellung der Zahl erlaubt, was mehrere Arten ihrer Schreibung gestattet; deren Anzahl ist sn. Beispielsweise lässt sich acht auf vier Arten schreiben:[6]
und dem entspricht s9 = 4. Abzählung der rationalen ZahlenFür Cantors erstes Diagonalargument wird eine Bijektion zwischen den Natürlichen Zahlen und den Rationalen Zahlen benötigt. Diese ergibt sich in einfacher Weise einerseits aus der eindeutig vergebenen Nummer n des Bruchs sn/sn+1. Weil jedes Zahlenpaar nur genau einmal in der Folge auftritt, liefert die im #Zusammenhang mit der Binärdarstellung von Zahlen geschilderte Kettenbruchmethode für einen Bruch a/b dessen Nummer.[6]:68[11]:85[8] Binärer Baum von Stern und Brocot![]() Im binären Baum von Stern und Brocot aus Abb. 2 ist an jedem Knoten die Anzahl der Wege notiert, die von den beiden obersten, rot geschriebenen Einsen abwärts, den Pfeilen folgend, zum Knoten führen. Im binären Baum steht in den Knoten gleicher Tiefe eine Reihe der #Entwicklung (1,1). ![]() Im Baum in Abb. 3 ist an jedem Knotenpunkt die Anzahl der Wege notiert, die von der obersten Eins abwärts, den Pfeilen folgend, zum Knoten führen. In diesem Baum stehen in den Knoten gleicher Tiefe bis zur Mitte die ersten Folgenglieder der Stern-Brocot-Folge ab s1, eine Eins und dieselben Folgenglieder in umgekehrter Reihenfolge. Zusammenhänge mit BrüchenCalkin-Wilf-Baum
Im Calkin-Wilf-Baum sind die Verhältnisse aufeinander folgender Glieder der Stern-Brocot-Folge in einer Baumstruktur angeordnet, siehe Abb. 4. Sie ist nach Neil Calting und Herbert Wilf benannt, die sie im Jahr 2000 untersucht haben.[10] Indem die Brüche im Baum zeilenweise gelesen werden, haben sie die Eigenschaften:
Der Baum konstruiert sich wie folgt:
Hier steht in den Zählern und Nennern eine Zeile der #Stufentafel jeweils in richtiger und umgekehrter Reihenfolge. Indem die Zeilen des Baums nacheinander und von links nach rechts gelesen werden, reihen sich die Brüche in gekürzter Form und ohne Doppeltzählungen – der Spirale in Abb. 5 folgend – aneinander. Die Stelle des Bruchs in dieser Aufzählung entspricht der Binärzahl, die entsteht, wenn die im Baum in Abb. 4 rot geschriebenen Nullen und Einsen von der Spitze 0/1 bis zum Bruch aneinander gehängt werden.[12] Beispielsweise bekommt der Bruch 3/5 in der untersten Reihe die Binärzahl 10102 = 10 zugeordnet, was seiner Position in der Abzählung entspricht. Umgekehrt ist die Binärdarstellung der Zahl n auch eine Wegbeschreibung zum n-ten Glied der Abzählungskette. Dazu geht man vom Ursprung bei 0/1 zur nächsten Verzweigung und nimmt bei einer Eins in der nächsten Ziffer der Binärdarstellung den rechten Ast und bei einer Null den linken. Das zehnte Glied wird beispielsweise durch abwechselnde Wahl des rechten, linken, rechten und wieder linken Asts erreicht (beim Ausgangspunkt 0/1 gibt es nur den rechten Ast.) Werden die Brüche in jeder Zeile nach ihrer Größe geordnet, entsteht der #Stern-Brocot-Baum. Diese Reihenfolge kann auch mit der oben definierten Binärdarstellung hergestellt werden, indem diese umgekehrt und nach dieser umgekehrten Binärdarstellung sortiert wird. In der dritten Zeile stehen beispielsweise 1/3, 3/2, 2/3 und 3/1 an den Stellen 1002, 1012, 1102 bzw. 1112. Umkehrung der Binärdarstellungen liefert 0012, 1012, 0112, 1112 und sortiert 0012, 0112, 1012 und 1112, was den Brüchen 1/3, 2/3, 3/2, und 3/1 entspricht. Das funktioniert auch zeilenübergreifend, wenn die Binärdarstellungen vor dem Sortieren mit führenden Nullen auf gleiche Länge gebracht werden.[11] Der Grund für diese Eigenschaften ist darin zu suchen, dass die Differenz zwischen benachbarten Brüchen (i+j)/j und i/(i+j) mit der Tiefe der Knoten zunimmt.[11]:85 Der nächste BruchZur Berechnung des nächsten Bruchs im #Calkin-Wilf-Baum gibt es eine einfache Formel. Ist a/b der vorgelegte Bruch, dann lautet der nächste Bruch[6]:69
wo die Gaußklammer [ · ] auf die nächste Ganzzahl abrundet. Stern-Brocot-Baum![]() Der Stern-Brocot-Baum ist eine Anordnung aller positiven rationalen Zahlen in Form eines binären Baumes. Er enthält die Brüche aus dem #Calkin-Wilf-Baum in jeder Tiefe nach der Größe sortiert und eignet sich so zur Bestimmung von Näherungsbrüchen für reelle Zahlen. Der Baum entsteht durch Verbindung der #Summenglieder, die an den geraden Stellen in jeder Zeile stehen, von einer Zeile zur nächsten, und nur die ihnen entsprechenden Brüche werden als solche ausgewertet (nicht so die randständingen , siehe #Programmierung der Optimierung). Die Summenglieder sind die Medianten der #Stammglieder auf der linken und der rechten Seite (an den ungeraden Stellen jeder Zeile, ein Stammglied ist der direkte Vorfahre, das andere ein weiter oben stehender). In jeder Zeile des Baums stehen die ersten Glieder der Stern-Brocot-Folge in der richtigen Reihenfolge in den Zählern der Brüche und in den Nennern in umgekehrter Reihenfolge. Da der größte Bruch in jeder Zeile linear mit der Zeilennummer wächst, die Anzahl der Glieder jedoch mit der Potenz von zwei, nähern sich die Brüche mit zunehmender Tiefe immer weiter an. Optimale rationale Näherung für eine reelle ZahlBrocot suchte zu einer bestimmten reellen Zahl x den besten Näherungsbruch p/q in dem Sinn, dass jede rationale Zahl s/t, die näher als p/q an x liegt, einen größeren Nenner hat: t>q. Die Zahl x markiert man im Baum als senkrechte Linie und setzt den Baum mit Hilfe der beiden links und rechts der Linie nächstgelegenen Stammglieder und des von ihnen eingeschlossenen Summenglieds/Medianten fort, bis eine zufriedenstellende Annäherung erreicht ist. Für die Zahl 1,7 = 17/10 führt das Vorgehen zu
Innerhalb des Baumes aus Abb. 6 ist die beste Näherung 1,7 ≈ 5/3 = 1,6 in einem Abstand von 1/30 = 0,03. Sie ist beste Näherungen in dem Sinn, dass jede rationale Zahl, die näher als 1/30 an x liegt, einen größeren Nenner hat, wie zum Beispiel 12/7 im Abstand 1/70. Offenbar nimmt der Abstand von links nach rechts, d. h. mit zunehmender Tiefe, monoton ab. Das Summenglied wird in jeder Spalte mit dem Medianten des rechten und linken Stammglieds verglichen, und dieser Mediant ersetzt das, von x aus gesehen, auf der Seite des Medianten liegende Stammglied, was durch Pfeile angedeutet ist. Programmierung der OptimierungObige Suche lässt sich problemlos in ein Computerprogramm umsetzen, wofür zwei Beispiele angegeben werden. Die Funktion type Ratio = (Integer, Integer)
type Interval = (Ratio, Ratio)
mediant :: Interval -> Ratio
mediant ((m, n), (m', n')) = (m+m', n+n')
approximate :: (Ratio -> Ordering) -> [Ratio]
approximate c = h ((0,1),(1,0)) where
h interval@(lo, hi) = mid : case c mid of
LT -> h (mid, hi)
GT -> h (lo, mid)
EQ -> []
where mid = mediant interval
Die generierte Liste ist endlich, wenn die gesuchte Zahl rational ist. Die Python Funktion def approximate( x=1., n=1000000 ):
"""approximate( x=1., n=1000000 )
Gibt den besten Naeherungsbruch fuer x mit Nenner <= n"""
from fractions import Fraction
( l, m, r ) = [ [0,1], [1,1], [1,0] ] # Stammglieder mit Mediant
f = 3*[ -1 ] # optimale l, m und r
while f.count( -1 ) > 0:
a = m
m = [ l[0] + r[0], l[1] + r[1] ] # Mediant von l und r
if f[1] < 0 and m[1] > n: # maximaler Nenner ueberschritten
f[1] = Fraction( *a ) # speichern des optimalen m
if m[0] < x*m[1]: # l0/l1 < m0/m1 < x < r0/r1
if f[0] < 0 and m[1] > n: # maximaler Nenner ueberschritten
f[0] = Fraction( *l ) # speichern des optimalen l
l = m
elif m[0] > x*m[1]: # l0/l1 < x < m0/m1 < r0/r1
if f[2] < 0 and m[1] > n: # maximaler Nenner ueberschritten
f[2] = Fraction( *r ) # speichern des optimalen r
r = m
else: # m0/m1 == x
if f[1] < 0: # m noch nicht gespeichert
f[1] = Fraction( *m ) # speichern des optimalen m
break
return sorted( [ (abs(y - x), y) for y in f ] )[0][1] # optimales f
WeblinksCommons: Stern-Brocot-Folge – Sammlung von Bildern, Videos und Audiodateien
Siehe auchEinzelnachweise
|
Portal di Ensiklopedia Dunia