Wie lange läuft die Collatz-Rekursion?


19

Ich habe den folgenden Python-Code.

def collatz(n):
    if n <= 1:
        return True
    elif (n%2==0):
        return collatz(n/2)
    else:
        return collatz(3*n+1)

Wie ist die Laufzeit dieses Algorithmus?

Versuchen:

Wenn die Laufzeit der Funktion bezeichnet . Dann denke ich, ich habe { T ( n ) = 1  für  n 1 T ( n ) = T ( n / 2 )  für  n  gerade T ( n ) = T ( 3 n + 1 )  für  n  ungeradeT(n)collatz(n)

{T(n)=1 for n1T(n)=T(n/2) for n evenT(n)=T(3n+1) for n odd

Ich denke, wird lg n sein, wenn n gerade ist, aber wie berechnet man die Wiederholung im Allgemeinen?T(n)lgnn


4
Das sollte sein T(n)=T(n2)+1T(n)=1n

2
54 ist gerade, T (54) = 112! = Lg (54)
Taemyr

Wird angenommen, dass der Benutzer nur eine Ganzzahl eingibt?
Dean MacGregor

@DeanMacGregor Ja. Tatsächlich wird eine positive ganze Zahl angenommen.
Duskwuff

mehr bkg detail wäre hilfreich. Woher hast du den Code, wie bist du darauf gekommen? Dies ist ein halbberühmtes offenes Problem in der Zahlentheorie, das seit etwa einem Jahrhundert ungelöst ist und über das ein ganzes Buch von Lagarias geschrieben wurde. von CS pov zu beweisen, dass es sich in jeder Zeit- oder Raumkomplexitätsklasse um einen Beweis handelt. viele weitere refs hier . auch ein tolles Thema für den Computer Science Chat für alle Interessierten. Es gibt auch einen collatzTag für MathOverflow usw. Neueste Untersuchungen zeigen, dass das Problem fraktale Eigenschaften hat, die es schwierig machen.
vzn

Antworten:


29



Vielen Dank. Aber meine Rekursion ist richtig? Wenn ja, können wir dann immer noch keine Lösung für diese Rekursion finden?
9. Juli,

T(n)

T(n)=2T(n/2)+O(n)

7
"Da dies ungelöst ist, gibt es keine Obergrenze" - wir müssen hier mit der Sprache vorsichtig sein. Wir kennen die Lösung dieser Wiederholung, das Ende der Geschichte, nicht.
Raphael

7


13

Die Zeitkomplexitätsfunktion ist

{T(n)=O(1) for n1T(n)=T(n/2)+O(1) for n evenT(n)=T(3n+1)+O(1) for n odd

Dies kann wie folgt umgeschrieben werden, wenn Sie an asymptotischer Zeitkomplexität interessiert sind.

{T(n)=1 for n1T(n)=T(n/2)+1 for n evenT(n)=T(3n+1)+1 for n odd

M,1nHaltnn

Collatz-Vermutung ist eine sehr berühmte Vermutung, die Collatz 1937 vorschlug. Viele bedeutende Mathematiker haben unzählige Stunden damit verbracht, diese Vermutung zu lösen, aber ohne Erfolg. Sogar Paul Erdős sagte über die Collatz-Vermutung: "Die Mathematik ist für solche Probleme noch nicht bereit."


1
"Verschwendet" ist ein subjektives Urteil. Siehe die Expertenanalyse von Lagarias für Gründe, warum Arbeit / Teilergebnisse an der Vermutung nicht als "verschwendet" angesehen werden können. auch das Zitat von Erdos ist wahrscheinlich ein paar Jahrzehnte alt und die Mathematik hat sich seitdem erheblich weiterentwickelt und setzt sich fort ... und wahrscheinlich sind nicht alle neuen mathematischen Techniken gegen das Problem ausprobiert worden.
vzn

Das war eine freche Bemerkung. (Um fair zu sein, habe ich es in Klammern gesetzt, nicht wahr?) Bis das Problem gelöst ist, scheinen alle Anstrengungen verschwenderisch zu sein, aber sobald es gelöst ist, sehen Sie, wie selbst die Fehler zur Lösung geführt haben. Und ich stimme Ihnen nicht zu, dass die Mathematik beträchtliche Fortschritte gemacht hat. Die Technologie hat erhebliche Fortschritte gemacht, aber Physik, Mathematik und sogar Informatik schreiten nur langsam voran, und so sollte es auch sein (ich kann das sagen, weil ich mich immer noch nicht veraltet fühle, wenn ich meine Seile vor 30 Jahren gelernt habe).
Shreesh

3x+1

Lagarias schrieb / kompilierte / editierte ein ganzes Buch zu diesem Thema und es klingt "entschuldigend", das Problem zu studieren? lol! ganz im gegenteil . Er ist sich jedoch einig, dass er eine defensive Position einnimmt, da viele andere Mathematiker das Problem nicht als bedeutsam oder einen größeren Angriff / Aufwand wert betrachten (und beachten Sie, dass Gauß bei Fermats Last Thm! genau dasselbe empfand). Es gibt aber auch viele andere Fälle, in denen Spitzenmathematiker es total ernst nehmen, z . B. Tao .
vzn

2

noddn3n+1

T(n)=2T(n/2)+nT(0)T(1)

3n+1


0

Sie haben T (n) = T (n / 2) + 1, wenn n gerade ist. Aber dann n / 2 ist ziemlich wahrscheinlich nicht einmal, so dass Sie dort festsitzen.

Was passiert ist, dass die netten kleinen Regeln, die Sie gelernt haben, mit einem echten Problem konfrontiert sind und nicht funktionieren. Sie schlagen mit dem Gesicht voran gegen eine Mauer und es tut weh. Tun Sie sich selbst einen Gefallen, und folgen Sie der Rekursion für T (7) manuell. Dann erfahren Sie, ob Sie immer noch der Meinung sind, dass dies mit lg n zusammenhängt.

Wenn Sie glauben, dass dies nicht mit der ursprünglichen Frage zusammenhängt, weil 7 nicht gerade ist: Immer wenn n ungerade ist, ist T (n) = T (3n + 1) und 3n + 1 gerade. Wenn also T (n) logarithmisch wäre n wenn n gerade ist, wäre es log (3n + 1) + 1, wenn n> 1 ungerade ist.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.