Σκεφτείτε το σαν να εξερευνήσετε ένα λαβύρινθο:
* Ξεκινάτε στην είσοδο και δοκιμάστε μια διαδρομή.
* Εάν φτάσετε σε αδιέξοδο, επιστρέφετε στην τελευταία διασταύρωση και δοκιμάστε μια διαφορετική διαδρομή.
* Συνεχίζετε να το κάνετε μέχρι να βρείτε την έξοδο (λύση) ή να εξερευνήσετε όλα τα μονοπάτια.
Βασικά χαρακτηριστικά του backtracking:
* Αναδρομική: Οι αλγόριθμοι backtracking είναι εγγενώς αναδρομικοί. Κάθε αναδρομική κλήση διερευνά έναν διαφορετικό κλάδο του χώρου λύσης.
* Δοκιμή και σφάλμα: Είναι μια προσέγγιση δοκιμής και σφάλματος. Προσπαθεί διάφορες επιλογές και απορρίπτει εκείνες που δεν οδηγούν σε λύση.
* Εξερεύνηση του χώρου κατάστασης: Ο αλγόριθμος διερευνά συστηματικά ολόκληρο τον κρατικό χώρο (όλες τις πιθανές λύσεις), συχνά χρησιμοποιώντας μια δομή που μοιάζει με δέντρο για να αντιπροσωπεύει την αναζήτηση.
* Κλάδεμα: Μια κρίσιμη πτυχή είναι η ικανότητα να κλαδεύει (απορρίπτεται) τα κλαδιά του δέντρου αναζήτησης νωρίς εάν είναι αποφασισμένο ότι δεν μπορούν να οδηγήσουν σε έγκυρη λύση. Αυτό βελτιώνει σημαντικά την αποτελεσματικότητα.
Κοινές εφαρμογές του backtracking:
* Βρίσκοντας όλες τις πιθανές μεταβολές ενός συνόλου: Δημιουργώντας όλες τις πιθανές ρυθμίσεις των στοιχείων.
* Επίλυση του προβλήματος n-queens: Τοποθετώντας το Nchess Queens σε μια σκακιέρα N × N έτσι ώστε να μην απειλούνται δύο βασίλισσες ο ένας τον άλλον.
* Επίλυση παζλ sudoku: Συμπληρώνοντας τα κενά κύτταρα ενός πλέγματος Sudoku σύμφωνα με τους κανόνες του παιχνιδιού.
* Δημιουργία όλων των υποσυνόλων ενός σετ: Βρίσκοντας όλους τους πιθανούς συνδυασμούς στοιχείων από ένα σετ.
* αλγόριθμοι διαδρομής γραφικών (π.χ., βάθος-πρώτη αναζήτηση): Εξερεύνηση όλων των διαδρομών σε ένα γράφημα.
* Προβλήματα ικανοποίησης περιορισμού: Προβλήματα όπου οι λύσεις πρέπει να ικανοποιούν ένα σύνολο περιορισμών.
Παράδειγμα (απλοποιημένα n-quens):
Φανταστείτε να τοποθετήσετε δύο βασίλισσες σε μια σκακιέρα 2x2. Ένας αλγόριθμος backtracking θα:
1. Δοκιμάστε να τοποθετήσετε την πρώτη βασίλισσα στην κορυφαία γωνία.
2. Δοκιμάστε να τοποθετήσετε τη δεύτερη βασίλισσα στην επάνω δεξιά γωνία. Αυτό είναι άκυρο (οι Queens επιτίθενται ο ένας τον άλλον).
3. Backtrack:Αφαιρέστε τη δεύτερη βασίλισσα.
4. Δοκιμάστε να τοποθετήσετε τη δεύτερη βασίλισσα στην κάτω αριστερή γωνία. Αυτό δεν είναι άκυρο.
5. Backtrack:Αφαιρέστε τη δεύτερη βασίλισσα.
6. Backtrack:Αφαιρέστε την πρώτη βασίλισσα.
7. Δοκιμάστε να τοποθετήσετε την πρώτη βασίλισσα στην επάνω δεξιά γωνία ... και ούτω καθεξής μέχρι να βρεθεί μια λύση (ή η έλλειψη).
Στην ουσία, το backtracking είναι μια ισχυρή αλλά δυνητικά υπολογιστική δαπανηρή τεχνική για την επίλυση προβλημάτων όπου ο χώρος λύσης είναι μεγάλος και πρέπει να διερευνηθεί συστηματικά. Η αποτελεσματικότητα εξαρτάται από το πόσο αποτελεσματικά ο αλγόριθμος μπορεί να κλαδεύει τον χώρο αναζήτησης.
Πνευματικά δικαιώματα © Γνώση Υπολογιστών Όλα τα δικαιώματα κατοχυρωμένα