Het aardige van een probleem dat je niet op kan lossen is dat je er heel veel van leert als je het toch probeert.
ik denk niet dat ik heel ver kom maar ik heb wel een paar dingetjes gevonden die anderen misschien verder helpen.
We kunnen gebruik maken van het feit dat alle getallen tot 2^68 al zijn geprobeerd.
Ik heb het paper van Lagarias doorgelezen en het viel me op dat er weinig concrete poging gedaan wordt om dichter bij een oplossing te komen. Er wordt getoond hoe het probleem maar een voorbeeld is van grotere klasses van problemen. Heel interessant allemaal, maar dat leidt ons niet op de weg naar de oplossing als we die andere problemen ook niet op kunnen lossen. Sterker nog. Oplossen zal misschien wel moeilijker worden omdat we geconfronteerd kunnen worden met uitzonderingen op andere varianten die voor deze variant helemaal niet van toepassing zijn.
Als (ex)programmeur weet ik dat je om een algoritme goed en efficiënt vorm te geven moet proberen te veralgemeniseren. Als je dat slim doet kan je je code op verschillende plekken handig hergebruiken. Dat scheelt werk en vermindert de kans op fouten. Ik weet ook dat je moet specificeren. Daarmee bedoel ik dat je het probleem moet onderverdelen in stapjes die je één voor één kan zetten zodat je uiteindelijk je doel bereikt. Dat mis ik een beetje in het verhaal van Lagarias. Niet verwonderlijk denk ik, want die stappen zijn onderdeel van een concrete oplossing. En die heeft hij in dit paper gewoon niet behandeld.
Zoals in de al genoemde
Veritasium video uitgelegd kunnen we het Collatz probleem oplossen door te bewijzen dat alle reeksen op enig moment een getal bereiken dat lager is dan het begingetal. Daarmee laten we zien dat de sequence waarin we zitten aansluit op een andere sequence die naar 1 toegaat.
Ik denk eigenlijk dat dat voldoende is. Het getal wat we willen bereiken verder naar beneden brengen is voor een concrete oplossing van het probleem zinloos. Het aantal gevallen waarvoor het bewezen kan worden omhoog brengen is zinvoller.
Het is extreem eenvoudig om een programma te schrijven dat 1 voor 1 alle getallen van 1 tot sint juttemis gaat nalopen en proberen. Het nadeel van zo'n programma is dat je niet echt ziet wat er gebeurt en dus ook niet zomaar alle verbanden ziet. En verbanden zijn er wel degelijk. Een heleboel zelfs. Lagarias sprak van volledige chaos en van waarschijnlijkheden. Er is helemaal niet zoveel chaos. Er is zelfs heel veel orde. Zoveel orde zellfs dat er uiteindelijk (bijna?) geen gaten zijn.
De zoektocht naar uitzonderingen lijkt misschien een beetje op de zoektocht naar priemgetallen. De priemgetallen zijn niet heel ordelijk verdeeld. Maar er is wel een hele duidelijke en veelzijdige orde van getallen die
geen priemgetal zijn.
In principe alle rekentafels van priemgetallen van n * priemgetal met n = (2,3,4,...,∞) samen vormen het netwerk van de getallen die geen priemgetal zijn. De gaten daartussen zijn wel priemgetallen.
In het 3x+1 probleem werkt het ook een beetje zo. Om het probleem op te lossen hoeven we niet te proberen alle getallen naar 1 te brengen. We hoeven alleen maar te kijken of ze op enig moment leiden tot een lager getal dan het begingetal.
Dat betekent dat we alle even getallen kunnen overslaan. Die worden eerst door 2 gedeeld en komen dus direct op een lager getal uit. Maar er zijn nog veel meer getallen die we niet meer hoeven te beschouwen.
=ALS(J6>1;ALS(IS.ONEVEN(J6);3*J6+1;J6/2);0)
Een spreadsheet maken dat al het rekenwerk eenvoudig en overzichtelijk voor je doet is heel eenvoudig. Met een statement zoals de regel hierboven heb ik een sheet gemaakt waarin ik alle gevallen tot 123 overzichtelijk op een rijtje zet.
Toen ik dat deed viel me op dat er een grote regelmatigheid is in het aantal stappen dat leidt naar een getal dat lager is dan de beginwaarde. 5, 9, 13, 17, 21 enz. halen dat altijd in 3 stappen. Gaat dat tot in het oneindige door?
Ja. Ik zal uitleggen waarom.
Het begint met het getal 1. Doen we even net of dat nog niet op 1 is:
3x+1 = 3x1+1 = 4
4/2 = 2
2/2 = 1
Ik heb mij afgevraagd of ik iets bij 1 kan optellen dat die flow niet verbreekt. Als we 1 op a stellen dan kunnen we dat getal op b stellen.
x=a+b
3(a+b)+1 = 3a+1+3b
(a+b)/2 = a/2+b/2
Het getal moet dus 2x door 2 gedeeld kunnen worden, ook als ik het eerst met een ander getal vermenigvuldig. Dat getal is 2^2 = 4 en ook nog elk veelvoud van 4
vul ik dus voor x = 1+4n in, dan krijgen we:
3(1+4n)+1= 4+4n
(4+4n)/2=2+2n
(2+2n)/2=1+n
(1+n)<(1+4n). Dus voor alle getallen n ∈ (1,2,3,...,∞) geldt dat in hooguit 3 stappen een lager getal bereikt wordt.
Dat is de helft van alle oneven getallen. Dat levert dus een hoop tijdwinst op in een brute force poging.
We kunnen hetzelfde trucje met elk bekend getal doen. Helaas levert het niet altijd zoveel op. De minimum waarde van een 2-macht die we op kunnen tellen is 2^a, waarbij a het aantal keren is dat het basisgetal door 2 gedeeld moet worden om een getal te bereiken lager dan dat basisgetal. Het gaat alleen om het aantal delingen. Het aantal keren vermenigvuldigen maakt niet uit.
Het getal 3 bijvoorbeeld:
3 -> 10, 5, 16, 8, 4, 2
moet 4x door 2 gedeeld worden. We kunnen daar dus alleen veilig n(2^4) bij optellen. De sequence herhaalt zich dus alleen op 19, 35, 51, 67 enz. maar gaat net zoals de 1 serie tot in het oneindige door. Het geldt dus ook voor 15955 (=3 + 997(2^4)).
We kunnen meer gevallen elimineren met bijvoorbeeld 11 en 23 (+n(2^5)).
Er blijven problematische gaten.
27 bijvoorbeeld kan pas in een reeks passen met n(2^59) en 31 met n(2^56). 47 en 63 met n(2^54). Het lijkt erop dat de langste reeksen voorkomen vlak voor 2-machten of veelvouden daarvan.
Het getal 97 dat in de Veritasium video werd genoemd heeft wel 118 stappen nodig om 1 te bereiken maar is in mijn werkwijze niet bijzonder problematisch. Het bereikt na 3 stappen al een getal lager dan 97.
Ik weet niet of ik een spreadsheet kan bijvoegen maar ik zal het proberen.
Het is een ruwe versie voor eigen gebruik. Ik heb dus nergens commentaar gegeven. Er staan overtollige dingen in die onjuist zijn maar die ik zelf gewoon oversla. Ik zou de statements aan kunnen passen maar dat vind ik teveel werk.