Topswops

Uit testwiki
Naar navigatie springen Naar zoeken springen

Topswops (en de varianten Topdrops, Bottomswops en Bottomdrops) zijn wiskundige problemen die zijn bedacht door de Britse wiskundige John Conway in 1973. In tegenstelling tot veel andere werken van Conway zijn deze problemen nog niet grondig geanalyseerd door de wetenschappelijke gemeenschap. Enkele bekende wiskundigen die een bijdrage hebben geleverd zijn Martin Gardner en Donald Knuth.

Een voorbeeld van Topswops met N=5 getallen. Na 7 iteraties eindigt het algoritme.

Formulering

In alle vier varianten gaat Conway uit van een pak speelkaarten. Omdat slechts de getalwaarden relevant zijn, wordt vaak een van de kleuren van een kaartspel gebruikt. Wiskundig gezien is dit equivalent met een rij gehele getallen van 1 t/m N. De gepermuteerde rij wordt genoteerd als A[1],...,A[N].

Topswops

Voor het topswops probleem wordt het volgende algoritme toegepast:

  1. Bekijk het eerste getal in de rij (dit is A[1]).
  2. Pak de eerste A[1] kaarten van de stapel.
  3. Verwissel deze kaarten van volgorde en plaats ze boven op de stapel terug.
  4. Herhaal stap 1, 2 en 3 totdat het eerste getal een 1 is.

De uiteindelijke configuratie van de rij getallen begint altijd met een 1. Andere namen voor dit probleem zijn het deterministic pancake problem, topswops, topswaps, reverse card shuffle en fannkuch.[1][2][3]

De probleemformulering van Conway is nu als volgt:

Welke initiële configuratie leidt tot het maximale aantal 'swaps' voordat het algoritme termineert?

In de literatuur zijn verscheidene pogingen gedaan om een bovengrens te vinden voor het aantal iteraties f(N).

Stelling: f(N) is begrensd door 2N1.

Bewijs (Herbert S. Wilf[2]): Gegeven een rij getallen 1 t/m N in een gegeven volgorde. Als voorbeeld beschouwen we 7,2,11,8,5,13,6,1,9,10,3,12,4. We zijn met name geïnteresseerd in getallen die 'op de juiste plaats in de rij staan', dat zijn hier: 2,5,9,10,12. We definiëren het Wilf-getal dan als 2(21)+2(51)+2(91)+2(101)+2(121)=2833.

Claim: na iedere iteratie van het algoritme stijgt het Wilf-getal.

Bewijs: Voor ieder getal dat op de juiste plaats stond, en groter was dan het getal A[1], blijft de invloed op het Wilf-getal onveranderd. De overige getallen die wel op de juiste plaats stonden, zullen in het algemeen niet meer op de juiste plaats staan. Echter, het getal A[1] zal altijd op de juiste plaats staan. En omdat de som van de Wilf-getallen van de eerste A[1]1 getallen altijd strikt kleiner is dan die van A[1] zal het Wilf-getal altijd stijgen (met ten minste 1 per iteratiestap).

Het maximale Wilf-getal is ook eenvoudig te krijgen, en dat is 2N+11. Door het bovenstaande bewijs iets te verfijnen kan worden aangetoond dat de genoemde bovengrens ook echt een bovengrens is voor het aantal iteraties.

Topswops: de relatie tussen N en f(N) op logaritmisch papier. De bovengrens is erg ruim, terwijl de ondergrens vrij strak is.
Topswops: dubbellogaritmische weergave van de verwachte relatie tussen N en f(N). De datapunten zijn slechts gevonden oplossingen, en zijn dus eigenlijk ondergrenzen van de echte waarde. De bovengrens is wederom erg ruim, terwijl de ondergrens vrij strak is.

Stelling: f(N) is begrensd door het N+1e Fibonaccigetal.

Bewijs (Murray S. Klamkin[4]): Stel dat gedurende het algoritme het eerste getal A[1] in het algoritme in totaal k verschillende waarden aanneemt.

Claim: f(N)Fk+1.

Bewijs: Dit wordt bewezen via wiskundige inductie. Stel k=1, dit betekent dat het algoritme direct stopt (dus f(N)=0). Zodoende geldt A[1]=1 en aangezien F2=1 is de claim bewezen.

Stel nu dat k2. De k verschillende getallen die A[1] aanneemt, worden als volgt geordend: d1<...<dk. We zeggen dat het grootste getal dk voor het eerst vooraan staat in de rij in iteratie r van het algoritme. Noem t=A[dk]. Dan geldt er in de (r+1)e iteratie dat A[1]=t en tevens dat A[dk]=dk. De resterende iteraties van het algoritme zullen altijd A[dk]=dk behouden. Dus A[1] kan nu ten hoogste k1 waarden aannemen. Uit inductie volgt nu dat f(N)rFk en dat d1=1.

Stel nu dat we de getallen d1=1 en dk zouden verwisselen in iteratie r. Dan A[1]=1 en is het algoritme afgelopen; f(N)=r. Tevens hebben zowel dk als t nooit op positie A[1] gestaan tenzij t=1.

Stel t=1. Dan geldt er dan rFk omdat A[1] ten hoogste k1 verschillende waarden aanneemt. Dus volgt dat f(N)r+1Fk+1.

Stel t>1. Dan geldt er dan rFk1 omdat A[1] ten hoogste k2 verschillende waarden aanneemt. Zodoende volgt uit de claim dat f(N)Fk+rFk+1. Dit bewijst de stelling.

Daarnaast is recentelijk bewezen door Morales en Sudborough dat de ondergrens voor f(N) een kwadratische functie in N is.[1] Zodoende zijn de echte waarden van f(N) tot op heden onbekend. Wel zijn er verscheidene pogingen gedaan om ondergrenzen te vinden, zoals door A. Pepperdine.[5] Voor rijtjes met 17 of minder getallen is de exacte oplossing bekend. Grotere getallen hebben slechts ondergrenzen, zoals weergegeven in de figuren aan de rechterkant.

aantal getallen 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
maximale aantal iteraties 0 1 2 4 7 10 16 22 30 38 51 65 80 101 113 139 159

Het is nog steeds een open vraagstuk of dit probleem NP-moeilijk is.

Topdrops

Een vergelijkbaar probleem is topdrops, waarin dezelfde speelkaarten worden gebruikt. Ook in dit probleem wordt de eerste kaart bekeken (noem deze A[1]). Pak vervolgens de eerste A[1] kaarten van de stapel, wissel deze van volgorde en plaats ze vervolgens onder op de stapel (in plaats van bovenop bij topswops). In dit probleem is het mogelijk om in een oneindige lus terecht te komen. Als voorbeeld nemen we 2,1,3,4. Dan gebeurt er het volgende:

  • 2 1 3 4
  • 3 4 1 2
  • 2 1 4 3
  • 4 3 1 2
  • 2 1 3 4

waarna het algoritme terug is bij de eerste stap.

Botswops

In deze variant wordt de onderste kaart van de stapel bekeken (wederom A[1]). Vervolgens worden de eerste A[1] kaarten van de stapel gewisseld. Zodoende gebeurt er vrijwel nooit iets, tenzij de laatste kaart van de rij het hoogste getal is. Deze variant van het probleem is oninteressant omdat de dynamica zo gelimiteerd is.[2]

Botdrops

De laatste variant is botdrops waarin de onderste kaart van de stapel wordt bekeken (weer A[1]). Nu worden de onderste A[1] kaarten van de stapel omgewisseld.

Referenties

Sjabloon:References