Ich bin auf der Suche nach dem "Wie finden Sie es", weil ich keine Ahnung habe, wie man die Algorithmuskomplexität meines Programms finden.Algorithmuskomplexität (Big-O) von Sudoku-Löser
ich einen Sudoku-Löser mit Java, geschrieben ohne Effizienz im Vordergrund (ich wollte es versuchen rekursiv arbeiten zu lassen, was ich konnte mit!)
Einige Hintergrundinformationen:
meine Strategie, um zu bestimmen Rückzieher beschäftigt , für ein gegebenes Sudoku-Rätsel, ob das Puzzle nur eine einzigartige Lösung hat oder nicht. Also lese ich grundsätzlich in einem gegebenen Puzzle und löse es. Sobald ich eine Lösung gefunden habe, bin ich nicht unbedingt fertig, muss weiter nach weiteren Lösungen suchen. Am Ende kommt eines von drei möglichen Ergebnissen: Das Puzzle ist überhaupt nicht lösbar, das Puzzle hat eine einzigartige Lösung oder das Puzzle hat mehrere Lösungen.
Mein Programm liest die Puzzle-Koordinaten aus einer Datei ein, die für jede gegebene Ziffer eine Zeile hat, bestehend aus Zeile, Spalte und Ziffer. Durch meine eigene Konvention ist das obere linke Quadrat von 7 als 007. geschrieben
Umsetzung:
ich die Werte laden in, aus der Datei, und sie in einem Array 2-D gespeichert ich nach unten gehen die Array, bis ich einen Blank (ungefüllten Wert) finde, und setze ihn auf 1. Und überprüfe auf Konflikte (ob der Wert, den ich eingegeben habe, gültig ist oder nicht). Wenn ja, gehe ich zum nächsten Wert. Wenn Nein, ich den Wert um 1 erhöhen, bis ich eine Ziffer finde, die funktioniert, oder wenn keine von ihnen funktioniert (1 bis 9), gehe ich einen Schritt zum letzten Wert zurück, den ich eingestellt habe, und ich inkrementiere diesen Rekursion). Ich bin fertig gelöst, wenn alle 81 Elemente gefüllt wurden, ohne Konflikte. Wenn Lösungen gefunden werden, drucke ich sie auf dem Terminal. Andernfalls, wenn ich versuche, auf dem ERSTEN Element, das ich ursprünglich geändert habe, "einen Schritt zurückzugehen", bedeutet dies, dass es keine Lösungen gab.
Wie kann meine Programme Algorithmus Komplexität? Ich dachte, es könnte linear [O (n)], aber ich Zugriff auf die mehrfach Array, so dass ich bin mir nicht sicher :(
Jede Hilfe
Wenn Sie Backtracking verwenden, ist Ihre Komplexität wahrscheinlich exponentiell. I.e. für jeden Zug, den du machst, wirst du mehr oder weniger jede andere mögliche Bewegung ausführen. – millimoose
Können Sie Ihren Code posten? Oder nur die relevanten Teile davon? –