14
EEN BEETJE WISKUNDE ACHTER RUBIKS KUBUS JAN DE BEULE
- J A N @ D E B E U L E . E U - V R I J E U N I V E R S I T E I T B R U S S E L , VA KG R O E P W I S K U N D E , P L E I N L A A N 2 , 1 0 5 0 B R U S S E L
Figuur 1: (Rubiks) kubussen op een rij
1. RUBIKS KUBUS Rubiks kubus, in 1974 ontworpen door de Hongaarse ingenieur-architect Ernő Rubik, is een bron van veel vermaak voor jong en oud. Velen, waaronder de auteur van dit artikel, zijn niet in staat om de puzzel zomaar op te lossen. Toch is de puzzel ook in dat geval een zeer interessant object omwille van de wiskundige achtergrond, die in dit artikel centraal staat. We vertrekken daarvoor van enkele vaak gestelde vragen. (i) Hoeveel mogelijkheden heeft deze puzzel? (ii) Kan men een oplossing 'berekenen' met een computer? zodat je steeds (iii) Wat is een oplossing kan vinden die hoogstens stappen vereist? (iv) Kan men een oplossing berekenen die het minst aantal stappen vereist?
Het antwoord op alle vragen is gekend, althans voor de 2x2x2 en 3x3x3 kubus. Dat betekent echter geenszins dat daarmee alles gezegd is. In dit artikel zullen we ingaan op de achterliggende wiskunde die het antwoord geeft op de gestelde vragen, en de computationele moeilijkheden die daarmee gepaard gaan. Anderzijds zullen we ook illustreren dat iedereen - ook wie de puzzel niet kan oplossen - mits een klein beetje programmeerwerk zelf aan de slag kan gaan en een en ander over de wiskunde achter de kubus te weten kan komen. We zullen beginnen met enkele definities en begrippen uit de groepentheorie. We zullen dan dieper ingaan op de derde en vierde vraag. Het zal blijken dat deze twee vragen in feite de gemakkelijkste zijn vanuit wiskundig standpunt, maar niet vanuit
computationeel standpunt. Hiermee bedoelen we dat we heel snel de limieten van de rekenkracht van een (en zelfs meerdere computers) kunnen bereiken. Het antwoord bepalen op de eerste twee vragen zal computationeel gemakkelijker zijn, op voorwaarde dat we wiskundig enkele zaken uitwerken. Dit is precies de rode draad in alle computationele wiskunde: hoe geavanceerder de achterliggende wiskunde, hoe efficiënter het algoritme. We illustreren dit met de kubus, en niet alleen met de 3x3x3 kubus, maar ook met de kleinere 2x2x2 variant, de zogemaande 'Pocket cube'. Naast de kleinere variant, bestaan ook de 4x4x4 en 5x5x5 Rubiks kubus, allemaal te zien op figuur 1. Ernő Rubik vroeg trouwens alleen een patent aan in
15
Hongarije en verschillende producenten brengen dergelijke kubussen en andere zogenaamde permutatiepuzzels op de markt. De meest rechtse kubus op figuur 1 is een 6x6x6 V-cube. Voor de kubussen spreken we de volgende terminologie af. Een hoekblokje is een blokje waarvan drie gekleurde vlakjes zichtbaar zijn. Een zijblokje is een blokje waarvan twee gekleurde vlakjes zichtbaar zijn. Een centraal blokje is een blokje waarvan slechts een gekleurd vlakje zichtbaar is. De 2x2x2 en 3x3x3 kubussen hebben dus beide 8 hoekblokjes. De 3x3x3 kubus heeft daarnaast ook nog 12 zijblokjes en 6 centrale blokjes. De 2x2x2 kubus heeft geen van beide. Met een hoekvlakje bedoelen we een van de gekleurde vlakjes van een hoekblokje en met een zijvlakje bedoelen we een van de gekleurde vlakjes van een zijblokje. Met centraal vlakje bedoelen we het unieke zichtbare vlakje van een centraal blokje. De 2x2x2 kubus heeft dus enkel 24 hoekvlakjes, de 3x3x3 kubus heeft 24 hoekvlakjes, 24 zijvlakjes en 6 centrale vlakjes. 2. SYMMETRIE EN GROEPENTHEORIE Een symmetrie van een object is een handeling die het object invariant laat. Denken we bijvoorbeeld aan een vierkant, dan zijn de symmetrieën de rotaties en spiegelingen die het vierkant op zichzelf afbeelden. Het uitvoeren van twee symmetrieën na elkaar is uiteraard ook een symmetrie. We kunnen het object ook gewoon met rust laten, en we kunnen het uitvoeren van een
Figuur 2: Symmetrieën van een vierkant
symmetrie ook ongedaan maken. Deze observatie geeft aanleiding tot de volgende definitie. Een groep is een niet-ledige verzameling , samen met een binaire bewerking (de samenstelling) waarvoor de volgende eigenschappen gelden: geldt (i) voor alle (de samenstelling is associatief); zodat voor (ii) er bestaat een geldt dat alle (er bestaat een neutraal element voor de samenstelling); bestaat er een (iii) voor alle zodat (voor elk element bestaat er een inverse voor de samenstelling). Men kan eenvoudig aantonen dat uniek is en dat de inverse van een element eveneens uniek is. Figuur 2 toont enkele symmetrieën van het vierkant: de vier mogelijke spiegelingen ten opzichte van een as, en , en een rotatie . De volledige groep van symmetrieën, die , is we noteren als
waarbij genoteerd werd als , als . Men kan eenen samen met voudig nagaan dat de samenstelling een groep is. Verder voortgekan men narekenen dat bracht wordt door de elementen en . Dat betekent dat alle andere elementen te schrijven zijn als een samenstelling van woorden in en hun inversen. De rotatie over 270° , de spiegeling is bijvoorbeeld . Merk op dat de samenstelling in groepen niet noodzakelijk commutatief is, er geldt . bijvoorbeeld een willekeurige Stel nu dat verzameling is. Een permutatie van is een bijectieve afbeelding van naar zichzelf. Het is duidelijk dat de verzameling van alle permutaties, samen met de samenstelling van afbeeldingen, een groep vormt. Dit noemt men de symmetrische groep op de verzameling , genoteerd als . Permutatiegroepen vormen een belangrijke klasse van groepen om allerlei redenen. Daarenboven kan men veel groepen voorstellen als permutatiegroepen. Als een eindige verzameling is, dan kunnen , we voorstellen als . Voor we verderop aan met de slag kunnen met de computer, herhalen we nog de gebruikelijke cykelnotatie voor permutaties van een eindige verzameling. Een permutatie is een -cykel als er verschillende elementen voor bestaan zodat en
16
We noteren de permutatie als . De permutatie beeldt dus 1 op 2 af, 2 op 3 en 3 op 1 en alle andere elementen op zichzelf. De identieke permutatie noteren we als (). Nummeren we de vier hoekpunten van een vierkant met , dan voor respectievelijk voorgesteld worden kan de groep als de volgende groep van permutaties
Men kan aantonen dat een willekeurige permutatie geschreven kan worden als de samenstelling van disjuncte cykels. In dit artikel gaan we permutaties ook samenstellen van links naar rechts. De samenstelling in plaats noteren we dan ook met . Dus van
Het beeld van een element onder een permutatie noteren we (zoals ook in . GAP) exponentieel, dus Nu kunnen we alle relevante informatie over de kubus opslaan in een permutatiegroep. Immers, elke mogelijke beweging veroorzaakt een permutatie van een aantal vlakjes. De identieke permutatie laat de kubus invariant. Als de kubus zich in een andere dan de opgeloste toestand bevindt, dan moeten we niets anders doen dan een aantal bewegingen, dus permutaties, uitvoeren om de kubus op te lossen. Als we die permutaties kunnen berekenen in de permutatiegroep, dan kunnen we het antwoord vinden op de gestelde vragen. Voor de 3x3x3 kubus zijn de basisbewegingen de rotaties in wijzerzin over 90 graden van elk van de zes vlakken. Deze corresponderen met zes permutaties van de verzameling (en niet want elke permutatie laat de centrale vlak-
jes invariant). Een rotatie (of beweging) in de ruimte van de kubus op zijn geheel beschouwen we niet als een verandering van de toestand van de kubus, en zullen we dus niet als een afzonderlijke toestand tellen. Het aantal mogelijke toestanden waarin de kubus zich kan bevinden, is dus de grootte van de permutatiegroep voortgebracht door de zes permutaties. Wat betreft bewegingen van de kubus in zijn geheel, kunnen we een vergelijkbare afweging maken voor de 2x2x2 kubus. Een beweging van deze kubus in zijn geheel in de ruimte kan er steeds voor zorgen dat een vast gekozen blokje zich op een vast gekozen positie bevindt. Zo kiezen we ervoor om het hoekblokje met het woord 'Rubik's' steeds links bovenaan te plaatsen. Dat betekent dat er voor de 2x2x2 kubus slechts 3 relevante rotaties zijn: die van het vlak rechts, achter en onder het vast gekozen blokje. Deze corresponderen met drie permutaties van de verzameling . Dit verklaart ook de nummering van de vlakjes van beide kubussen uit figuur 3. Nu kunnen we aan de slag met de computer om snel het aantal mogelijke toestanden van de kubus te bepalen. Daartoe gebruiken we het computerprogramma GAP (dat staat voor Groups, Algorithms and Programming), een pakket dat speciek bedoeld is voor groepentheorie, dat gratis beschikbaar is en dat gebruikt kan worden op alle mogelijke platformen (Unix/linux, MacOS en ook Windows), zie http://www.gap-system.org.
Figuur 3: Nummering vlakjes
17
Figuur 4
Figuur 4 toont het resultaat en de werkwijze. Eerst worden de respectieen velijke permutaties die corresponderen met een rotatie van het vlak rechts, achter en onder het vast gekozen blokje gedefinieerd. Dan definiĂŤren we de groep cube2x2x2 als de groep voortgebracht door en . Het commando Order(cube2x2x2) berekent het aantal elementen in deze groep. De 2x2x2 kubus kan dus in 3674160 toestanden verkeren. Nu doen we exact hetzelfde voor de 3x3x3 kubus. Elke permutatie geven we de naam van de kleur van het vlak dat gedraaid wordt (figuur 5).
Figuur 6: Cayleygraaf van de groep D8
3. GRAFEN De overgang tussen twee toestanden geschiedt door het uitvoeren van een rotatie. Dit is dus niets anders dan
Figuur 5
De 3x3x3 kubus kan dus in niet minder dan 43252003274489856000 toestanden verkeren!
de samenstelling van de permutatie die correspondeert met de eerste toestand met de permutatie die de rotatie voorstelt. We gaan dit nu
vertalen in termen van grafen. Een bestaat (gerichte) graaf uit een verzameling met toppen en van (geordende) een verzameling paren van toppen, een dergelijk paar wordt een boog genoemd. Als de ordening van de bogen geen rol speelt, noemen we de graaf ook wel een ongerichte graaf. een groep is, voortgeStel nu dat van bracht door de verzameling generatoren. Dan is de Cayleygraaf de gerichte van ten opzichte van , met de verzagraaf meling van alle elementen van , en als en de gerichte boog . We beschouwen slechts als als toppen, dus alle elementen van en als we door samenstelling met het van top naar element kunnen gaan, dan is een boog van . Figuur 6 toont de Cayleygraaf ten opzichte van de van generatoren ). De bogen die (genoteerd ô€€€ zijn in corresponderen met het zwart getekend, de rode corres. De toppen ponderen met zijn genummerd van 1 tot en met 8, respectievelijk volgens de volgorde van de elementen van de groep zoals in (1). Een pad in een graaf is een rij bogen die een aantal verschillende toppen verbindt. De lengte van een pad is het aantal bogen waaruit het pad bestaat. De afstand tussen twee toppen is de lengte van een kortste pad dat de twee bogen verbindt. De diameter van een graaf ten slotte is het maximum van de afstanden tussen elk paar toppen. Uit figuur 6 kan men snel afleiden dat de diamegelijk is aan 3. ter van
18
Als we dus de oplossing voor een kubus willen berekenen, dan is dit equivalent met het bepalen van een pad in de Cayleygraaf van de waarin de kubus zich toestand bevindt, naar de opgeloste toestand, i.e. de toestand die correspondeert met de identieke permutatie. De diameter van de Cayleygraaf is precies het antwoord op de derde vraag. Willen we een antwoord op de vierde vraag, dan moeten we dus het kortste pad tussen twee toppen kunnen bepalen in de Cayleygraaf. Voor we de computer aan het werk zetten, gaan we dieper in op een manier om de diameter te bepalen. We kiezen een willekeurige top . Als we de afstand van tot kunnen elke andere top bepalen, dan is het maximum van al die afstanden een ondergrens voor de diameter van de graaf. Omdat elke top in de Cayleygraaf van een groep dezelfde rol speelt (hetgeen men gemakkelijk kan aantonen uit de elementaire eigenschappen van een groep), volstaat het om deze procedure voor een top uit te voeren. Alle afstanden ten opzichte van een gekozen top kunnen we vinden te door de verzameling partitioneren in layers: elke layer bevat precies alle toppen op een vaste afstand van . Het nummer van de laatste layer is precies de diameter van het graaf. Een standaardalgoritme om alle layers te bepalen, is een zogenaamd breadth first search algoritme. We vertrekken van de top ,
1
en kijken naar alle toppen op afstand 1. Dit is eenvoudig door gewoon te kijken naar alle bogen die vertrekken uit of toekomen in . Alle toppen op afstand 1 bepalen de eerste . Als er in nog layer toppen overblijven, dan herhalen we deze procedure voor elk van de toppen in . Dit blijven we doen totdat de verzameling gepartitioneerd is in verschillende layers. De diameter is precies het aantal layers dat zo ontstaat. De layers ten opzichte van top 1 zijn van en . Maar er is meer! Deze techniek is ook bruikbaar om voor een gegeven top , het kortste pad van naar te bepalen. Dit doen we door een lijst bij te houden waarin voor elke top verwezen wordt naar een top uit een vorige layer via dewelke we top bereikt hebben. Op deze wijze bekomen we zonder extra operaties een zogenaamde shortest path spanning tree, d.i. een verzameling bogen die voor elke top naar precies het kortste pad van bevat. Gegeven een top , dan kijken we recursief naar de top voorafgaand aan , tot we in de begintop uitkomen. Aldus vinden we een pad van minimale lengte van naar . Voeren we dit nu uit in de Cayleygraaf van de groep van de kubus, dan berekenen we dus een lijst van minimale lengte van rotaties die we moeten uitvoeren om de kubus op te lossen. Hoewel de complexiteit van bovenstaand algoritme in feite slechts kwa-
Alle berekeningen werden uitgevoerd op een Intel Core i7 aan 2 GHz onder MacOS.
dratisch is in het aantal toppen van de graaf, blijkt dat de permutatiegroep van de 3x3x3 kubus reeds te groot is om de Cayleygraaf te bepalen (althans in GAP), en het algoritme uit te voeren. Zonder programmeerwerk kunnen we het berekenen van de diameter van de Cayleygraaf van de groep van de 2x2x2 kubus illustreren in GAP. Daarvoor gebruiken we het GAP pakket digraph. De Cayleygraaf kan dan met een commando geconstrueerd worden. Zoals in het vorige voorbeeld noteren we de generatoren en . We definiĂŤren dan met de groep cube2x2x2, en de lijst gens die de generatoren en hun inverses bevat. Aldus zal het commando om de Cayleygraaf te construeren de bogen in beide richtingen kunnen gebruiken voor verdere berekeningen met de graaf. Na de constructie van de graaf, die ongeveer anderhalve minuut rekentijd1 in beslag neemt (het commando time; geeft de rekentijd weer van het vorige commando in milliseconden), berekenen we de diameter van de Cayleygraaf (figuur 7).
19
De berekening van de diameter duurt iets minder dan vier minuten. Hiermee kunnen we besluiten dat er voor elke toestand van de kubus een lijst van hoogstens 14 bewegingen bestaat om de kubus op te lossen. Het bepalen van een kortste oplossing is theoretisch gezien niet moeilijker dan het bepalen van de diameter. Een klein beetje programmeerwerk volstaat om dit in GAP te doen.
Figuur 7
De eerste functie SPSTree vertrekt van een graaf en een begintop van die graaf, en bepaalt de afstand van elke top verschillend van naar en tegelijk een shortest path spanning tree. De toppen van de graaf zijn genummerd van 1 tot . De functie bouwt de layers op van de graaf ten opzichte van . Voor elke top die bereikt wordt, volstaat het dat we bijhouden welke top de top voorafgaat. Een lijst van lengte , waarbij op elke positie dus verwezen wordt naar als en slechts als de top de top voorafgaat, bepaalt een shortest path spanning tree dus volledig. Op de positie van de begintop komt in de (figuur 8). lijst het getal Gegeven een shortest path spanning tree, en een top , dan kunnen we nu heel snel het kortste path van de oorsprong van de spanning tree naar bepalen. Dit gebeurt met behulp van de functie TraceTree. Het argument tree is de lijst die de spanning tree bepaalt. We kijken naar het getal op positie , dit is de top die aan voorafgaat. Als de begintop is, dan zal op positie van de lijst staan, en mogen we stoppen. Staat er een ander getal, dan gaan we nu recursief verder vanaf (figuur 9).
Figuur 8
20
correspondeert. Figuur 10 toont een voorbeeld en aan de hand van de nummering van de vlakjes uit figuur 3 kunnen we de permutatie eenvoudig bepalen. Deze is Figuur 9
Het volstaat om te bepalen met welke top van de Cayleygraaf deze permutatie correspondeert, het kortste pad naar deze top te bepalen, en daaruit de lijst met stappen te bepalen. Zoals vermeld moet eerst (en eenmaal) een shortest path spanning tree bepaald worden, hetgeen ongeveer drie minuten rekentijd in beslag neemt (figuur 12).
Figuur 10: De 2x2x2 kubus in een niet-opgeloste toestand
Figuur 11
De laatste twee functies zetten een lijst van bogen uit de graaf om in een lijst van rotaties die uitgevoerd moeten worden om de puzzel op te lossen (figuur 11).
Nu gaan we bovenstaande functies in een voorbeeld gebruiken. Gegeven de kubus in een niet-opgeloste toestand, dan moeten we eerst de permutatie opschrijven die daarmee
Nog één detail verdient extra uitleg. We definieerden in bovenstaand voorbeeld een homomorfisme tussen de groep van de kubus en de zogenaamde vrije groep op 3 geneen . Een vrije groep ratoren is wiskundig gezien een groep die voortgebracht wordt door generatoren, en deze zijn nu gewoon abstracte objecten (vandaar genoteerd als en ). Elk element uit deze groep is een woord in de generatoren en hun inverses. De samenstelling van twee elementen is de concatenatie van de twee woorden, waarbij een generator gevolgd door zijn inverse dan weggelaten wordt. Aldus ontstaat een oneindige groep. Door in GAP het homomorfisme te definiëren tussen de groep van de kubus (die ook door drie generatoren voortgebracht wordt) en de vrije groep, kunnen we de in GAP ingebouwde algoritmen gebruiken om het zogenaamde word problem op te lossen. Gegeven een
21
Figuur 13
Figuur 14 Figuur 12
element in de groep van de kubus, dan kan GAP (in principe) een woord bepalen in de generatoren van die groep waarvan de samenstelling precies het element is. Het word problem is een van de klassieke en moeilijke problemen uit de computationele groepentheorie, maar enkele algoritmen zijn wel ontwikkeld, en zijn efficiĂŤnt genoeg voor de groep van de kubus. In bovenstaand voorbeeld gebruiken we deze mogelijkheid van GAP in feite alleen om de gevonden permutaties voor de gebruiker te herkennen. Immers, de oplossing is een lijst van permutaties, die alle generatoren zijn van de groep van de kubus, en het homomorfisme herkent deze permutaties en schrijft ze "leesbaar" uit voor de gebruiker. In het voorbeeld (figuur 13) gaan we het algoritme gebruiken om rechtstreeks een lijst van rotaties te bepalen die we moeten uitvoeren om de kubus op te lossen. We gebruiken dezelfde permutatie als daarnet, en zullen zien dat de lijst van rotaties (veel) langer is (namelijk 11 in plaats van 5). De rekentijd is dus verwaarloosbaar ten opzichte van de rekentijd om de kortste oplossing te bepalen.
Daarenboven is deze werkwijze ook toepasbaar op de groep van de 3x3x3 kubus. We illustreren met een willekeurige permutatie uit die groep (commando Random) (figuur 14). Dit levert een (vrij lange) lijst van rotaties die uitgevoerd moeten worden, terwijl men ondertussen weet dat de diameter van de Cayleygraaf van de 3x3x3 kubus 26 is.
4. EPILOOG Het getal dat het antwoord is op vraag (iii) wordt ook wel God's number genoemd. We hebben dit dus berekend voor de 2x2x2 kubus. Voor de
3x3x3 kubus en zijn grotere varianten kan men dezelfde werkwijze niet gebruiken. Toch is God's number voor de 3x3x3 kubus ondertussen bepaald. De gebruikte technieken zijn van heel andere aard dan de hier beschreven werkwijze, en zijn gedeeltelijk exhaustief. Door de structuur van de groep te gebruiken, kan men de bepaling van de diameter herleiden tot het bepalen van de kortste oplossing voor een relatief beperkt aantal toestanden. Elk van deze gevallen wordt dan opgelost door eenvoudig alle mogelijkheden af te gaan. Alleen de massale beschikbaarheid van rekenkracht maakt deze werkwijze mogelijk, en is niet bruikbaar om
22
God's number te bepalen voor de grotere kubussen. Een zeer informatieve website met veel informatie over God's number is http://www.cube20.org. Deze website maakt ook twee verschillende benaderingen duidelijk. In dit artikel werd met 1 beweging steeds een rotatie over 90 graden van een vlak van de kubus bedoeld. Een rotatie over 180 graden wordt dus als 2 bewegingen geteld. Men spreekt in dit geval ook over de quarter turn metric (QTM). Men kan echter ook een rotatie over 180 graden als slechts 1 beweging beschouwen, dan spreekt men over de half turn metric (HTM). In HTM is God's number van de 2x2x2 kubus 11. God's number voor de 3x3x3 kubus is 26 in QTM en 20 in HTM. Voegt men aan de lijst van generatoren van de groep de kwadraten ervan toe, dan is de diameter van de Cayleygraaf pre-
de groepen cube2x2x2 en cube3x3x3 kan heel snel berekend worden, uiteraard zonder alle elementen in die groep te bepalen en op te lijsten. Daarvoor zijn echter geavanceerde algoritmen nodig voor permutatiegroepen, en deze zijn van fundamenteel belang in de computationele groepentheorie. Deze algoritmen maken het ook mogelijk om bijvoorbeeld efficiënt te controleren of een gegeven permutatie behoort tot een gegeven permutatiegroep. Voor de kubus is deze vraag equivalent met de vraag of het bijvoorbeeld mogelijk is de kubus om te zetten in een bepaalde toestand of niet. Ten slotte vermelden we nog de website http://ruwix.com, waar de hopeloze puzzelfan onder andere een online applicatie vindt om de 2x2x2 en 3x3x3 kubus op te lossen. Alle gebruikte GAP-code uit dit artikel
Het antwoord op vraag (i) lijkt eenvoudig te bepalen. Niets is echter minder waar. Het aantal permutaties in
The GAP Group. GAP { Groups, Algorithms and Programming, Version 4.9.2, 2018. 2 Dieter Jungnickel. Graphs, networks and algorithms, volume 5 of Algorithms and Computation in Mathematics. Springer, Heidelberg, fourth edition, 2013. 3 Tomas Rokicki, Herbert Kociemba, Morley Davidson, and John Dethridge. The diameter of the Rubik's cube group is twenty. SIAM J. Discrete Math., 27(2):1082{1105, 2013. 1
OEFENING VLAAMSE WISKUNDE OLYMPIADE, TWEEDE RONDE VWO 2018, VRAAG 12 In het dorp Zonnehoek zijn alle straten volgebouwd. In elke straat worden alle huisnummers van één tot en met het hoogste huisnummer gebruikt. Toevallig zijn er in Zonnehoek evenveel straten waarvan het hoogste huisnummer even is als straten waarvan het hoogste huisnummer oneven is. Welke huisnummers zijn in de meerderheid? A
De even huisnummers.
B
De oneven huisnummers.
C
Er zijn evenveel even als oneven huisnummers.
D
Dat weet je pas als je weet hoeveel straten er zijn.
E
Dat weet je pas als je weet hoeveel huizen er in elke straat staan.
Figuur 15
cies God's number in de HTM. Voor de 2x2x2 kubus kan men dit eenvoudig narekenen in GAP (figuur 15).
REFERENTIES
is beschikbaar online op http://homepages.vub. ac.be/~jdbeule/vector/rubik.
© Vlaamse Wiskunde Olympiade vzw