Blog der Heimetli Software AG

Graph der Collatz-Sequenzen

Networkx macht es wirklich einfach ein Netzwerk mit den Collatz-Sequenzen zu erstellen:

import networkx as nx
from networkx.drawing.nx_agraph import write_dot

# Create the graph
G = nx.DiGraph()

for n in range(2,27):
    while n != 1:
        nxt = 3 * n + 1 if n % 2 == 1 else n // 2
        G.add_edge( n, nxt )
        n = nxt

write_dot( G, "nx.dot" )

Dass nur die Sequenzen bis 26 aufgezeichnet werden hat einen einfachen Grund: die Sequenz von 27 ist so lang dass das Diagramm unansehnlich wird.

Wer genau hinschaut findet auch heraus dass der Zyklus 1 - 4 - 2 - 1 fehlt. Den habe ich ebenfalls bewusst weggelassen.

Ein schönes Diagramm von diesem Netzwerk zeichnen kann Networkx aber nicht. Deshalb wird das Netz in ein DOT-File geschrieben.

Das DOT-File wird mit dem Layout-Tool dot aus dem Graphwiz-Paket in ein SVG umgewandelt:

dot -Tsvg < nx.dot > nx.svg

Das Resultat sieht so aus:

2 2 1 1 2->1 3 3 10 10 3->10 5 5 10->5 16 16 5->16 8 8 16->8 4 4 8->4 4->2 6 6 6->3 7 7 22 22 7->22 11 11 22->11 34 34 11->34 17 17 34->17 52 52 17->52 26 26 52->26 13 13 26->13 40 40 13->40 20 20 40->20 20->10 9 9 28 28 9->28 14 14 28->14 14->7 12 12 12->6 15 15 46 46 15->46 23 23 46->23 70 70 23->70 35 35 70->35 106 106 35->106 53 53 106->53 160 160 53->160 80 80 160->80 80->40 18 18 18->9 19 19 58 58 19->58 29 29 58->29 88 88 29->88 44 44 88->44 44->22 21 21 64 64 21->64 32 32 64->32 32->16 24 24 24->12 25 25 76 76 25->76 38 38 76->38 38->19