På den här sidan finns en Java Applet, som demonstrerar problemen, och som
kan användas för att undersöka verkan av fast prioriteringsordning resp. den
föreslagna tilläggsregeln.
Som allmänt råd gäller att om Warnsdorffs regel implementeras med fast
prioritering, så bör också backtracking tillämpas.
Den här sidan fokuserar på de problem med Warnsdorffs regel, som dyker upp
när den skall implementeras för dator.
Arnd Roth pekar i sin
"The Problem of the Knight" på den inneboende tvetydigheten i
Warnsdorffs regel. Den resulterar ofta i val mellan två eller fler lika "goda"
rutor.
Kapil Hari Paranjape observerade in sin underhållande A Knight's Tour on OCaml (when a Python fails to digest it)
vikten av i vilken ordning möjliga "nästa-rutor" testas, och vilken betydelse
turens startruta har.
Allt detta samverkar. Datorer är inte byggda för att hantera tvetydighet, och ett vanligt sätt att möta problemet är att inte låtsas om det. Varför komplicera saker och ting - varför inte bara använda nästa värde, som min fina algoritm levererar ? (Här talar jag givetvis bara för mig själv.) Men Arnd Roth föreslog ett tillägg till Warnsdorffs regel för att lösa upp tvetydigheten. Om två eller flera "nästarutor" är lika bra, så ska man välja den som är längst bort från brädets centum. På så vis tenderar turen att gå nära brädets ytterkanter, och man motverkar den uppenbara risken att brädet blir delat i två eller flera separata otäckta områden.
Applettens hastighet däremot, kan ändras närhelst så önskas.
För bräden upp t.o.m. 15x15 rutor ges möjlighet att stega igenom
springar-turerna drag för drag. Därvid visas antalet fria "utgångar" (röda
siffror) samt prioriteringsordning för de möjliga nästa-rutorna. Klicka på
nästa-knappen för att se nästa drag.
Första gången en springartur är komplett, och första gången en sådan tvärstoppar i en ruta utan utgångar, så blir det automatiskt paus, och hastigheten skiftas till sakta. Klicka på "forts." och iaktta hur bactracking fungerar. Eller ändra hastigheten - "Fort" är tillräckligt snabbt för att hitta alla "Warndorff turer" på ett 8x8 rutors bräde inom någon minut.
Det finns två inbyggda exempel.
"ex.1" ger ett 50x50 rutors bräde och en prioritering som får
springarturen att dela brädet i två separata otäckta delar.
"ex.2" ger ett 8x8 bräde med en prioritering som innebär att en komplett tur uppnås först efter att turen
slutat i tvärstopp 35 gånger.
Övning: På ett bräde med udda antal rutor, måste man starta från en mörk ruta för att kunna uppnå en komplett springartur. Förklara varför !
| © 2005 Gunno Törnberg | Visitors:
|