2016-10-14 10 views
3

ich einen Vortrag über Graham's Number geben und ich die ersten paar ↑ s (dh 3 ↑ 3, 3 ↑↑ 3 und 3 ↑↑↑ 3) berechnen wollte geben Sie ihnen eine Vorstellung davon, wie groß es in so kurzer Zeit wird. Ich schrieb einig naiven/direkten Code in Python, basierend auf den Definitionen der Pfeilnotation unten dargestellt:Computing 3 ↑↑↑ 3 (In Python)

def arrow2(a,b): 
    c=1 
    for i in np.arange(b): 
     c=a**c 
    return c 

def arrow3(a,b): 
    c=1 
    for i in np.arange(b): 
     c=arrow2(a,c) 
    return c 

Obwohl „long“ ganze Zahlen (unbegrenzt) und numpy Arrays (unbegrenzt) verwendet wurden, natürlich der Code in Anspruch nimmt viel zu viel Speicher beim Laufen und die Verarbeitung wird sehr lange dauern. Gibt es dafür eine Lösung? (oder kennt jemand die Antwort schon?) Danke!

+1

Dies gilt nicht wirklich etwas mit „big data“ zu tun, wie es üblicherweise verwendet wird. –

Antwort

2

Erweiterung auf meinen Kommentar, ich möchte nur ein wenig nur wie konkretisieren es ist hoffnungslos es ist, Zahlen dieser Größe zu erfassen.

ich Sie schon davon ausgehen, dass

3 ↑↑↑ 3 = 
3 ↑↑ (3 ↑↑↑ 2) = 
3 ↑↑ (3 ↑↑ 3) = 
3 ↑↑ (3 ↑ 3 ↑ 3) = 
3 ↑↑ (3 ↑ 27) = 
3 ↑↑ 7625597484987 

So dies reduziert das Wachstum von 3 ↑↑ i zu studieren. Mal sehen, wie das wächst:

3 ↑↑ 0 = 1 
3 ↑↑ 1 = 3**(3↑↑0) = 3**1 = 3 
3 ↑↑ 2 = 3**(3↑↑1) = 3**3 = 27 
3 ↑↑ 3 = 3**(3↑↑2) = 3**27 = 7625597484987 
3 ↑↑ 4 = 3**(3↑↑3) = 3**7625597484987 = ...? 

Wir sind schon jenseits der Grenze dessen, was machbar ist, auf den meisten PCs zu berechnen.

>>> import math 
>>> math.log10(3) * 3**27 
3638334640024.0996 

dass der Logarithmus zur Basis 10 ist 3 ↑↑ 4 zeigt, dass letztere über 3 Billionen (dezimal) Ziffern hat. Selbst bei einer benutzerdefinierten Codierung mit 4 Bits pro Dezimalstelle würden mehr als 1,5 Terabyte Speicherplatz auf der Festplatte benötigt - und nur wenige Computer verfügen über genügend Arbeitsspeicher, um sie auf einfache Weise zu berechnen.

Dann ist 3 ↑↑ 5 wiederum 3 dieses Mehr Billionen digit potenziert. Die Wörter und Notationen, die wir normalerweise verwenden, sind bereits unangemessen, um irgendeine wirkliche Idee davon zu geben, wie groß das ist, und es gibt keinen Computer mit genug RAM oder Festplattenspeicher, um damit umzugehen.

Und wir sind nur bis zu 3 ↑↑ 5! Es gibt immer noch Billionen von Schichten 3 ↑↑ 7625597484987 = 3↑↑↑3 zu erreichen zu gehen. Es ist jenseits des menschlichen Verständnisses. Obwohl, ja unendlich viele Zahlen sind noch größer ;-)

+1

Aus irgendeinem Grunde, den ich bereits wusste, wie lächerlich riesig ist, aber selbst dann ist es nie, wie groß es _actually_ überraschen mich nicht mehr ist. – Harambe

4

Von Wikipedia: enter image description here

Angenommen, Sie diese Nummer speichern möchten (nennen wir es N) auf einem Computer, das heißt in binär. Dies erfordert k Bits, wobei 2^k ~ N. Das bedeutet, k ist selbst extrem groß (vergleiche einfach 2^k mit dem Turm am Ende), viel zu groß, um auf allen Festplatten der Welt gespeichert zu werden.

+1

Wenn man bedenkt, dass 3 ↑↑↑ 3 so groß ist, konnten wir nicht einmal einen signifikanten Teil seiner Binärdarstellung speichern, selbst wenn jedes Elektron im Universum dazu verwendet werden könnte, eines seiner Bits zu speichern. Was wiederum unvorstellbar größer ist, als alle Festplatten der Welt halten könnten. Es gibt einfach nichts in der menschlichen Erfahrung, das irgendeine bedeutungsvolle Beziehung zu so großen Zahlen hat. So weit ein Start, sollte die OP ihren Code in C neu zu schreiben ;-) –