Algorithmus-Komplexität (Big-O) sudoku solver

Ich bin suchen Sie nach dem "wie finden Sie es" da habe ich keine Idee, wie Sie Ansatz finden, der Algorithmus Komplexität von meinem Programm.

Schrieb ich ein sudoku-solver, die mit java, ohne Effizienz im Hinterkopf (ich wollte versuchen, damit es funktioniert rekursiv, das ich es mit!)

Etwas hintergrund:

meine Strategie beschäftigt backtracking zu ermitteln, für eine VORGEGEBENE Sudoku-Rätsel, ob das puzzle hat nur eine einzigartige Lösung, oder nicht. Also habe ich im Grunde Lesen Sie in einem bestimmten Rätsel, und es zu lösen. Einmal fand ich eine Lösung, ich bin nicht unbedingt fertig, müssen noch weiter erforscht und für weitere Lösungen. Am Ende, eines von drei möglichen Ergebnissen passiert: das puzzle ist nicht lösbar an alle, das Rätsel eine eindeutige Lösung hat, oder das puzzle hat mehrere Lösungen.

Mein Programm liest in dem puzzle-Koordinaten aus einer Datei, eine Zeile für jede Ziffer, die aus der Zeile, der Spalte und der Ziffer. Durch meine eigene convention, die linke Obere Quadrat von 7 ist so geschrieben, als 007.

Umsetzung:

Lade ich die Werte aus der Datei und hinterlegt Sie in einem 2-D array
Ich gehe durch das array, bis ich eine Leere (unausgefüllte Wert), und setzen Sie ihn auf 1. Und überprüfen Sie, ob irgendwelche Konflikte (ob der Wert, den ich eingegeben, gültig ist oder nicht).
Wenn ja, Verschiebe ich auf den nächsten Wert.
Wenn Nein, ich erhöhe den Wert um 1, bis ich eine Stelle, die funktioniert, oder wenn keiner von Ihnen arbeiten (1 bis 9), gehe ich wieder 1 Schritt, um den letzten Wert, den ich eingestellt und ich habe Inkrement, dass man (mit Rekursion).
Ich bin fertig lösen, wenn alle 81 Elemente wurden gefüllt, ohne Konflikte.
Wenn keine Lösungen gefunden werden, Drucke ich Sie aus dem terminal.
Ansonsten, wenn ich versuche, "einen Schritt zurückgehen" auf das ERSTE element, dass ich zunächst geändert werden, bedeutet, dass es keine Lösungen.

Wie kann ich Programme Algorithmus Komplexität? Ich dachte, es könnte sein, linear [ O(n) ], aber ich bin den Zugriff auf das array mehrere Male, also bin ich nicht sicher 🙁

Jede Hilfe ist willkommen

Wenn Sie mit backtracking, Ihre Komplexität ist wahrscheinlich exponential-ish. I. e. für jeden Schritt, den Sie recurse-in mehr oder weniger jede mögliche andere verschieben.
Könnte Sie nach Ihrem code? Oder nur die relevanten Abschnitte?

InformationsquelleAutor Eric Muller | 2013-03-10

Schreibe einen Kommentar