Entwicklung einer Methode zum Lösen und Bewerten von Sudoku-Rätseln und Implementation derselben als Java-Applet Diplomarbeit
←
→
Transkription von Seiteninhalten
Wenn Ihr Browser die Seite nicht korrekt rendert, bitte, lesen Sie den Inhalt der Seite unten
Entwicklung einer Methode zum Lösen und Bewerten von Sudoku-Rätseln und Implementation derselben als Java-Applet Diplomarbeit Fachhochschule Merseburg Fachbereich Informatik und Angewandte Naturwissenschaften Studiengang: Informatik eingereicht von Henrik Schleider Erstprüfer: Prof. Dr. rer. nat. Axel Kilian Zweitprüfer: Prof. Dr. habil. Michael Schenke Merseburg, den 31. 3. 2006
Abstract Sudoku – das beliebte Zahlenrätsel – fasziniert immer mehr Menschen. Es eignet sich aufgrund seines strukturierten Aufbaus und seiner logischen Lösungsmethoden hervorragend für Untersuchung mittels Computer. In der vorliegenden Arbeit wurden verschiedene von Menschen verwendete Techniken zum Lösen von Sudokus analysiert und verglichen. Diese Techniken sind in Gruppen zusammengefasst und verallgemeinert worden um Lösungsalgorithmen für Computer daraus zu erstellen. Mit Hilfe dieser Algorithmen und einem zusätzlich entwickelten Backtracking-Verfahren ist die (rechnergestützte) Auffindung sämtlicher Lösungen eines jeden Sudokus möglich. Ein weiterer Schwerpunkt der Arbeit ist die Bewertung des Schwierigkeitsgrades eines Sudokus. Hierzu wird eine Bewertungsfunktion vorgestellt, die Sudokus in mehr als die sonst üblichen drei bis vier Schwierigkeitsstufen einteilt. Die Funktion klassifiziert die Rätsel anhand von Ergebnissen, die aus einer Umfrage gewonnen wurden und orientiert sich somit an menschlichen Sudoku-Spielern.
Inhaltsverzeichnis Inhaltsverzeichnis 1 Einleitung.................................................................................. 1 2 Einführung in Sudoku.............................................................. 4 2.1 Die Geschichte........................................................................... 4 2.2 Das Spiel.................................................................................... 5 2.3 Die Begriffe................................................................................ 6 3 Strategien.................................................................................. 8 3.1 Lösungstechniken für Sudoku-Spieler....................................... 9 3.2 Umsetzung der Lösungstechniken für Computer..................... 20 3.3 Der Schwierigkeitsgrad............................................................ 34 3.4 Mehrfachlösungen.................................................................... 35 4 Das Programm........................................................................ 38 4.1 Die Hauptklasssen................................................................... 38 4.1.1 Die Appletklasse...................................................................... 38 4.1.2 Die Sudokuklasse.................................................................... 40 4.1.3 Die Lösungsklasse................................................................... 40 4.2 Spezielle Klassen..................................................................... 42 4.2.1 Die Algorithmusklassen............................................................ 42 4.2.2 Das Backtracking..................................................................... 45 4.2.3 Die Spielfeldklassen................................................................. 49 4.2.4 Die Logklasse........................................................................... 49 4.2.5 Hilfsklassen.............................................................................. 50 5 Die Benutzeroberfläche......................................................... 52 5.1 Der Aufbau............................................................................... 52 5.2 Das Spielfeld............................................................................ 55
Inhaltsverzeichnis 5.3 Die Schaltflächen..................................................................... 56 5.4 Der Standardablauf.................................................................. 57 6 Bestimmung des Schwierigkeitsgrades.............................. 59 6.1 Die Umfrage............................................................................. 61 6.1.1 Die Erstellung........................................................................... 62 6.1.2 Das Ergebnis............................................................................ 66 6.1.3 Die Auswertung........................................................................ 69 6.2 Die Bewertungsfunktion........................................................... 72 7 Zusammenfassung................................................................ 75 Quellenverzeichnis ....................................................................................... 78 Anhang A: Kurzanleitung des Sudoku-Applets Anhang B: Umfrage
Einleitung 1 Einleitung Sudoku – ein aktuelles Zahlenrätsel – hat inzwischen viele Menschen auf der ganzen Welt in seinen Bann gezogen. Die Popularität dieses Rätsels steigt von Tag zu Tag. In fast jeder Zeitung findet man dieses Zahlenrätsel, im Internet gibt es unzählige Seiten, auf denen Sudokus zum Ausdrucken oder online Spielen angeboten werden, und es ist natürlich als Handyspiel erschienen. Vielleicht ist das schlichte Spielprinzip der Grund für die hohe Beliebtheit: es gibt nur eine Vorschrift und obwohl Zahlen eingetragen werden müssen, sind keine Rechnungen vonnöten. Durch reines logisches Überlegen ist ein Sudoku zu lösen. Auf Grund der trivialen Möglichkeit zur Abstraktion und der einfachen bis hin zu komplexen logischen Lösungstechniken bietet sich Sudoku geradezu für eine programmtechnische Untersuchung und Umsetzung an. Ein Schwerpunkt wurde dabei in der vorliegenden Diplomarbeit auf den Vergleich der Lösungsstrategien von Mensch und Maschine gelegt. Des weiteren wurde das Problem der Bewertung des Schwierigkeitsgrades von Sudokus untersucht. Das im Rahmen dieser Diplomarbeit entstandene Programm bietet neben der Lösung von Sudokus die Möglichkeit, dass ein Anwender selbst Rätsel lösen kann. Dabei wurde Wert auf Benutzerfreundlichkeit und Unterstützung des Spielers gelegt. In Kapitel 2 wird eine kurze Einführung in die Geschichte und den prinzipiellen Aufbau eines Sudoku-Zahlenrätsels gegeben. Außerdem werden hier die Begriffe eingeführt und erläutert, die im weiteren Verlauf der Arbeit verwendet werden. -1-
Einleitung Versierte Spieler verwenden unterschiedliche Techniken um ein Sudoku zu lösen. Die wichtigsten davon werden in Kapitel 3 vorgestellt. Zu Beginn wird ein Überblick über mögliche Lösungsansätze für Sudoku-Spieler gegeben. Danach werden diese Ansätze zusammengefasst und für den Einsatz auf Computern optimiert. Für Sudoku Zahlenrätsel wird üblicherweise ein Schwierigkeitsgrad angegeben, der dem Spieler bei der Einschätzung eines ungelösten Rätsels helfen soll. Das Problem der Bewertung der Schwierigkeit von Sudoku- Rätseln wird in Kapitel 3 ebenfalls erörtert. Im letzten Teil wird auf die Anzahl der möglichen Lösungen eines Sudokus eingegangen. Für die Lösung und Bewertung von Sudokus wurde ein Programm in Form eines Java-Applets erstellt. Auf Grund der Objektorientierung ist die Programmiersprache Java als Basis für die Erstellung der Anwendung sehr geeignet. In Kapitel 4 wird näher auf die Implementierung des Programms sowie die verwendeten Klassen eingegangen. Weiterhin wird ein Backtracking-Algorithmus vorgestellt. Letzterer wird für die Lösung benutzt, wenn keine andere Regel mehr anwendbar ist. Für die Interaktion zwischen Spieler und Programm wurde eine grafische Oberfläche entwickelt, welche die Hauptfunktionen des Programms verfügbar macht. Die für die Umsetzung gewählte Programmiersprache Java ist plattformunabhängig. Diese Wahl wurde getroffen, um einen möglichst großen Nutzerkreis zu erreichen. Kapitel 5 erläutert die grafische Oberfläche des Programms und gibt Hinweise zur Bedienung. Die Bewertung der Schwierigkeit eines Sudokus hängt sehr stark von der subjektiven Empfindung und der Erfahrung des Spielers ab. Um die vorgestellten und im Programm verwendeten Lösungsstrategien bewerten zu -2-
Einleitung können, wurde eine Umfrage unter Nutzern von Sudokus im Internet durchgeführt. Anhand der Ergebnisse konnte eine Bewertung der verwendeten Lösungsalgorithmen in Bezug auf Schwierigkeit und Priorität erstellt werden. Die Einschätzung des Schwierigkeitsgrades eines Sudokus erfolgte nun anhand der für die Lösung verwendeten Strategien. Die erzielten Ergebnisse werden in Kapitel 7 abschließend zusammengefasst und bewertet. Darüber hinaus wird ein Ausblick auf mögliche Erweiterungen gegeben. -3-
Einführung in Sudoku 2 Einführung in Sudoku 2.1 Die Geschichte Sudoku hat als Grundlage vermutlich das carré latin (Lateinisches Quadrat). Dies ist a b c d durch den Schweizer Mathematiker Leonhard Euler (1707-1783) bekannt b d a c geworden. Das Lateinische Quadrat ist ein nxn Feld, in dem n verschiedene d c b a Symbole so eingetragen werden, dass in c a d b jeder Spalte und jeder Zeile jedes Symbol nur einmal vorkommt. Abbildung 1: Lateinisches Quadrat „Das heutige Sudoku in Blockform wurde 1979 in der Zeitschrift Math Puzzels & Logic Problems in den USA erstmals publiziert. Seinen Durchbruch erlangte das Sudoku jedoch erst um etwa 1984, als die japanische Zeitschrift Nikoli diese zunächst unter dem Namen Sūji wa dokushin ni kagiru regelmäßig abdruckte. Hieraus entwickelte sich schließlich der Begriff Sudoku. Der Neuseeländer Wayne Gould hat Sudoku auf einer Japanreise kennen gelernt. Sechs Jahre brauchte er, um eine Software zu entwickeln, die neue Sudokus per Knopfdruck entwickeln kann. Anschließend bot er seine Rätsel der Times in London an. Die Tageszeitung druckte die ersten Sudoku-Rätsel und trat auf diese Weise eine Sudoku-Lawine in der westlichen Welt los.“ [WI05] Auch in Deutschland ist seit Ende des Jahres 2005 kaum eine Rätsel- oder Tageszeitung mehr ohne mindestens ein Sudoku zu finden. Es wurden -4-
Einführung in Sudoku inzwischen ganze Bücher veröffentlicht, die nur diese Zahlenrätsel enthalten. Selbst als Brettspiel kann man es mittlerweile kaufen. Ein Paradies für Sudoku-Spieler ist auch das Internet. Dort kann man Unmengen von diesen Rätsel finden, zum online Spielen (siehe [SS06], [WS06]) oder Ausdrucken (siehe [SA06], [DS06]). Es existieren viele Internetseiten, die sich nur mit dem Thema Sudoku beschäftigen . Auf diesen Seiten werden Regeln zum Lösen erklärt und diskutiert (siehe [PS06], [SF06]). Weiterhin werden auch eine Vielzahl von Programmen angeboten (siehe [JO05], [SM06]). Diese Programme sollen Sudokus erstellen oder lösen können, manche helfen auch nur beim Lösen. 2.2 Das Spiel Das Spielfeld eines Sudokus ist ein Quadrat mit 9 × 9 Feldern. Es wird 1 7 zusätzlich noch in neun 3 × 3 8 7 6 Unterquadrate eingeteilt, deren 7 4 2 9 8 Ränder für eine bessere Übersicht 2 4 9 5 hervorgehoben sind. In das 5 8 Spielfeld sind bereits mehrere 8 1 4 2 Zahlen eingetragen. Diese werden 2 5 7 4 9 Vorgaben genannt und haben 6 7 5 2 1 jeweils einen Wert zwischen 1 und 9. Die Anzahl der Vorgaben liegt üblicherweise zwischen 22 und 36. Abbildung 2: ein ungelöstes Sudoku -5-
Einführung in Sudoku Es kann auch mehr oder weniger Vorgaben geben, allerdings wird dadurch das Spiel sehr vereinfacht oder erschwert. Die Aufgabe des Spielers besteht nun darin, alle leeren Felder mit Zahlen von 1 bis 9 aufzufüllen, so dass in jeder Zeile, Spalte und jedem Unterquadrat jede Zahl genau einmal vorkommt. Ein gültiges Sudoku hat nur eine eindeutige Lösung. Es gibt inzwischen auch viele Sonderformen des Spiels (siehe 9 3 1 7 8 6 5 2 4 [SD06]). Eine einfachere 8 4 2 3 5 1 9 7 6 Version für Kinder besteht aus 7 6 5 4 2 9 3 8 1 einem 4×4 Quadrat und 2 1 4 8 9 7 6 5 3 anstelle der Zahlen werden 5 9 6 2 4 3 7 1 8 Bilder verwendet. Weitaus 3 8 7 6 1 5 4 9 2 komplexer sind Spielfelder mit 1 2 3 5 7 4 8 6 9 einer Kantenlänge von 16 oder 6 7 9 1 3 8 2 4 5 gar 25, bei denen dann die 4 5 8 9 6 2 1 3 7 Zahlen 1 bis 16 oder 1 bis 25 eingetragen werden müssen. Abbildung 3: ein gelöstes Sudoku Weiterhin gibt es auch Sudokus, bei denen nicht mehr das Quadrat die Grundform bildet. Der Menge der Variationen sind so gut wie keine Grenzen gesetzt – es werden täglich mehr. -6-
Einführung in Sudoku 2.3 Die Begriffe Das Rätsel Sudoku ist international sehr beliebt und es haben sich einige spezielle Begriffe herausgebildet, die häufig in englischer Sprache sind – meist weil es keine adäquate Übersetzung ins Deutsche gibt. Hier werden nun einige Grundbegriffe eingeführt, die in den folgenden Kapitel häufig benutzt werden. Das komplette Sudoku-Quadrat wird Gitter (grid) oder Spielfeld genannt, es besteht aus 9 Zeilen (rows), 9 Spalten (columns), 9 Blöcken (blocks) beziehungsweise 81 Feldern (cells). Ein Block ist eines der 9 Unterquadrate mit der Größe 3 × 3. Eine Zeile, eine Spalte oder ein Block wird als Einheit (unit) bezeichnet, ein Sudoku-Gitter besteht also aus 27 Einheiten. Ein Kandidat ist in eine in einem Feld noch mögliche Zahl, alle möglichen Kandidaten in einem Feld werden in einer Kandidatenliste zusammengefasst. Die One-Rule ist die Hauptregel von Sudoku. Sie besagt, dass in jeder Einheit, also in jeder Zeile, in jeder Spalte und in jedem Block die Zahlen von 1 bis 9 nur genau einmal vorkommen dürfen und müssen. Vorgaben sind die zu Beginn in das Sudoku schon eingetragenen Zahlen. Ein Kandidat heißt naked single, wenn nur er in einem Feld noch möglich ist. Naked könnte man in diesem Fall am besten mit blank oder sichtbar übersetzen. Der Kandidat heißt hidden single, wenn er in der Einheit nur an einer Stelle vorkommen kann. Hier passt die Übersetzung versteckt, da in dem Feld, wo dieser Kandidat vorkommt, noch andere Kandidaten stehen können. Weitere Beschreibungen dazu folgen im nächsten Kapitel. Die Bezeichnungen n- Clique, Locked Candidates und n- Fish stehen für Techniken zum Lösen von Sudokus und werden ebenfalls im kommenden Kapitel näher erläutert. -7-
Strategien 3 Strategien Die Lösung eines Sudokus ist eine Aufgabe, die ohne den Einsatz verschiedener Lösungsstrategien kaum zu bewältigen ist. Dabei gibt es für Menschen und Computer unterschiedliche Herangehensweisen. Ein Mensch, der ein Sudoku lösen will, geht primär visuell an das Problem heran. Er erkennt zum Beispiel mit einem Blick, ob eine bestimmte Zahl in einem Block vorhanden ist oder fehlt. Zu Beginn wird er nur die One-Rule benutzen, die besagt, dass in jeder Zeile, jeder Spalte und jedem Block die Zahlen von 1 bis 9 nur jeweils einmal vorkommen dürfen. Die einfachste und direkteste Anwendung der One-Rule ist das Eintragen der fehlenden Zahl in Einheiten (Zeile, Spalte oder Block), in denen schon acht Zahlen vorgegeben sind. Damit kommt der Sudoku-Spieler aber nicht sehr weit und er wird beginnen Strategien zu entwickeln, wie er weitere Zahlen finden kann. Einige dieser Techniken werden im ersten Teil des Kapitels vorgestellt. Der Computer hat aufgrund seiner Geschwindigkeit einen Vorteil gegenüber dem Menschen. Er kann viel schneller überprüfen, welche Zahlen noch fehlen. Aber auch er braucht Algorithmen, nach denen er vorgehen kann. Aufgrund seiner enormen Rechenleistung könnte er die Lösung durch reines Ausprobieren finden. Die Dauer dafür würde bei der aktuellen Ausstattung der Rechner und einem geeigneten Algorithmus nur Minuten oder Sekunden betragen, während Menschen dafür Stunden bis Tage benötigen würden. Jedoch kann der Computer auch die Techniken, die der Mensch verwendet, nutzen. Dadurch wird seine Lösungsgeschwindigkeit noch erhöht, da er nicht mehr alle Möglichkeiten durchtesten muss, sondern einige davon frühzeitig -8-
Strategien ausschließen kann. Die Anwendung dieser Techniken wird im zweiten Teil des Kapitels beschrieben. Zu den meisten Sudokus wird ein Schwierigkeitsgrad angegeben. Dieser variiert zwischen leicht (easy), mittel (medium) und schwer (hard), man findet auch Rätsel, die als sehr schwer eingestuft sind, im Englischen werden diese zum Beispiel als „evil“ (bösartig) oder „atrocious“ (grauenhaft) bezeichnet. Darüber, wie die Anbieter dieser Sudokus ihre Kategorisierung vornehmen, ist jedoch meistenteils nichts zu erfahren. Zudem stellen Sudoku-Spieler auch häufig fest, dass ein schweres Rätsel ihnen sehr leicht lösbar erscheint, während sie im Gegenzug für ein leichtes sehr viel Zeit und komplexe Regeln benötigen. Mit dem Schwierigkeitsgrad von Sudokus beschäftigt sich der dritte Teil des Kapitels. Eine Eigenschaft des Sudokus ist die eindeutige Lösung. Um das zu überprüfen muss das Rätsel jedoch erst einmal gelöst werden. Diesen Aufwand betreiben nicht alle Anbieter, so kann es passieren, dass man auf ein Sudoku mit mehreren verschiedenen Lösungen trifft. Im letzten Teil des Kapitels wird das Problem Mehrfachlösungen besprochen. 3.1 Lösungstechniken für Sudoku-Spieler Die wohl simpelste Methode ist, eine Zeile, eine Spalte oder einen Block zu suchen, wo nur noch eine Zahl fehlt, also schon acht vorgegeben sind. An dieser Stelle wird dann die noch fehlende Zahl eingetragen, diese nennt man auch „naked single“. Im Block im Beispiel 1 fehlt in der Mitte noch die 5. Diese Methode kann man dann auch mit sich selbst kombinieren, indem man -9-
Strategien mehrere Einheiten betrachtet. Dazu sucht man sich wieder ein freies Feld und vergleicht die jeweilige Zeile mit der dazugehörigen Spalte und überprüft, ob 1 2 3 nur noch eine Zahl in diesem Feld möglich ist. Man kann nun die Zeile mit dem Block 4 __ 6 vergleichen, die Spalte mit dem Block oder alle drei Einheiten zusammen. Je mehr 7 8 9 Einheiten man miteinander vergleichen muss, desto komplexer wird diese Strategie. Beispiel 1: naked single Sehr häufig wird die folgende Technik benutzt, da sie relativ einfach anzuwenden ist. Man sucht sich in einem Block eine Zahl aus, die nicht vorgegeben ist und betrachtet die den Block schneidenden 3 Zeilen und 3 Spalten. In den Zeilen und Spalten, in denen die gesuchte Zahl schon eingetragen ist, kann sie im Bereich des betrachteten Blockes nicht mehr vorkommen. Im Idealfall bleibt nur noch eine Möglichkeit offen, so dass man die Zahl eintragen kann. Die mit dieser Lösungsstrategie gefundenen Zahlen werden auch als „hidden single“ bezeichnet. Im Beispiel 2 kann man mit dieser Taktik Positionen finden, an denen eine 8 eingetragen werden muss. Betrachtet man den Block links oben, so stellt man fest, dass in den Zeilen 1 und 2 sowie in Spalte 2 jeweils schon eine 8 steht und somit die fehlende 8 im Block links oben nur im rechten unteren Feld möglich ist. Im Block im Zentrum des Sudokus muss die 8 im rechten - 10 -
Strategien oberen Feld stehen, da sich in Spalte 4, Spalte 5 und Zeile 5 1 2 3 4 5 6 7 8 9 schon Zahlen mit dem Wert 8 1 3 8 7 9 befinden. 2 7 9 5 8 3 9 8 3 2 7 Als nächstes kommt meist die 4 9 8 4 Taktik der festgesetzten 5 6 9 4 8 1 Kandidaten („locked candidate“) 6 1 3 9 zur Anwendung. Dabei betrachtet 7 1 6 8 9 2 man die Schnittpunkte von Blöcken 8 8 3 6 9 5 mit Zeilen oder Spalten. Wenn in 9 7 2 9 8 einem Block eine bestimmte Zahl nur noch in einer Zeile oder einer Beispiel 2: locked candidate Spalte möglich ist, so sind das Locked Candidates für diese Zeile oder Spalte – diese Zahl muss in einem Feld dieses Schnittpunktes stehen und kann somit in der betreffenden Zeile oder Spalte nicht mehr vorkommen. Ebenfalls ein Locked Candidate liegt vor, wenn in einer Zeile oder einer Spalte eine Zahl nur noch in einem Block vorkommen kann. Dann besteht für diese Zahl in dem betreffenden Block in keiner anderen Zeile oder Spalte mehr eine Möglichkeit. Im Beispiel 2 sind die beiden Neunen im rechten unteren Block Locked Candidates. Da sie in diesem Block nur in der linken Spalte vorkommen, kann man sagen, dass die 9 in der 7. Spalte im untersten Block stehen muss und nicht im mittleren oder oberen. Durch Kombination mit der „hidden single“-Regel kann man nun im rechten mittleren Block die 9 rechts unten eintragen. - 11 -
Strategien Mit diesen ersten 3 Lösungsmethoden kann man schon fast alle der als leicht eingestuften Sudokus lösen, auch einige der mittelschweren sind damit lösbar. Durch geeignete Kombination der Methoden sollte man sogar den Großteil der mittleren sowie einige schwere Rätsel fertigstellen können. Um weitere Techniken nutzen zu können, werden so genannte Kandidatenlisten aufgestellt. Diese kann man im Kopf erstellen, jedoch ist es einfacher sie in das Rätselfeld zu schreiben. Man trägt in die leeren Felder alle noch möglichen Zahlen ein – alle Zahlen, die in der Zeile, Spalte oder dem jeweiligen Block nicht vorkommen. Eine Kandidatenliste ist die Menge der noch vorhandenen Möglichkeiten für ein Feld, nachfolgend in geschweiften Klammern dargestellt (zum Beispiel ist {1, 2, 3} eine Kandidatenliste, die besagt, dass in einem Feld nur noch die Zahlen 1, 2 und 3 möglich sind). Das Erstellen solcher Listen gilt gleichzeitig als Überprüfung, ob man die erste und zweite Technik richtig angewendet hat. Wenn in einem Feld nur noch eine Zahl möglich, also nur ein Kandidat eingetragen ist, dann entspricht dies dem Ergebnis der ersten Technik. Daher kommt auch die Bezeichnung „naked“ (blank, bloß, offen) – es ist eindeutig sichtbar, dass es nur noch eine Möglichkeit gibt. Wenn in einer Zeile, einer Spalte oder einem Block eine Zahl nur in einer einzigen Kandidatenliste auftaucht, so kann man sie an dieser Stelle eintragen. Das entspricht Technik Zwei – „hidden“ bedeutet in diesem Fall, dass die Lösung für das entsprechende Feld in einer Kandidatenliste versteckt ist. - 12 -
Strategien 125 3 678 27 127 4 27 9 5 8 Beispiel 3: sichtbare 2-Clique Eine Erweiterung der ersten Technik, bei der nach „naked singles“ gesucht wird, findet Anwendung, wenn es genau 2 Kandidatenlisten in einer Einheit (Zeile, Spalte oder Block) gibt, die aus den gleichen Zahlen („naked pairs“, sichtbare Paare) bestehen. Dann muss in dem einen Feld die eine und in dem anderen Feld die andere Zahl stehen. Somit kann man diese Werte aus allen anderen Kandidatenlisten in dieser Einheit streichen. Diese Technik kann man auch für größere Gruppen von Kandidatenlisten in einer Einheit verwenden. Man sucht dann nach „naked triplets“ (sichtbare 3er-Gruppen), „naked quad“ (sichtbare 4er-Gruppen) und so weiter. Für eine sichtbare 3er-Gruppe braucht man 3 Kandidatenlisten, die jeweils aus den 3 gleichen Zahlen bestehen. Eine solche Gruppe besagt, dass in den dazugehörigen 3 Feldern diese 3 Zahlen stehen müssen, sie können somit in der betrachteten Einheit an keiner anderen Stelle vorkommen. Diese 3 Zahlen können nun aus allen anderen Kandidatenlisten der Einheit gestrichen werden. Sichtbare 4er-Gruppen bestehen aus 4 Kandidatenlisten mit jeweils 4 gleichen Zahlen. Befinden sich in 5 Listen nur die gleichen 5 Zahlen, so hat man eine sichtbare 5er Gruppe gefunden und man kann diese 5 Zahlen aus den restlichen Kandidatenlisten der Einheit entfernen. Es sind auch Gruppen von 6, 7, 8 oder 9 Zahlen möglich, die jedoch praktisch keine - 13 -
Strategien große Bedeutung haben, da sie sehr schwer zu erkennen sind oder keinen Effekt (es können keine Kandidaten gestrichen werden) zur Folge haben. 167 123 236 5 238 8 7 38 238 4 9 7 Beispiel 4: sichtbare 3-Clique Eine sichtbare Gruppe der Anzahl n wird von jetzt an als sichtbare n-Clique bezeichnet. Ein „naked single“ ist also eine sichtbare 1-Clique, ein „naked pair“ wird sichtbare 2-Clique genannt und so weiter. In einer sichtbaren n-Clique müssen nicht zwingend alle Kandidatenlisten aus n Zahlen bestehen. So müssen bei einer 3-Clique nicht in allen drei Listen alle drei Zahlen vorkommen. Nicht nur {{a, b, c}, {a, b, c}, {a, b, c}}, sondern auch {{a, b}, {a, b, c}, {a, b, c}} {{a, b, c}, {b, c}, {a, c}} und sogar {{a, b}, {b, c}, {a, c}} sind sichtbare 3-Cliquen für die Zahlen a, b und c. 23 15 15 23 1 1 569 69 7 4 69 679 8 56 59 Beispiel 5: versteckte 2-Clique Auch die 2. Technik kann mit Hilfe der Kandidatenlisten erweitert werden. Dabei wird nach „hidden pairs“, „hidden triplets“, „hidden quads“, also nach - 14 -
Strategien versteckten Gruppen von Zahlen in einer Einheit gesucht. Für ein verstecktes Paar sucht man 2 Kandidatenlisten, in denen jeweils 2 Zahlen vorkommen, die in den anderen Kandidatenlisten dieser Einheit nicht vorhanden sind. Falls es ein solches Paar gibt, dann muss die eine Zahl in dem einen Feld und die andere in dem anderen Feld stehen. Somit kann man aus den Kandidatenlisten in diesen beiden Feldern alle anderen Kandidaten streichen. 124 36 3 3 124 36 14 69 5 89 69 89 6 7 89 89 Beispiel 6: versteckte 3-Clique Für eine versteckte 3er-Clique dürfen 3 Zahlen nur in 3 Listen vorkommen, beispielsweise kommen bei {{1, 2, 3, 4, 5}, {1, 2, 5, 6}, {1, 2, 3, 5, 7}, {4, 5, 7}, {4, 5, 6}, {5, 6}, {5, 6, 7}} die Zahlen 1, 2 und 3 nur in den ersten drei Kandidatenlisten vor (wobei in der 2. Liste keine 3 enthalten ist), somit können in diesen Listen die anderen Kandidaten gestrichen werden1. Auch diese Technik lässt sich auf vier und mehr Zahlen erweitern, allerdings sind diese versteckten Cliquen sehr schwer zu entdecken. Bei den versteckten n-Cliquen gilt ebenfalls, dass nicht in jeder Kandidatenliste der Clique alle n Zahlen vorkommen müssen. 1 Bemerkung: Die letzten vier Kandidatenlisten entsprechen einer sichtbaren 4-Clique für die Zahlen 4, 5, 6 und 7 und somit können diese Werte aus den ersten drei Listen gestrichen werden. Die Ergebnisse sind identisch. - 15 -
Strategien Die Regel Locked Candidate ist mit eingetragenen Kandidatenlisten einfacher anzuwenden. Dazu betrachtet man wieder die Schnittpunkte von Blöcken mit Zeilen oder Spalten. Hat man eine Zahl gefunden, die in Bezug auf die Zeile oder Spalte nur in den drei Feldern des Schnittpunktes mit dem Block vorkommt, so hat man Locked Candidates und man kann aus allen anderen Kandidatenlisten in diesem Block diese Zahl streichen. Auch wenn eine Zahl in einem Block nur in einer Zeile oder Spalte auftaucht, spricht man von Locked Candidates und kann in der betreffenden Zeile oder Spalte alle anderen Vorkommen dieser Zahl entfernen. Eine anspruchsvollere Technik, auch als „x-wing“ bekannt, bezieht sich auf Pärchen von 1 2 3 4 5 6 7 8 9 gleichen Kandidaten in Zeilen 1 9 9 9 9 9 und Spalten. Wenn es eine 2 9 9 Zeile gibt, in der eine Zahl nur 3 9 9 9 an zwei Stellen stehen kann 4 und in einer weiteren Zeile die 5 gleiche Zahl nur an den 6 gleichen beiden Stellen möglich 7 9 9 ist, so kann man in diesen zwei 8 9 9 Spalten diese Zahl aus allen 9 9 9 9 9 anderen Feldern streichen. Der Grund hierfür ist folgender: Beispiel 7: x-wing Wenn man in der ersten Zeile die Zahl an die erste mögliche Position setzt, kann sie nicht an der zweiten Position stehen und man kann sie außerdem aus allen weiteren Kandidatenlisten in der Spalte, die zur ersten Position - 16 -
Strategien gehört, streichen. Daraufhin kann in der zweiten Zeile die Zahl nur an Position zwei stehen und in der dazugehörigen Spalte kann die Zahl wiederum aus allen Kandidatenlisten entfernt werden. Analog geht man vor, wenn man in der zweiten Zeile die Zahl an Position eins setzt. Diese Strategie kann man auch für Spalten einsetzen, dann sucht man nach zwei Spalten, in denen die gleiche Zahl nur in jeweils zwei gleichen Positionen vorkommen kann und streicht sie aus den Kandidatenlisten in den dazugehörigen zwei Zeilen. Im Beispiel 7 sind nur die Felder ausgefüllt, in denen noch eine 9 möglich ist, also mindestens eine 9 in der Kandidatenliste vorkommt. In Zeile 2 und 8 gibt es jeweils nur zwei Möglichkeiten für die 9 in den gleichen Spalten. Wenn nun in Zeile 2 die 9 in der Spalte 3 steht, so muss in Zeile 8 die 9 in Spalte 7, wenn jedoch die 9 in Zeile 2, Spalte 7 steht so muss in der 8. Zeile die 9 in Spalte 3. In beiden Fällen ist die 9 für Spalte 3 und 7 festgelegt, die anderen Möglichkeiten können also gestrichen werden. Noch schwieriger ist die erweiterte „x-wing“-Technik, „swordfish“ genannt. In diesem Fall sucht man nach drei Zeilen (Spalten), bei denen ein Kandidat nur an 3 gleichen Stellen vorkommen kann und streicht sie dann aus den restlichen Kandidatenlisten in den jeweiligen Spalten (Zeilen). Im Beispiel 8 sind wieder nur die Felder gefüllt, in denen noch eine 7 in der Kandidatenliste steht. In Zeile 1, 5 und 7 kann die 7 jeweils nur in einer der Spalten 2, 4 oder 6 stehen. Somit können in diesen Spalten die restlichen Möglichkeiten für die 7 gestrichen werden. Auch in den Spalten 3, 5 und 8 findet man einen „swordfish“ - dort kann die 7 jeweils nur in Zeile 2, 3 und 4 stehen. Aus diesen Zeilen kann man ebenfalls die restlichen Möglichkeiten für die 7 streichen. - 17 -
Strategien Auch die „swordfish“-Technik kann man noch erweitern, sie wird dann 1 2 3 4 5 6 7 8 9 „jellyfish“ genannt und funktioniert 1 7 7 7 genauso, nur dass man in diesem 2 7 7 7 7 Fall vier gleiche Kandidaten an vier 3 7 7 7 7 7 gleichen Stellen sucht. 4 7 7 7 7 5 7 7 7 Die Techniken „x-wing“, „swordfish“ 6 und „jellyfish“ werden zu n-Fish 7 7 7 zusammengefasst, wobei n für die 8 Anzahl der gleichen Zahlen und 9 7 7 7 7 Stellen steht. Einen 1-Fish findet man in Beispiel 8. Wenn man Beispiel 8: swordfish sämtliche nicht mehr möglichen Kandidaten entfernt hat, fällt die allein stehende 7 in Zeile 9, Spalte 1 auf. Das ist ein Kandidat, der in einer Zeile nur einmal in einer Spalte auftaucht, es ist ein 1-Fish. Ein n-Fish mit n > 4 ist nicht sinnvoll, da die Summe aller n-Fish-Kombinationen für eine Zahl 9 ergibt, somit hat man mindestens einen 4-Fish übersehen, wenn man einen 5-Fish gefunden hat. Um das zu zeigen, wurde Beispiel 9 konstruiert. Erst wurde das komplette Spielfeld mit dem Kandidaten 2 gefüllt. Dann wurden in Spalte 1, 3, 5, 7 und 8 einige Kandidaten entfernt, so dass ein 5-Fish entsteht. Dafür dürfen nur in 5 Zeilen noch Kandidaten stehen, in diesem Fall in Zeile 3, 4, 6, 8 und 9, alle anderen wurden gelöscht. Der 5-Fish wurde schwarz markiert. Da man in 4 Zeilen jeweils 5 Kandidaten entfernt hat (einen pro Spalte), verbleiben noch 4 Kandidaten in den gleichen 4 Spalten – das ist ein 4-Fish. Man kann dann die gleichen Kandidaten streichen, dabei macht es keinen Unterschied, ob - 18 -
Strategien man den 4-Fish oder den 5-Fish als Grundlage nimmt. 1 2 3 4 5 6 7 8 9 1 2 2 2 2 Wenn keine der Techniken mehr 2 2 2 2 2 erfolgreich angewendet werden 3 2 2 2 2 2 2 2 2 2 kann, so muss man probieren. Um 4 2 2 2 2 2 2 2 2 2 dieses Probieren möglichst effizient 5 2 2 2 2 zu gestalten, sollte man 6 2 2 2 2 2 2 2 2 2 systematisch vorgehen. Dieses 7 2 2 2 2 Testen wird auch „trial & error“ 8 2 2 2 2 2 2 2 2 2 (Versuch & Irrtum) genannt oder 9 2 2 2 2 2 2 2 2 2 auch „backtracking“ (Zurückverfolgung, Rekursion). Man Beispiel 9: 5-Fish und 4-Fish sucht sich eine möglichst kurze Kandidatenliste (ein Anfangsfeld), trägt einen der Kandidaten ein und wendet danach alle anderen Techniken erneut an. Dabei sollte darauf geachtet werden, dass alle vom Anfangsfeld an getätigten Änderungen wieder rückgängig gemacht werden können. Kommt man nach einer Anzahl weiterer Schritte zu einem Widerspruch zur One-Rule, das heißt, es gibt in einer Einheit eine Zahl doppelt oder eine Zahl kann in einer Einheit gar nicht mehr vorkommen, dann kann man aus der Kandidatenliste im Anfangsfeld die getestete Zahl streichen und muss alle von da an vorgenommenen Änderungen rückgängig machen. Danach kann man den nächsten verbliebenen Kandidaten in das Anfangsfeld setzen und testen, ob dieser zu einem Widerspruch führt. Ist im Anfangsfeld nur noch ein Kandidat übrig, so ist die Lösung für dieses Feld gefunden. - 19 -
Strategien Wenn man jedoch zu einem Punkt kommt, an dem erneut keine anderen Regeln anwendbar sind und kein Widerspruch aufgetreten ist, sollte man die Änderungen rückgängig machen und sich im Anfangsfeld für einen anderen Kandidaten entscheiden2. Ist an diesem Punkt das Rätsel bereits komplett ausgefüllt, hat man bei einem korrekten Sudoku die richtige Lösung. Ist dies nicht der Fall, so sollte man den nächsten Kandidaten im Anfangsfeld testen. Führen mehr als ein Kandidat aus dem Anfangsfeld zu keinem Widerspruch, muss man das Testen für jeden der Anfangskandidaten erneut ausführen. Dies ist sehr aufwändig, weil man im ungünstigsten Fall alle verbliebenen Kandidaten testen muss. Durch dieses Probieren kann man mit Glück im ersten Versuch erfolgreich sein oder erst nach vielen kaskadierenden Tests. Diese Methode sollte immer erst zum Schluss angewendet werden, da sie nicht nur sehr aufwändig, sondern auch fehleranfällig ist. Der Sudoku-Spieler muss sich sehr konzentrieren, um keine Fehler zu machen und sich eine Technik überlegen, wie Eintragungen wieder rückgängig gemacht werden können. Es gibt auch noch weitere Methoden, um das Probieren hinauszuzögern. Jedoch finden diese im Programm keine Anwendung und werden deswegen hier nicht vorgestellt. 3.2 Umsetzung der Lösungstechniken für Computer Im Folgenden werden die soeben besprochenen Regeln abstrahiert und für die Verwendung in Computerprogrammen optimiert. 2 Bemerkung: man könnte auch ein anderes Anfangsfeld bestimmen, dies ist aber unsystematisch. - 20 -
Strategien Die praktischste Methode zum Lösen eines Sudokus auf einem Computer ist das Testen aller Möglichkeiten. Die einfachste Art ein solches Probieren zu implementieren wäre eine lineare Funktion. Dabei würde der Rechner erst in alle freien Felder eine 1 eintragen. Dann überprüft er das Spielfeld mit der One-Rule – kommt in jeder Einheit jede der Zahlen von 1 bis 9 nur genau einmal vor? Trifft dies nicht zu, so tauscht er die 1 im letzten freien Feld gegen eine 2 aus. Daraufhin prüft er das Spielfeld erneut. Ist es wieder ungültig, setzt er ins letzte freie Feld eine 3 und prüft wieder. Diesen Vorgang wiederholt der Rechner, bis er im letzten Feld alle Zahlen bis hin zur 9 getestet hat. Ist das Sudoku auch dann nicht gelöst, setzt er im vorletzten Feld eine um eins höhere Zahl. Nun muss er wieder für das letzte Feld alle Zahlen von 1 bis 9 durchprobieren. Dieser Vorgang wird so oft wiederholt, bis eine gültige Lösung gefunden wird. Das Programm würde in einem solchen Fall aus mehreren ineinander verschachtelten Schleifen bestehen sowie einer Testfunktion, die überprüft, ob die eingetragenen Werte eine gültige Lösung ergeben. Die Anzahl der Schleifen entspricht der Anzahl der freien Felder, jede Schleife läuft von 1 bis 9 und trägt die jeweilige Zahl in ein freies Feld ein. Wenn es eine gültige Lösung gibt, wird sie durch diesen Algorithmus gefunden. Eine Verbesserung dieser Funktion kann man mit Bildung von Kandidatenlisten erreichen. Dazu erstellt der Rechner vor Beginn der Schleifen für jedes freie Feld ein Liste, in die nur die Zahlen eingetragen - 21 -
Strategien werden, die in diesem Feld noch möglich sind, die also weder in der zugehörigen Zeile, Spalte oder dem jeweiligen Block vorkommen. Die Schleifen laufen dann nur noch über diese Listen, so dass nicht mehr jede Zahl ausprobiert werden muss. Zur weiteren Optimierung könnten diese Kandidatenlisten immer dann aktualisiert werden, sobald eine neue Zahl eingetragen wurde. Dadurch würde folgendes Abbruchkriterium entstehen: sobald eine Kandidatenliste leer ist, gibt es für die eingetragenen Testwerte keine Lösung. Nun kann im letzten getesteten Feld der nächste Kandidat ausprobiert werden. Führen alle Kandidaten aus dem letzten Feld zu ungültigen Spielfeldern, wird auf das vorletzte Feld zurückgegriffen. Dies nennt man Backtracking. In das Programm wurde ein Backtracking-Algorithmus integriert, eine genauere Beschreibung dessen wird in Kapitel 4 Abschnitt 2.2 gegeben. Das Erstellen von Kandidatenlisten ist auch für die folgenden Algorithmen notwendig. Zuerst wird für jedes leere Feld eine Liste, die die Zahlen von 1 bis 9 enthält, gebildet. Danach werden aus jeder Liste diejenigen Zahlen entfernt, die im dazugehörigen freien Feld nicht mehr möglich sind. Diese Zahlen entsprechen den bereits eingetragenen Werten in den drei Einheiten (die Zeile, die Spalte, der Block), zu denen das Feld gehört. Ein Algorithmus, der sich nur auf jeweils eine Einheit bezieht, ist der n-Clique-Algorithmus. Die n-Clique ist eine Gruppe von n Kandidatenlisten, in denen jeweils die gleichen n Kandidaten vorkommen. Es gibt zwei verschiedene Formen von n-Cliquen. - 22 -
Strategien Die sichtbare n-Clique besteht aus n Kandidatenlisten, in denen nur die gleichen n Kandidaten und keine weiteren Zahlen vorkommen. In den restlichen Listen der Einheit können aber Kandidaten aus der Clique vorkommen. Die versteckte n-Clique besteht aus den n Kandidatenlisten, in denen die n Kandidaten vorkommen. Diese n Kandidaten dürfen in keiner anderen Liste der Einheit vorkommen, es können jedoch weitere Zahlen in den zur Clique gehörenden Kandidatenlisten auftreten. Eine n-Clique ordnet n Kandidaten n Felder zu. Da in jedem Feld eine Zahl stehen muss, können in diesen n Feldern keine anderen Zahlen stehen und da jede Zahl in der Einheit nur einmal vorkommen darf, können diese n Kandidaten in keinem anderen Feld der Einheit vorkommen. Existiert also eine n-Clique, so kann man diese n Kandidaten in den Feldern der Einheit streichen, die nicht zur Clique gehören. Weiterhin kann man auch alle in den Kandidatenlisten der Clique vorkommenden Zahlen streichen, die nicht zur Clique gehören. Es tritt immer nur eine Form der n-Clique auf, entweder eine sichtbare oder eine versteckte, somit werden nur Zahlen in der Clique oder außerhalb gestrichen. Die einfachste Form der n-Clique ist die 1-Clique {a}, dabei ist in dem einen Feld nur noch die eine Zahl möglich. Bei einer sichtbaren 1-Clique besteht die Kandidatenliste nur noch aus einem Wert. Eine versteckte 1-Clique ist vorhanden, wenn eine Zahl nur noch in einem Feld der Einheit vorkommen kann. In beiden Fällen kann die Zahl, aus der die Clique besteht, sofort in das entsprechende Feld eingetragen werden. - 23 -
Strategien Eine 2-Clique besteht aus 2 Kandidatenlisten, in denen die 2 gleichen Zahlen vorkommen. Eine sichtbare 2-Clique gibt es, wenn es in einer Einheit 2 Listen mit jeweils nur 2 gleichen Zahlen gibt, in der Form {a, b} und {a, b}. Dann können aus allen anderen Listen der Einheit die Zahlen a und b entfernt werden. Versteckte 2-Cliquen sind vorhanden, wenn 2 Zahlen a und b nur in 2 Kandidatenlisten auftauchen. Ein Beispiel hierfür wäre eine Einheit, in der noch folgende Listen stehen: {a, b, c, d, e}, {a, b, c, d, e}, {c, d, e}, {d, e} und {c, d, e}. Die Zahlen a und b kommen nur in den ersten beiden Listen vor. Das heißt, eines der beiden Felder hat a als Lösung und das andere b, somit sind c, d und e dort nicht möglich und können aus den Listen gestrichen werden. Die Listen einer 2-Clique müssen aber nicht unbedingt aus jeweils 2 Zahlen bestehen, sie können auch die Form {a} und {a, b} haben. Bei einer sichtbaren 2-Clique entspräche die erste Liste einer sichtbaren 1-Clique. Ist die 2-Clique versteckt, wäre die zweite Liste eine versteckte 1-Clique. Wenn man nun die 1-Cliquen-Regel anwendet, führt das jeweils dazu, dass zwei 1-Cliquen {a} und {b} entstehen. Eine 2-Clique kann also auch aus zwei 1-Cliquen bestehen. 3-Cliquen umfassen 3 Kandidatenlisten, in denen die gleichen 3 Zahlen stehen. Gibt es in einer Einheit 3 Listen {a, b, c}, {a, b, c} und {a, b, c}, so ist das eine sichtbare 3-Clique und man kann die Zahlen a, b und c aus den anderen Kandidatenlisten löschen. Bei einer versteckten 3-Clique kommen 3 Zahlen nur in den gleichen 3 Listen einer Einheit vor. Ein Beispiel: in einer Einheit sind noch die Kandidatenlisten {a, b, c, d}, {a, b, c, d,}, {a, b, c, d,}, {a, b, c, d}, {a, c, d e ,f ,g}, {a, e ,f ,g} und {d, e ,f ,g} vorhanden. Die Zahlen - 24 -
Strategien e, f und g kommen nur in den letzten 3 Listen vor, das entspricht einer versteckten 3-Clique, daraufhin kann man in den letzten 3 Listen alle Zahlen bis auf e, f und g streichen. Auch bei einer 3-Clique muss nicht jede ihrer Kandidatenlisten aus drei Zahlen bestehen. Sie kann ebenfalls aus kleineren Cliquen zusammengesetzt sein, aus einer 2-Clique und einer 1-Clique oder aus drei 1-Cliquen. Wenn sie nicht zusammengesetzt ist, muss jeder der drei Kandidaten in mindestens in zwei Listen vorhanden sein, das heißt auch {a, b}, {b, c} und {a, c} bilden eine 3-Clique. Einheiten, in denen 4 Kandidatenlisten nur aus den 4 gleichen Zahlen bestehen, enthalten eine sichtbare 4-Clique, eine versteckte 4-Clique existiert, wenn 4 Zahlen nur in 4 Listen der Einheit enthalten sind. Diese 4-Cliquen haben die gleiche Eigenschaften, wie kleinere Cliquen. Bei sichtbaren kann man die 4 Zahlen der Clique aus den anderen Listen streichen und bei versteckten können aus den zur Clique gehörenden Listen die Zahlen, die nicht zur Clique gehören, entfernt werden. Bei 4-Cliquen müssen ebenfalls nicht alle 4 Zahlen in jeder Kandidatenliste vorkommen, außerdem kann die 4-Clique auch aus kleineren Cliquen zusammengesetzt sein. Alle Eigenschaften der n-Cliquen mit n ≤ 4 gelten auch für die n-Cliquen mit 4 < n ≤ 9. Eine 9-Clique besteht damit aus 9 Kandidatenlisten, in denen nur 9 Zahlen vorkommen. Da eine Einheit aber nur 9 Listen besitzt und es bei Sudoku nur 9 verschiedene Zahlen gibt, wird mit einer 9-Clique kein Effekt - 25 -
Strategien erzielt, da man keine Zahlen streichen kann. Vielmehr ist jede Einheit eine 9-Clique. Auch die 9-Clique kann zusammengesetzt sein – in einer vollständig ausgefüllten (gelösten) Einheit besteht die 9-Clique aus neun 1-Cliquen. Daraus kann man ableiten, dass n-Cliquen mit n > 4 redundant sind, da zu jeder n-Clique eine (9 - n)-Clique existiert. Das heißt, dass es eine 5-Clique nur dann geben kann, wenn es auch eine 4-Clique oder eine zusammengesetzte 4-Clique gibt. Im Beispiel 10 sieht man eine sichtbare 5-Clique in den Feldern 1, 3, 5, 7 und 9, während in den restlichen Feldern eine 4-Clique versteckt ist. 13579 13579 13579 13579 13579 13579 13579 13579 13579 2468 2468 2468 2468 Beispiel 10: versteckte 4-Clique und sichtbare 5-Clique Um eine sichtbare n-Clique zu finden, muss der Computer alle Kandidatenlisten einer Einheit miteinander vergleichen. Er bildet erst aus der Menge aller möglichen Kandidaten eine Teilmenge mit n Kandidaten und vergleicht diese dann mit allen Listen der Einheit. Vor dem Vergleich setzt er einen Zähler auf Null. Kommen alle Kandidaten einer Liste in der Teilmenge vor, so merkt er sie sich und erhöht den Zähler. Sind alle Listen mit der Teilmenge verglichen worden, und der Zähler ist gleich n, so hat er eine sichtbare n-Clique gefunden und kann alle Kandidaten der Teilmenge aus den nicht zur Clique gehörenden Kandidatenlisten entfernen. Ist der Zähler kleiner als n so existiert keine n-Clique mit den Kandidaten der Teilmenge. Die Teilmengen werden systematisch erzeugt, so dass jede mögliche Kombination der Kandidaten einmal getestet wird. - 26 -
Strategien Für versteckte Cliquen werden aus den Kandidatenlisten Positionslisten erstellt, das heißt, die 1. Liste enthält alle Positionen des Kandidaten 1 in der Einheit, die 2. alle Positionen des Kandidaten 2 in der Einheit und so weiter. Jetzt wird aus der Menge aller möglichen Positionen (1 bis 9) eine Teilmenge mit n Positionen gebildet, die analog dem Algorithmus zum Finden von sichtbaren Cliquen mit den Positionslisten verglichen wird. Sind n Positionslisten gefunden worden, die innerhalb der Teilmenge liegen, so werden aus den restlichen Listen die Werte der Teilmenge gestrichen. Am Ende werden aus den Positionslisten wieder Kandidatenlisten erstellt. Dazu werden erst alle Kandidatenlisten geleert. Nun werden in die 1. Kandidatenliste alle Nummern der Positionslisten eingetragen, in der eine 1 vorkommt, in die 2. Kandidatenliste alle Nummern der Positionslisten, in der eine 2 vorkommt und so weiter. Um das Finden von n-Cliquen zu vereinfachen, kann man sich eine Matrix erstellen, wie in Tabelle 1. 1 2 3 4 5 6 7 8 9 1 * Dann trägt man die gegebenen 2 * * Kandidatenlisten in die Zeilen ein (im 3 * * 4 * * Beispiel besteht die 1. Liste nur aus 5 * * * dem Kandidaten 1, die 2. Liste ist 6 * * * * 7 * {2, 3}, die 3. Liste ist {1, 5} und so 8 * * * weiter). Nun kann man die 9 * * * Untermenge bilden und für die Suche nach sichtbaren n-Cliquen mit Tabelle 1: Hilfsmatrix den Zeilen vergleichen. Will man - 27 -
Strategien versteckte n-Cliquen entdecken, vergleicht man die Untermenge mit den Spalten, die den Positionslisten entsprechen. Bei einem n-Fish werden die Schnittpunkte von zwei Einheitenarten betrachtet. Ein Schnittpunkt von einer Zeile und einer Spalte besteht dabei aus einem Feld, während ein Block und eine Spalte oder ein Block und eine Zeile sich jeweils in 3 Feldern schneiden. Ein n-Fish ist eine Menge von n Positionen von Schnittpunkten in n Einheiten einer Art, an denen ein und dieselbe Zahl steht oder möglich ist. Der n-Fish findet hauptsächlich Anwendung bei Schnittpunkten von Zeilen und Spalten, deswegen wird die Beschreibung des n-Fishs nur für Zeilen und Spalten erfolgen. Die Sonderform Locked Candidate wird separat eingeführt. Auch beim n-Fish ist die einfachste Form ein 1-Fish. Dafür wird ein leeres Feld gesucht und aus der Kandidatenliste ein Wert genommen. Nun werden die Zeile und die Spalte betrachtet. Kommt dieser Kandidat in einer dieser Einheiten nur an dieser Stelle vor, so ist dies ein 1-Fish. Wenn die Zahl in der Spalte die einzige Möglichkeit ist, so kann man sie als Lösung an dieser Stelle eintragen (siehe versteckte 1-Clique) und sie somit aus den Kandidatenlisten der Zeile streichen. Ist sie in der Zeile einzig, kann man sie auch eintragen und aus den Kandidatenlisten der Spalte streichen. Eine bereits eingetragene Zahl ist auch ein 1-Fish. Ein 2-Fish, auch "x-wing" genannt, tritt auf, wenn in 2 Zeilen oder 2 Spalten eine Zahl nur an den beiden gleichen Positionen möglich ist. Das heißt, Zahl - 28 -
Strategien a ist in Zeile y1 und y23 jeweils nur an den Positionen x1 und x2 möglich. y \x 1 2 3 4 5 6 7 8 9 Wenn a nun in Zeile y1 an der Stelle 1 1 1 1 x1 stehen würde, müsste sie in Zeile 2 1 1 1 y2 an der Stelle x2 stehen, wenn sie 3 1 1 1 1 1 aber in y1 an der Stelle x2 stehen 4 1 1 1 würde, dann bliebe in y2 nur noch x1, 5 1 1 1 1 da eine Zahl in einer Zeile nur 6 1 1 einmal vorkommen darf. Somit kann 7 die Zahl a in den Spalten x1 und x2 8 1 1 nur an den Stellen y1 und y2 stehen 9 und aus den restlichen Kandidatenlisten dieser Spalten Beispiel 11: 2-Fish und 1-Fish gelöscht werden. Das gleiche kann man in den Zeilen anwenden, wenn man einen 2-Fish in den Spalten gefunden hat. Im Beispiel 11 sieht man einen 2-Fish in den Spalten 4 und 7, wodurch die restlichen Möglichkeiten für die 1 in den Zeilen 3 und 5 gestrichen werden können. Dadurch entsteht in Spalte 3 ein 1-Fish, der die Entfernung der restlichen Möglichkeiten für den Kandidaten in der zugehörigen Zeile verursacht. Auch beim n-Fish muss in der betreffenden Spalte oder Zeile die Zahl nicht zwingend n mal vorkommen, sondern kann weniger als n mal auftreten. Wenn im Fall 2-Fish in einer Spalte oder Zeile eine Zahl nur einmal vorkommt, entspricht dies einem 1-Fish. Dann kann man durch Streichen der Kandidaten den 2-Fish auf zweimal 1-Fish reduzieren. 3 Bemerkung: Im folgenden wird x als Variablen für bestimmte Spalten und y als Variable für Zeilen verwendet. - 29 -
Strategien Der 3-Fish wird auch als „swordfish“ bezeichnet und existiert, falls in 3 Zeilen oder Spalten eine Zahl nur an den 3 gleichen Positionen vorkommen kann. Wenn eine Zahl a in den Zeilen y1, y2 und y3 nur an den Stellen x1, x2 und x3 stehen kann, so sind alle Möglichkeiten für a sowohl in den 3 Zeilen, als auch in den 3 Spalten ausgeschöpft, da jede Zahl in jeder Einheit nur einmal vorkommen darf. Daraufhin kann man in allen Spalten x1, x2 und x3 außer an den Schnittpunkten mit den Zeilen y1,y2 und y3 die Zahl a aus den y \x 1 2 3 4 5 6 7 8 9 Kandidatenlisten entfernen. Wenn 1 man einen 3-Fish in den Spalten 2 4 4 4 findet, so kann man Kandidaten 3 4 4 aus den dazugehörigen Zeilen 4 4 4 entfernen. 5 6 4 4 Der 3-Fish kann auch 7 4 4 4 zusammengesetzt aus einem 8 4 4 2-Fish und einem 1-Fish oder aus 9 dreimal einem 1-Fish sein. Ebenfalls gilt, dass nicht in jeder Beispiel 12: zwei 3-Fish Zeile oder Spalte die Zahl n mal vorkommen muss. In Beispiel 12 findet man zwei mal einen 3-Fish. Einer befindet sich in den Spalten 3, 6 und 9 und der andere ist in den Zeilen 3, 4 und 8. Beide haben zur Folge, dass man die 4 in Zeile 2, Spalte 1 und die in Zeile 7, Spalte 8 streichen kann. Beim „jellyfish“, dem 4-Fish, wird nach Zeilen (oder Spalten) gesucht, in denen eine Zahl nur in 4 Spalten (Zeilen) vorkommen kann. In diesem Fall - 30 -
Strategien kann diese Zahl aus den anderen Kandidatenlisten der Spalten (Zeilen) gelöscht werden. Auch der 4-Fish kann zusammengesetzt sein, und es muss nicht in jeder Zeile oder Spalte 4 Möglichkeiten für die Zahl geben. Genau wie bei der n-Clique ist beim n-Fish 9 der Maximal-Wert y \x 1 2 3 4 5 6 7 8 9 für das n. Auch ein n-Fish kann 1 5 5 zusammengesetzt sein. Somit ist 2 5 5 5 5 5 5 auch ein n-Fish mit n>4 3 5 5 5 5 5 redundant, da es für jeden n-Fish 4 5 5 5 5 5 5 5 auch einen (9 - n)-Fish gibt, das 5 5 5 5 5 heißt, wenn es einen 5-Fish gibt, 6 5 5 5 dann gibt es auch einen 4-Fish. 7 5 5 5 5 5 8 5 5 5 Im Beispiel 13 befindet sich in 9 5 5 5 5 5 den Spalten 2, 5, 6, 7 und 9 ein 5-Fish, den dazugehörigen (9 - n)-Fish (4-Fish) findet man in Beispiel 13: ein 4-Fish und ein 5-Fish den Zeilen 1, 5, 6 und 8. Um mit einem Computer einen n-Fish zu finden, kann man sich der gleichen Matrix bedienen, die bei der Suche nach n-Cliquen benutzt wurde (Tabelle 1). Dabei überträgt man die noch möglichen Positionen eines Kandidaten in die Hilfsmatrix. In das Beispiel in Tabelle 2 wurde das Kandidatenfeld aus Beispiel 11 übernommen. Nun kann man wieder eine Untermenge bilden. Diese Menge besteht aus n Zahlen zwischen 1 und 9. Das n entspricht dabei dem aus dem gesuchten n-Fish. Dann werden die Spalten mit dieser - 31 -
Strategien Untermenge verglichen, und wenn man n Spalten gefunden hat, die zur 1 2 3 4 5 6 7 8 9 1 * * * Untermenge gehören (die Elemente 2 * * * der Spalte sind in der Menge 3 * * * * * 4 * * * enthalten), so ist ein n-Fish gefunden. 5 * * * * Wurde kein n-Fish entdeckt, kann 6 * * 7 man noch die Zeilen mit der 8 * * Untermenge vergleichen. 9 Locked Candidate ist eine Tabelle 2: Hilfsmatrix Sonderform von n-Fish. Dabei geht es nicht um die Schnittpunkte von Zeilen und Spalten, sondern um die Schnittpunkte von Zeilen und Blöcken beziehungsweise Spalten und Blöcken. Jeder Schnittpunkt besteht aus 3 Feldern, wobei es egal ist, ob in diesen die gesuchte Zahl einmal, zweimal oder dreimal vorkommt und an welchen Stellen sie steht. Weiterhin ist 3 die Obergrenze für das n bei Locked Candidate, da maximal 3 Blöcke eine Zeile oder eine Spalte schneiden. Da ein 3-Fish keine Veränderungen hervorrufen würde und ein 2-Fish einen 1-Fish impliziert, muss nur nach einem 1-Fish gesucht werden. Beim Löschen von Kandidaten muss beachtet werden, dass die Zahlen immer in allen 3 Feldern des Schnittpunktes gelöscht werden können. Auch bei den Locked Candidates kann die Hilfsmatrix verwendet werden. In diesem Fall setzt man in der Matrix ein Feld, wenn der Schnittpunkt eines Blockes in mindestens einem Feld denjenigen Kandidaten enthält, für den Locked Candidates angewendet werden soll. Die Matrizen in Tabelle 3 und 4 wurden ebenfalls aus dem Beispiel 11 generiert. In beiden Tabellen - 32 -
Strategien entsprechen die Spaltennummern den Nummern der Blöcke (Block 1 ist 1 2 3 4 5 6 7 8 9 links oben, Block 2 ist oben in der 1 * * 2 * * Mitte, Block 3 ist rechts oben, Block 4 3 * * * ist links in der Mitte und so weiter). 4 * * * 5 * * * Tabelle 3 wurde für die Schnittpunkte 6 * * mit den Zeilen erstellt: wenn also der 7 8 * Schnittpunkt von Zeile 1 mit Block 1 9 den Kandidaten enthält, wird das Feld (1,1) gesetzt. In Tabelle 4 wird Feld Tabelle 3: Hilfsmatrix (1,1) nur gesetzt, wenn der Kandidat im Schnittpunkt der 1. Spalte mit dem 1. Block vorkommt. Da im Fall Locked Candidate nur nach 1-Fish gesucht wird, braucht man dann in den Matrizen nur nach Spalten oder Zeilen zu suchen, in denen nur ein Wert gesetzt ist. Führt diese Aktion zu einem Erfolg, so hat man einen Locked Candidate in dem Schnittpunkt, für den das gefundene Feld steht, entdeckt und kann die Kandidaten aus dem Rest des Blockes und der Spalte oder Zeile 1 2 3 4 5 6 7 8 9 streichen. Nachdem die Matrizen 1 * * * 2 * * durchsucht wurden, muss man nur 3 * * aus den ursprünglichen 4 * * 5 * * Kandidatenlisten, die zu dem 6 Schnittpunkt gehören, von dem das 7 * * 8 Feld in der Matrix gelöscht wurde, 9 * * den Kandidaten entfernen. Tabelle 4: Hilfsmatrix - 33 -
Strategien Wenn der Rechner keine der oben angeführten Methoden mehr anwenden kann, muss auch er probieren. Dafür ist ein Backtracking-Algorithmus die beste Möglichkeit. Dabei werden systematisch die noch möglichen Zahlen durchgetestet. Durch gewisse Optimierungen wie das Beginnen mit kleinen Kandidatenlisten und Ausschluss von Kandidaten, die zu keiner Lösung führen, kann der Algorithmus beschleunigt werden. 3.3 Der Schwierigkeitsgrad Zu den meisten Sudokus wird ein Schwierigkeitsgrad angegeben. Dieser soll aussagen, wie aufwändig die Lösung des Rätsels ist. Die häufigste Einteilung ist leicht (easy) – mittel (medium) – schwer (hard). Oft werden Rätsel auch als sehr schwer eingestuft. Das subjektive Empfinden des Sudoku-Spielers wird durch diese Einteilung mitunter schlecht repräsentiert. Diese Schwierigkeitsgrade können nicht verallgemeinert werden, da sie keinen Regeln unterliegen. Es wird bei fast keinem Sudoku erwähnt, wofür leicht, mittel oder schwer steht. Somit kann einem Sudoku-Spieler einerseits ein schweres Rätsel sehr einfach erscheinen, jedoch andererseits die Lösung eines leichten einiges Kopfzerbrechen bereiten. Das könnte zum Beispiel daran liegen, dass verschiedene Anbieter ihre Sudokus für unterschiedlich erfahrene Spieler bewerten. Es ist auch vorstellbar, dass ein Rätsel nach der Anzahl von Vorgaben eingeschätzt wird – je weniger Vorgaben, desto schwieriger ist es. Sinnvoll wäre eine Bewertung nach Schwierigkeit der Regeln, die zur Lösung eines Sudokus benutzt werden müssen. Hierbei bekämen die Regeln für das - 34 -
Sie können auch lesen