Stern-Brocot-Folge

Die 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

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 …

wobei auch die folgende Stufentafel (Beginn der Folge mit s1 und Unterteilung bei den Semikolons „;“) zur besseren Darstellung verschiedener Eigenschaften benutzt wird:

1
12
1323
14352534
1547385727583745
165941171031181351279297
176115149134151118717101331411
1871361711165191423922131741915
19815720131962317281127162152419

siehe #Eigenschaften der Stufentafel. Die Stern-Brocot-Folge weist einige bemerkenswerte mathematische Besonderheiten auf:

  • Aufeinander folgende Zahlen der Folge sind einander teilerfremd und jedes mögliche Paar positiver, teilerfremder, ganzer Zahlen kommt genau einmal vor; das erlaubt mit ihr die Menge der rationalen Zahlen abzuzählen, siehe #Abzählung der rationalen Zahlen.
  • Die Folge zählt ungerade Glieder im Pascal’schen Dreieck, Wege in Graphen oder Darstellungsweisen von Hyperbinärzahlen, siehe #Zähleigenschaften.
  • Mit der Folge kann die am besten passende Zahnradpaarung für ein bestimmtes Übersetzungsverhältnis gefunden werden, was A. Brocot als erster erkannte,[5] siehe #Stern-Brocot-Baum.
  • Die größten Glieder in jeder Zeile der Stufentafel bilden die Fibonacci-Folge.
  • Das Vorkommen einer Zahl in der Stufentafel ergibt sich aus der Euler’schen φ-Funktion.
  • Die Position eines Zahlenpaars (a,b) in der Stufentafel hängt mit der Kettenbruch­entwicklung des Bruchs a/b zusammen.

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]

Geschichte

Gotthold Eisenstein veröffentlichte im Februar 1850 eine Arbeit über eine Zahlenreihe,

„welche aus zwei gegebenen Zahlen m und n ohne gemeinschaftlichen Theiler auf die Art entspringt, daß man fortgesetzt zwischen je zwei bereits erhaltene Zahlen ihre Summe schreibt.“

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

Abb. 1: Glieder der Folge aufgetragen über ihre Stelle in der Folge zeigen fraktale Strukturen. Die tiefsten Einschnitte liegen bei Zweierpotenzen.

Die Stern-Brocot-Folge s0, s1, s2,… ist durch das rekursive Bildungsgesetz

s2n= sn
s2n+1= sn + sn+1

mit den Anfangswerten

s0 = 0    und    s1 = 1

definiert. Das bedeutet in Worten:

  • Die Folge beginnt mit null und eins.
  • Glieder mit einer geraden Nummer sind gleich dem Glied mit der halben Nummer und
  • Glieder mit einer ungeraden Nummer sind gleich der Summe der Glieder mit der halben Nummer ihres Vorgängers und Nachfolgers. Anders ausgedrückt zerlegt man die ungerade Nummer in zwei Teile, die so eng benachbart sind wie überhaupt möglich: eine Zahl und die daran anschließende Zahl. Das Folgenglied ist dann die Summe der Glieder mit diesen Teilnummern.[6]:64 Dieses Gesetz ähnelt dem der Fibonacci-Folge.

Das Bildungsgesetz für die Glieder an ungeraden Stellen kann wegen s2n = sn umgeformt werden in

s2n+1 = sn + sn+1 = s2n + s2(n+1) = s2n + s2n+2

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:

n012345678910111213141516171819
sn01121323143525341547
n2021222324252627282930313233343536373839
sn3857275837451659411710
n4041424344454647484950515253545556575859
sn3118135127929712513811310711
n6061626364656667686970717273747576777879
sn49561761151491341511187171013
n8081828384858687888990919293949596979899
sn314111982113185171219716911211916

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 Eigenschaften

Berechnung der Folgenglieder

Neben 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:

  • Nach dem Bildungsgesetz ist sk = sk/2, wenn k gerade, oder sk = s(k-1)/2 + s(k+1)/2, wenn k ungerade ist. Durch fortgesetzte Anwendung dieser Formeln werden alle benötigten Folgenglieder und schließlich sn berechnet. Beispielsweise ist
s6 = s3 = s1 + s2 = s1 + s1 = 2
Die Anzahl der zu berechnenden Glieder wächst mit dem Logarithmus von n.
c = a + b − 2r
ab, wo r = a − [a/b]·b der Rest bei Division von a durch b ist (sodass a−r durch b teilbar und 0 ≤ r < b ist, [·] ist die Gaußklammer). Das Glied sn ergibt sich aus n−1 maliger Anwendung der Formel auf s0 und s1.
  • Für n > 1 besteht der Zusammenhang
sn = kn−1sn−1 − sn−2
Darin ist kj die größte ungerade Zahl für die j durch 2(kj−1)/2 teilbar ist.[7][8]

Weitere Formeln können aus den #Zähleigenschaften der Stern-Brocot-Folge abgeleitet werden.

Eigenschaften der Folge

Für die Glieder der Stern-Brocot-Folge gilt:[4]

  • Keine zwei geraden Glieder stehen hinter einander.
  • Bei drei aufeinander folgenden Gliedern ist nicht nur die mittlere von ihnen ungerade; es sind aber auch nicht alle drei ungerade.
  • Die Summe der beiden Nachbarn eines Gliedes ist durch selbiges teilbar.
  • Das auf a,b folgende Paar b,c ergibt sich aus b/c = 1/(1+2[a/b]-a/b), wo die Gaußklammer [ · ] auf die nächste Ganzzahl abrundet.[6]:69
  • Zwei aufeinander folgende Glieder sind teilerfremd.
  • Die Folge enthält jede Natürliche Zahl und alle möglichen Paare einander teilerfremder Zahlen.
  • Ein bestimmtes Zahlenpaar kommt nur genau einmal in der Folge vor.

Die letzten drei Aussagen bedeuten, das 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 Stufentafel

M. 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 Reihe (m,n), die entwickelt wird, ist die nullte Reihe,
  • Jede Zahl einer Reihe ist ein Glied der Reihe und eine Gruppe ist eine Anzahl aufeinander folgender Glieder.
  • Glieder, die aus der Summe ihrer Nachbarn entstanden, heißen Summenglieder, und alle anderen Stammglieder. Die Summenglieder stehen an geraden Stellen und die Stammglieder an ungeraden Stellen jeder Reihe außer der nullten.
  • φ(n) ist die Eulersche φ-Funktion, d. h. die Anzahl der zu n teilerfremden Zahlen, die kleiner oder gleich n sind.

Die Entwicklung (1,1) beginnt mit

p p-te Reihe
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,
5 1,6,5,9,4,11,7,10,3,11,8,13,5,12,7,9,2,9,7,12,5,13,8,11,3,10,7,11,4,9,5,6,
usw.
 ↓
Δ = 011213231435253415473857275837451

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:

  • Die Anzahl der Glieder in der p-ten Reihe ist 2p+1.
  • Die Summe der Glieder in der p-ten Reihe ist 3p+1.
  • Die Summe der Quotienten zweier aufeinander folgender Glieder in der Reihe ist (3·2p−1)/2.[9]
  • Die Summe der Kehrwerte der Produkte zweier aufeinander folgender Glieder in der Reihe ist eins.[9]
  • Übereinander stehende Glieder erzeugen eine Arithmetische Folge und die Differenzen in den Folgen ergeben ihrerseits die Stern-Brocot-Folge, vermerkt in der untersten, blau geschriebenen Zeile obiger Tabelle.
  • Jede Reihe ist ein Palindrom, dessen Mitte bei Reihen ungerader Länge eine Zwei ist.
  • Steht in einer Zeile die Gruppe und direkt darunter , dann gilt:
In der vierten Reihe steht beispielsweise 5,4,7 über 6,5,9 in der fünften Reihe, und es stimmt:
  • Jede Zahl n kommt sooft als Summenglied vor, wie es kleinere Zahlen gibt, die zu ihr teilerfremd sind; diese Anzahl ist φ(n). Eine Primzahl π kommt π−1-mal als Summenglied vor. In Zeile n−1 kommt n zum letzten Mal als Summenglied vor. Ab der n-ten Zeile kommt n in jeder Zeile φ(n) mal als Stammglied vor.
  • Die Zahl n kommt in Zeile p sooft vor, wie die Zerlegung von n in zwei teilerfremde a, b gelingt, sodass die Summe der Teilnenner des zu a/b gleichen Kettenbruchs nicht größer als p ist. Beispielsweise lässt sich die Zahl fünf viermal in einander teilerfremde Zahlen zerlegen:
Entsprechend kommt fünf vor der dritten Reihe keinmal, in der dritten Reihe zweimal und in allen darauf folgenden Reihen viermal vor.
  • Die Gruppe (a,b) steht in der Zeile p = k0+k1+…+km−1, wenn a/b gleich ist zum einfachen Kettenbruch (k0;k1,…,km). Beispielsweise ist in der fünften Reihe, die mit 1,6,5,9,4,11 beginnt:
Die Summe der Teilnenner der Kettenbrüche ist hier in allen Fällen sechs, d. h. eins mehr als die Zeilennummer fünf, so wie es sein muss.
  • Die Gruppe (a,b) kommt in der ersten Hälfte einer Reihe vor, wenn die kleinste positive Zahl c, die mit a multipliziert den Rest 1 bei Division durch a+b ergibt, kleiner als (a+b)/2 ist:
∃c: ac ≡ 1 mod (a+b)und0 ≤ c < (a+b)/2(a,b) kommt in der ersten Hälfte einer Reihe vor.
So steht die Gruppe (5,9) in der ersten Hälfte der fünften Reihe, weil 5·3 = 15 ≡ 1 mod 14 und 3 < 14/2 = 7. Die Gruppe (9,5) andererseits liegt in der zweiten Hälfte, weil 9·11 ≡ (-5)·(-3) = 15 ≡ 1 mod 14 und 11 > 7.

Zähleigenschaften

Zusammenhang mit dem Pascal’schen Dreieck

Wenn 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.

1
11
121
1331
14641
15101051
161520156
1721353521
1828567056
193684 126 126

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 Zahlen

Die 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

1101, 1101, 1101, 1101, 1101

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]

8 = 10002 = 2002 = 1202 = 1122

und dem entspricht s9 = 4.

Abzählung der rationalen Zahlen

Fü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

Abb. 2: 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).

Abb. 3

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üchen

Calkin-Wilf-Baum

Im Calkin-Wilf-Baum sind die Verhältnisse aufeinander folgender Glieder der Stern-Brocot-Folge in einer Baum­struktur 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 Nenner eines Bruchs ist der Zähler des folgenden; b(n)/b(n+1) wird gefolgt von b(n+1)/b(n+2).
  • Die b(n), angefangen mit n=0, sind die Anzahl der Möglichkeiten n als Summen von Zweierpotenzen zu schreiben, von denen jede maximal doppelt gezählt wird (Hyperbinärzahlen, siehe auch #Zusammenhang mit der Binärdarstellung von Zahlen).
  • b(n) und b(n+1) sind einander teilerfremd.
  • Jede rationale Zahl erscheint nur genau einmal im Baum.

Der Baum konstruiert sich wie folgt:

  • 1/1 ist die Wurzel des Baumes (im Bild oben).
  • Der Verzweigungspunkt mit dem Bruch i/j hat zwei Äste; der linke führt zum Verzweigungspunkt i/(i+j) und der rechte zu (i+j)/j.

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 Bruch

Zur 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

b/c = 1/(1 + 2[a/b] − a/b)

wo die Gaußklammer [ · ] auf die nächste Ganzzahl abrundet.

Stern-Brocot-Baum

Abb. 6: 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 Zahl

Brocot suchte zu einer bestimmten reellen Zahl x den besten Näherungsbruch. Die Zahl 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

Rechtes Stammglied1/0→1/02/1→2/1→2/17/412/7
Summenglied1,7>1/11,7<2/11,7>3/21,7>5/31,7<7/41,7<12/71,7=17/10
Linkes Stammglied0/11/1→1/13/25/3→5/3→5/3
Kleinster Abstand7/103/101/51/301/301/700
Ende des Baums →

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. 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 Optimierung

Obige Suche lässt sich problemlos in ein Computerprogramm umsetzen, wofür zwei Beispiele angegeben werden.

Die Funktion approximate in folgendem Haskell-Programm generiert die Liste aller besten Näherungen für eine positive reelle Zahl, die als Funktion gegeben ist, welche für jede rationale Zahl angibt, ob sie größer, kleiner oder gleich der gesuchten ist.

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 approximate gibt für eine positive reelle Zahl x den besten Näherungsbruch mit einem Nenner kleiner oder gleich n.

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

Weblinks

Siehe auch

Einzelnachweise

  1. A002487 ist die Bezeichnung der Zahlenfolge in der On-Line Encyclopedia of Integer Sequences
  2. a b G. Eisenstein: Mathematische Werke. Hrsg.: American Mathematical Society. Band 1. AMS Chelsea Publishing Series, 1989, ISBN 0-8284-1280-4, S. 710–711 (eingeschränkte Vorschau in der Google-Buchsuche).
    G. Eisenstein: Bericht über die zur Bekanntmachung geeigneten Verhandlungen der Königl. Preuss. Akademie der Wissenschaften zu Berlin. Hrsg.: Preußische Akademie der Wissenschaften. 1850, S. 41–42 (forgottenbooks.com [PDF] PDF-Seite 48/49).
  3. a b A. Brocot: Berechnung von Zahnrädern durch Annäherung, neue Methode. In: Revue Chronométrique. Band 3, 1861, S. 186–194 (französisch, eyrolles.com – Originaltitel: Calcul des rouages par approximation, nouvelle méthode.).
  4. a b c d e f M. Stern: Ueber eine zahlentheoretische Funktion. In: Journal für die reine und angewandte Mathematik. Band 55, Nr. 28, 1858, S. 193–220 (digizeitschriften.de).
  5. Die Anwendung wird beispielsweise beschrieben in: David Austin: Trees, Teeth, and Time: The mathematics of clock making. American Mathematical Society, 12. November 2018, abgerufen am 15. Mai 2015 (englisch).
  6. a b c d e f g h Jean-Paul Delahaye: Die verkannte Schwester der Fibonacci-Folge. In: Spektrum der Wissenschaft. Mai 2015, S. 64–69 (spektrum.de).
  7. A037227 in OEIS
  8. a b Stephen P. Glasby: Aufzählung der rationalen Zahlen von links nach rechts. In: Mathematical Association of America (Hrsg.): American Mathematical Monthly. Band 118, Nr. 9, 2011, S. 830–835, doi:10.4169/amer.math.monthly.118.09.830, arxiv:1011.2823 (englisch, Originaltitel: Enumerating the rationals from left to right.).
  9. a b J. Grimm: Fibonacci-Zahlen und der Stern-Brocot-Baum in Coq. Research Report RR-8654. Hrsg.: INRIA. 2014, S. 1–76, arxiv:1011.2823v1 (englisch, researchgate.net [abgerufen am 17. Januar 2022] Originaltitel: Fibonacci numbers and the Stern-Brocot tree in Coq.).
  10. a b Neil Calkin, Herbert Wilf: Nachzählen der rationalen Zahlen. In: Mathematical Association of America (Hrsg.): The American Mathematical Monthly. Band 107, Nr. 4, 2000, S. 360–363, doi:10.1080/00029890.2000.12005205 (englisch, recounting.pdf [abgerufen am 12. Januar 2022] Originaltitel: Recounting the rationals.).
  11. a b c Christoph Pöppe: Rationale Zahlen zählen. In: Spektrum der Wissenschaft. Mai 2021, S. 82–86 (spektrum.de).
  12. M. Niqui: Exakte Arithmetik auf dem Stern–Brocot–Baum. In: Journal of Discrete Algorithms. Band 5, Nr. 2. Elsevier, 2007, S. 356–379, doi:10.1016/j.jda.2005.03.007 (englisch, Originaltitel: Exact arithmetic on the Stern–Brocot tree.).

Auf dieser Seite verwendete Medien

Calkin-Wilf spiral.svg
The Calkin–Wilf sequence, a sequence that includes each positive rational number exactly once and is formed by breadth first traversal of the Calkin–Wilf tree. The sequence is depicted as the red spiral tracing through the tree.
TernaryTreeOfSternAndBrocot.svg
Autor/Urheber: Alva2004, Lizenz: CC BY-SA 4.0
The number of paths from the upper most 1 to a node following the arrows is the stern-brocot sequence.
CalkinWilf.svg
schéma de l'arbre de Calkin-Wilf, variante de l'arbre de Stern-Brocot, Neil Calkin, Herbert Wilf (2000), Recounting the rationals. American mathematical monthly, 107(4), pp 360–363.
BinaryTreeOfSternAndBrocot.svg
Autor/Urheber: Alva2004, Lizenz: CC BY-SA 4.0
The number of paths from a red 1 to a node following the arrows is the stern-brocot sequence.
Suite Diatomique Stern graphe.png
Autor/Urheber: Theon, Lizenz: CC BY-SA 4.0
Représentation graphique des points [n,s(n)] où s(n) est la suite diatomique de Stern définie par s(1) = 1, s(2n) = s(n), s(2n+1) = s(n) + s(n+1)
SternBrocotTree.svg
Autor/Urheber: Aaron Rotenberg, Lizenz: CC BY-SA 3.0
SVG recreation of Image:Sternbrocot.png. Shows the first few iterations of a Stern-Brocot tree. As you can probably imagine, it took a while to get all of those little numbers to line up using Inkscape's Align and Distribute dialog.