Sowjetisches Nummernschild und Kolmogorov KomplexitÀt

Bild


Der Physiker Lev Landau spielte ein mentales Spiel mit sowjetischen Zahlen [ 1 ]. Die Tafeln bestanden aus zwei Zahlen, einem Bindestrich, zwei weiteren Zahlen und einigen Buchstaben.

Spielregel


Sein Spiel bestand darin, mathematische Operatoren auf Zahlen auf beiden Seiten des Strichs anzuwenden, damit der Strich durch ein Gleichheitszeichen ersetzt werden konnte. Wenn Sie beispielsweise das Nummernschild 44-74 nehmen, ist eine der Lösungen

4! + 4 = 7 * 4

Bitte beachten Sie, dass wir Operatoren wie ! , + und * , aber ohne Zahlen hinzuzufĂŒgen.

Gibt es fĂŒr jedes mögliche Nummernschild eine Lösung? Dies hĂ€ngt davon ab, welche Operatoren Sie verwenden dĂŒrfen.

Sie können das Spiel trivialisieren, indem Sie die Bruchteiloperation {x} auf beide Seiten anwenden, da der Bruchteil einer Ganzzahl Null ist. Sie können den Bruchteilbetreiber mit der BegrĂŒndung verbieten, dass dies eindeutig keine mathematische Operation der High School ist, oder sie einfach verbieten, weil dies das Spiel uninteressant macht.
Die Übersetzung wurde von EDISON Software unterstĂŒtzt , die in vielversprechende Startups investiert und verschiedene Cloud-Services entwickelt .

One-Stop-Lösung


Es stellt sich heraus, dass es eine universelle Lösung gibt, beginnend mit der Beobachtung, dass

√ (n + 1) = sec arctan √ n.

Wenn eine Seite grĂ¶ĂŸer als die andere ist, ergibt die obige Formel eine sofortige Lösung. Zum Beispiel wird eine Lösung fĂŒr ein Kennzeichen 89-88 sein

√89 = sec arctan√88.

Wenn der Unterschied grĂ¶ĂŸer ist, kann die Formel wiederholt angewendet werden. Zum Beispiel könnten wir die Formel zweimal anwenden, um zu erhalten

√ (n + 2) = sec arctan√ (n + 1) = sec arctan sec arctan√ n

und daher ist eine mögliche Lösung fĂŒr 35-37

sec arctan sec arctan √35 = √37.

Kolmogorov KomplexitÀt


Da eine Lösung immer möglich ist, können wir das Spiel interessanter machen, indem wir die einfachste Lösung finden. Wir haben ein intuitives VerstĂ€ndnis dafĂŒr, was dies bedeutet. Mit unserem Beispiel 44-74 die erste Lösung

4! + 4 = 7 * 4

einfacher als universelle Lösung

sec arctan sec arctan ... √44 = √74

Dies wĂŒrde den 30-fachen Einsatz von Sekanten und Arkustangens erfordern.

Die Kolmogorov-KomplexitĂ€t eines Objekts ist die LĂ€nge des kĂŒrzesten Computerprogramms zum Erstellen eines Objekts. Wir könnten die Kolmogorov-KomplexitĂ€t der Funktionen berechnen, die auf die Zahlen auf jeder Seite angewendet werden, um zu messen, wie komplex die Lösung ist.

Um dies herauszufinden, mĂŒssen wir angeben, welche Programmiersprache wir haben, und es ist nicht so einfach, wie es scheint. Wenn wir die mathematische Notation als Programmiersprache betrachten, wollen wir zĂ€hlen! wie ein Charakter und arctan wie 6 Zeichen? Das scheint nicht richtig zu sein. Wenn wir "arctan" als "atn" schreiben wĂŒrden, wĂŒrden wir weniger Zeichen verwenden, ohne eine andere Lösung zu erstellen.

KomplexitÀt des Python-Codes


Um die Dinge objektiver zu gestalten, könnten wir die LĂ€nge realer Computerprogramme berĂŒcksichtigen, anstatt die mathematische Notation als Programmiersprache darzustellen. Nehmen wir an, wir haben Python gewĂ€hlt. Dann sind hier einige Funktionen, die unsere beiden Kennzeichenlösungen 44-74 berechnen.

from math import sqrt, cos, atan def f(): sec = lambda x: 1/cos(x) y = sqrt(44) for _ in range(30): y = sec(atan(y)) return y def g(): return sqrt(77) 

Wir könnten die KomplexitÀt unserer Funktionen f und g messen, indem wir die Anzahl der Zeichen in jedem zÀhlen. Aber es gibt immer noch Schwierigkeiten.

Was ist mit Importen? Seine LĂ€nge muss mit f rechnen, da alle importierten Anweisungen verwendet werden, g jedoch eine kĂŒrzere Anweisung verwendet, die nur sqrt importiert. TĂ€uschen wir im Grunde genommen sogar den Import einer Bibliothek?

DarĂŒber hinaus liefern die beiden oben genannten Funktionen aufgrund der begrenzten Genauigkeit nicht genau das gleiche Ergebnis. Wir können uns vorstellen, dass unsere importierten Funktionen unendlich genau sind, aber dann verwenden wir nicht Python, sondern eine idealisierte Version von Python.

Was ist mit der Schleife? Dies fĂŒhrte neue Zahlen, 3 und 0, ein und verstĂ¶ĂŸt daher gegen die Regeln des Landau-Spiels. Sollen wir uns also abrollen, bevor wir die KomplexitĂ€t berechnen?

Gedankenexperiment


Kolmogorovs KomplexitĂ€t ist ein sehr nĂŒtzliches Konzept, aber es ist eher ein mentales Experiment als das, was Sie in der Praxis berechnen können. Wir können uns das kĂŒrzeste Programm vorstellen, um etwas zu berechnen, aber wir wissen selten, dass wir wirklich ein solches Programm gefunden haben. In der Praxis können wir nur die Obergrenzen kennen.

Theoretisch können Sie alle Turing-Maschinen einer bestimmten LĂ€nge oder alle Python-Programme einer bestimmten LĂ€nge auflisten und die kĂŒrzeste finden, die diese Aufgabe ausfĂŒhrt. Die Liste wĂ€chst jedoch exponentiell mit zunehmender LĂ€nge.

Es ist jedoch möglich, die Dauer bestimmter Programme zu berechnen, wenn wir uns mit einigen der oben genannten Schwierigkeiten befassen. Wir könnten Landau zu einem Spiel fĂŒr zwei machen, indem wir sehen, wer in einer festgelegten Zeit eine einfachere Lösung anbieten kann.

ZurĂŒck nach Landau


Wenn wir Sinus und Grad in unserer Gruppe von Operatoren zulassen, dann ist B.S. Gorobets ist eine universelle Lösung. FĂŒr n ≄ 6 ist n! ein Vielfaches von 360 und so

sin (n!) ° = 0.

Und wenn n kleiner als 6 ist, beginnt seine zweistellige Darstellung bei Null, sodass wir die Zahlen multiplizieren können, um Null zu erhalten.

Wenn wir transzendentale Funktionen verbieten, blockieren wir den Gorobets-Trick und haben Funktionen, deren LÀnge wir objektiv in einer Programmiersprache messen können.

Source: https://habr.com/ru/post/de439296/


All Articles