Μελέτη του αλγορίθμου Daekstra για μεγάλα δεδομένα. Γραφικές παραστάσεις. Βρίσκοντας τη μικρότερη απόσταση μεταξύ των δύο κορυφών χρησιμοποιώντας τον αλγόριθμο Deiquistra. Πιθανοί τρόποι και χαρακτηριστικά της παράλληλης εφαρμογής του αλγορίθμου

Ο αλγόριθμος Daekstra έχει σχεδιαστεί για να βρει τη συντομότερη διαδρομή μεταξύ των κορυφών σε ένα μη προσανατολισμένο γράφημα.

Η ιδέα του αλγορίθμου έχει ως εξής: Πρώτα επιλέξτε τη διαδρομή στην αρχική κορυφή στο μηδέν και εισάγουμε αυτή την κορυφή στο που έχει ήδη επιλεγεί η απόσταση, η απόσταση από την οποία έως τις υπόλοιπες αφόρητες κορυφές ορίζεται. Σε κάθε επόμενο στάδιο βρίσκουμε την ακόλουθη επιλεγμένη κορυφή, την απόσταση στην οποία η μικρότερη και η συνδεδεμένη άκρη με κάποια κορυφή μιας πλειάδας μη επιλεγμένων (αυτή η απόσταση θα είναι ίση με την απόσταση από την επιλεγμένη κορυφή συν το μήκος της πλευράς) .

Παράδειγμα 1. Βρείτε τη συντομότερη διαδρομή στη στήλη από την κορυφή ΜΕΓΑΛΟ. στην κορυφή ΡΕ. (Εικ. 10.7).

Σύκο. 10.7.

Γράφουμε τον αλγόριθμο με τη μορφή μιας ακολουθίας βημάτων (Πίνακας 10.1). Βήμα 1. Προσδιορίστε τις αποστάσεις από την αρχική κορυφή ΜΕΓΑΛΟ. μέχρι όλους τους άλλους.

Πίνακας 10.1

Μέθοδος Daekstra (πρώτο βήμα)

Επιλεγμένος

Τρόπος επιλεγμένης κορυφής

Μη επιλεγμένη κορυφή

Βήμα 2. Επιλέξτε τη μικρότερη απόσταση από ΜΕΓΑΛΟ. πριν ΣΕ; Κάτοψη ΣΕ Αποδεκτή για το πρόσφατα επιλεγμένο. Βρήκε τη μικρότερη απόσταση να προσθέσει στα μήκη των πλευρών από τη νέα κορυφή ΣΕ μέχρι όλους τους άλλους. Επιλέξτε την ελάχιστη απόσταση από ΣΕ πριν Ν. Νέα κορυφή Ν. Δεχόμαστε για τους επιλεγμένους (πίνακας 10.2).

Πίνακας 10.2.

Μέθοδος Daekstra (δεύτερο βήμα)

Επιλεγμένος

Τρόπος επιλεγμένης κορυφής

Μη επιλεγμένη κορυφή

Για λόγους σαφήνειας, στο μέλλον, αντί για το σημάδι του OO, θα βάλουμε ένα σημάδι "-".

Βήμα 3. Προσδιορίστε την απόσταση από την κορυφή N L. Σχετικά με όλα τα υπόλοιπα (εκτός από ΜΕΓΑΛΟ. και ΣΕ), Όπως φαίνεται στον πίνακα. 10.3.

Πίνακας 10.3.

Μέθοδος Daekstra (τρίτο βήμα)

Επιλεγμένος

Τρόπος επιλεγμένης κορυφής

Μη επιλεγμένη κορυφή

Απόσταση από τη διαφορά ΜΕΓΑΛΟ. Μέσω της κορυφής N πριν Πείσμα ΣΟΛ. Εξίσου, 18 υπό όρους μονάδες. Αυτή η απόσταση είναι μεγαλύτερη από την απόσταση Lb + bg. \u003d 16 συμβατικές μονάδες, ως αποτέλεσμα της οποίας δεν λαμβάνεται υπόψη αργότερα. Συνεχιζόμενες παρόμοιες κατασκευές, θα είμαστε tabl. 10.4. Έτσι βρέθηκε το μήκος της μικρότερης διαδρομής μεταξύ των κορυφών. ΜΕΓΑΛΟ. και ΡΕ. (44 συμβατικές μονάδες).

Η διαδρομή διαδρομής προσδιορίζεται ως εξής. Εκτελούμε την άποψη επιστροφής από την τελική κορυφή στην αρχική. Θεωρούμε τη στήλη που αντιστοιχεί στην κορυφή, από κάτω προς τα πάνω και να διορθώσει την πρώτη εμφάνιση της ελάχιστης τιμής. Στη στήλη που αντιστοιχεί στην κορυφή ΡΕ, Για πρώτη φορά, το ελάχιστο μήκος των υπό όρους μονάδες εμφανίστηκε από το κάτω μέρος στην τέταρτη γραμμή. Αυτή η γραμμή υποδεικνύει την κορυφή ΜΙΚΡΟ, στην οποία πηγαίνουν, δηλ. Στη συνέχεια πρέπει να εξετάσετε τη στήλη που αντιστοιχεί στην κορυφή ΜΙΚΡΟ.

Πίνακας 10.4.

Επιλεγμένη κορυφή

Τρόπος επιλεγμένης κορυφής

Μη επιλεγμένη κορυφή

Σε αυτή τη στήλη, το ελάχιστο μήκος ίσο με 27 συμβατικές μονάδες υποδεικνύει την ακόλουθη κορυφή ΣΟΛ, που πηγαίνει να πάει, κλπ. Έτσι, παίρνουμε την τροχιά του τρόπου: (L, B, G, S, D).

Παράδειγμα 8. Βρείτε τη συντομότερη διαδρομή στη στήλη μεταξύ της 1ης και 7ης κορυφής (εικ. 10.8).

Προσδιορίστε (Πίνακας 10.5) η ακόλουθη επιλεγμένη κορυφή, η απόσταση στην οποία η μικρότερη και συνδεδεμένη άκρη με μία από τις κορυφές που ανήκουν στο σύνολο των μη επιλεγμένων (αυτή η απόσταση θα είναι ίση με την απόσταση από την επιλεγμένη κορυφή συν το μήκος της πλευράς) .


Σύκο. 10.8. Γραφική παράσταση (αλλά) και την αντίστοιχη στρατιωτική μήτρα (σι)

Πίνακας υλοποίηση της μεθόδου Daekstra

Πίνακας 10.5.

Επιλεγμένος

Τρόπος επιλεγμένης κορυφής

Μη επιλεγμένη κορυφή

u 6.

Εκτελούμε την άποψη επιστροφής από την τελική κορυφή στην αρχική.

Θεωρούμε τη στήλη που αντιστοιχεί στην κορυφή, από κάτω προς τα πάνω και να διορθώσει την πρώτη εμφάνιση της ελάχιστης τιμής. Η συντομότερη διαδρομή θα είναι ίση με (V 7 - V 5 - V 2 - Y ().

και Ερωτήσεις ελέγχου

  • 1. Ποια είναι η θεωρητική πολυπλοκότητα των αλγορίθμων: η κατασκευή ξύλινων λύσεων, δυναμικός προγραμματισμός και ο Deeksters;
  • 2. Ποιο είναι το χαρακτηριστικό της χρήσης ξύλινων διαλυμάτων για ένα προσανατολισμένο και μη προσανατολισμένο γράφημα;
  • 3. Κατά την επίλυση των εφαρμοσμένων εργασιών, οι αλγόριθμοι ορισμός στη στήλη μικρότερης απόστασης μεταξύ των καθορισμένων κορυφών;
  • 4. Μπορεί να εφαρμοστεί ο αλγόριθμος Daekstra να καθορίσει τη μικρότερη απόσταση στο προσανατολισμένο γράφημα;
  • 5. Πώς λειτουργεί ο αλγόριθμος του Daekstra;
  • 6. Πώς λειτουργεί ο δυναμικός αλγόριθμος προγραμματισμού σε σχέση με το καθήκον ορισμού στη μικρότερη απόσταση μεταξύ των κορυφών;

Ένα προσανατολισμένο ή μη προσανατολισμένο αιωρούμενο γράφημα με κορυφές και νευρώσεις. Τα βάρη όλων των Röbembers είναι μη αρνητικότητα. Ορισμένες κορυφαίες εκκίνησης της κορυφής υποδεικνύονται. Απαιτείται να βρείτε τα μήκη των συντομότερων διαδρομών από την κορυφή σε όλες τις άλλες κορυφές, καθώς και να παρέχουν έναν τρόπο εξόδου των ίδιων τα συντομότερα μονοπάτια.

Αυτή η εργασία ονομάζεται "καθήκον των συντομότερων διαδρομών με μια ενιαία πηγή" (Μονό-source το συντομότερο πρόβλημα διαδρομών).

Αλγόριθμος

Περιγράφει τον αλγόριθμο που πρότεινε έναν ολλανδικό ερευνητή Dyacstra (Dijkstra) το 1959

Θα ξεκινήσουμε μια σειρά από την οποία για κάθε κορυφή θα αποθηκεύσουμε το τρέχον μήκος της μικρότερης διαδρομής από το Β. Αρχικά, για όλες τις άλλες κορυφές, αυτό το μήκος είναι ίσο με το άπειρο (όταν εφαρμόζεται σε έναν υπολογιστή, συνήθως επιλέγεται ως άπειρο μόνο ένα αρκετά μεγάλο αριθμό, εν γνώσει του πιθανού μήκους διαδρομής):

Επιπλέον, για κάθε κορυφή θα αποθηκεύσουμε, εξακολουθεί να σημειωθεί ή όχι, δηλ. Επικεφαλής της συστοιχίας Boolean. Αρχικά, όλες οι κορυφές δεν έχουν επισημανθεί, δηλ.

Ο ίδιος ο ιταλικός αλγόριθμος αποτελείται από επαναλήψεις. Κατά την επόμενη επανάληψη, μια κορυφή επιλέγεται με το μικρότερο μέγεθος μεταξύ δεν έχει ακόμη επισημανθεί, δηλαδή:

(Είναι σαφές ότι η αρχή έναρξης θα επιλεγεί στην πρώτη επανάληψη.)

Η κορυφή που επιλέγεται με αυτόν τον τρόπο σημειώνεται σήμανση. Στη συνέχεια, στην τρέχουσα επανάληψη, από τις κορυφές Χαλάρωση: Θεωρούμε όλες τις πλευρές που προέρχονται από την κορυφή και για κάθε μια τέτοια κορυφή ο αλγόριθμος προσπαθεί να βελτιώσει την αξία. Αφήστε το μήκος της τρέχουσας πλευράς να είναι ίσο, στη συνέχεια με τη μορφή κώδικα, η χαλάρωση μοιάζει με:

Αυτό είναι το τρέχον άκρα επανάληψης, ο αλγόριθμος προχωρά στην επόμενη επανάληψη (η κορυφή επιλέγεται ξανά με τη χαμηλότερη τιμή, η χαλάρωση παράγεται από αυτό, κλπ.). Ταυτόχρονα, μετά από όλα, μετά τις επαναλήψεις, όλες οι κορυφές του γραφήματος θα επισημανθούν και ο αλγόριθμος ολοκληρώνει το έργο του. Υποστηρίζεται ότι οι τιμές που βρέθηκαν είναι τα επιθυμητά μήκη των συντομότερων διαδρομών από το Β.

Αξίζει να σημειωθεί ότι, αν όχι όλες οι κορυφές του γραφήματος είναι εφικτές από την κορυφή, οι τιμές για αυτούς θα παραμείνουν ατελείωτες. Είναι σαφές ότι οι λίγες πρόσφατες επαναλήψεις του αλγορίθμου θα επιλέξουν απλώς αυτές τις κορυφές, αλλά δεν θα υπάρξει χρήσιμη δουλειά για την παραγωγή αυτών των επαναλήψεων (δεδομένου ότι η ατελείωτη απόσταση δεν θα είναι σε θέση να αποτρέψει άλλες, ακόμη ατελείωτες αποστάσεις). Επομένως, ο αλγόριθμος μπορεί να σταματήσει αμέσως μόλις η επιλεγμένη κορυφή παίρνει την κορυφή με απεριόριστη απόσταση.

Επαναφορά μονοπατιών. Φυσικά, συνήθως πρέπει να γνωρίζετε όχι μόνο το μήκος των συντομότερων διαδρομών, αλλά και να πάρετε τα ίδια τα μονοπάτια. Δείχνουμε πώς να εξοικονομούμε πληροφορίες για την επακόλουθη αποκατάσταση της μικρότερης διαδρομής σε οποιαδήποτε κορυφή. Για αυτό το αρκετά καλούμενο Προγόνους συστοιχιών: Array στο οποίο ο αριθμός κορυφής αποθηκεύεται για κάθε κορυφή, η οποία είναι η προτελευταία στη συντομότερη διαδρομή προς την κορυφή. Χρησιμοποιεί το γεγονός ότι αν πάρουμε τη συντομότερη διαδρομή σε κάποια κορυφή και στη συνέχεια αφαιρέστε την τελευταία κορυφή από αυτό το μονοπάτι, θα πάρετε ένα μονοπάτι που τελειώνει με κάποια κορυφή και αυτή η διαδρομή θα είναι η συντομότερη για την κορυφή. Έτσι, αν απολαμβάσουμε αυτή τη σειρά των προγόνων, η συντομότερη διαδρομή μπορεί να αποκατασταθεί, απλά να πάρετε τον πρόγονο από την τρέχουσα κορυφή κάθε φορά μέχρι να φτάσουμε στην αρχή έναρξης - έτσι παίρνουμε την επιθυμητή σύντομη διαδρομή, αλλά καταγράφονται στο αντίστροφο Σειρά. Έτσι η συντομότερη διαδρομή προς την κορυφή είναι:

Παραμένει να καταλάβουμε πώς να οικοδομήσουμε αυτή τη σειρά των προγόνων. Ωστόσο, αυτό γίνεται πολύ απλά: με κάθε επιτυχημένη χαλάρωση, δηλ. Όταν μια απόσταση από κάποια κορυφή βελτιώνεται από την επιλεγμένη κορυφή, καταγράφουμε ότι ο πρόγονος της κορυφής είναι η κορυφή:

Απόδειξη

Βασική δήλωσηη οποία βασίζεται στην ορθότητα του αταξινομικού αλγορίθμου, τα ακόλουθα. Υποστηρίζεται ότι μετά από κάθε αιχμή επισημαίνεται, η τρέχουσα απόσταση από αυτό είναι ήδη η συντομότερη και, κατά συνέπεια, δεν θα αλλάξει πια.

Απόδειξη Θα παράγουμε με επαγωγή. Για την πρώτη επανάληψη, η δικαιοσύνη είναι προφανής - για τις κορυφές που έχουμε, το οποίο είναι το μήκος της μικρότερης πορείας προς αυτήν. Τώρα αφήστε αυτή τη δήλωση να εκπληρωθεί για όλες τις προηγούμενες επαναλήψεις, δηλ. όλες τις ήδη σημειωμένες κορυφές. Αποδείχουμε ότι δεν παραβιάζεται μετά την τρέχουσα επανάληψη. Αφήστε την κορυφή που επιλέχθηκε στην τρέχουσα επανάληψη, δηλ. Την κορυφή που ο αλγόριθμος πρόκειται να επισημάνει. Αποδείχουμε ότι είναι πραγματικά ίσο με το μήκος της μικρότερης διαδρομής σε αυτό (δηλώσουμε αυτό το μήκος μέσω).

Εξετάστε το συντομότερο μονοπάτι στην κορυφή. Είναι σαφές ότι αυτός ο τρόπος μπορεί να χωριστεί σε δύο τρόπους: που αποτελείται από μόνο σημειωμένες κορυφές (τουλάχιστον η αρχή έναρξης θα είναι με αυτόν τον τρόπο) και το υπόλοιπο της διαδρομής (μπορεί επίσης να περιλαμβάνει σημαντικές κορυφές, αλλά αρχίζει με απροστάτευτο) . Δηλώστε με την πρώτη κορυφή του μονοπατιού και μέσα από τις τελευταίες κορυφές του μονοπατιού.

Πρώτα αποδεικνύουμε τη δήλωση μας για την κορυφή, δηλ. Αποδεικνύουμε την ισότητα. Ωστόσο, αυτό είναι σχεδόν προφανές: τελικά, σε μια από τις προηγούμενες επαναλήψεις, επιλέξαμε την κορυφή και την χαλάρωση από αυτό. Δεδομένου ότι (λόγω της επιλογής της κορυφής), η συντομότερη διαδρομή είναι να ισούται με τη συντομότερη διαδρομή σε ένα πλεονέκτημα Plus, στη συνέχεια, όταν εκτελεί χαλάρωση από την τιμή, είναι πραγματικά εδραιωμένη στην επιθυμητή τιμή.

Λόγω της μη αρνητικότητας των τιμών του Röber, το μήκος της μικρότερης διαδρομής (και απλά αποδεδειγμένο) δεν υπερβαίνει το μήκος της μικρότερης διαδρομής προς την κορυφή. Δεδομένου ότι (μετά από όλα, ο αλγόριθμος Daekstra δεν μπόρεσε να βρει ένα μικρότερο δρόμο από ό, τι είναι δυνατόν καθόλου), ως αποτέλεσμα, έχουμε τη σχέση:

Από την άλλη πλευρά, καθώς και οι δύο κορυφές δεν έχουν καταχωρηθεί, καθώς η κορυφή επιλέχθηκε στην τρέχουσα επανάληψη και όχι μια κορυφή, τότε παίρνουμε μια άλλη ανισότητα:

Από αυτές τις δύο ανισότητες, ολοκληρώνουμε την ισότητα και στη συνέχεια λαμβάνουμε από αυτά που διαπιστωθούμε σε αυτές τις αναλογίες:

q.e.d.

Εκπτώσεις

Έτσι, ο αλγόριθμος Daekstra είναι επαναληπτικός, ο καθένας από τους οποίους επιλέγεται από την περιττή κορυφή με τη μικρότερη τιμή, αυτή η κορυφή είναι επισημασμένη και στη συνέχεια εμφανίζονται όλες οι νευρώσεις που προέρχονται από αυτή την κορυφή και μια προσπάθεια γίνεται κατά μήκος κάθε άκρου για να βελτιωθεί τιμή στο άλλο άκρο της άκρης.

Ο χρόνος λειτουργίας του αλγορίθμου γίνεται:

Με την απλούστερη εφαρμογή αυτών των δραστηριοτήτων για αναζήτηση κορυφαίων, οι λειτουργίες θα δαπανηθούν και σε μια χαλάρωση - λειτουργίες και ο τελικός Ασυμπτωτικά Ο αλγόριθμος είναι:

Εκπτώσεις:

Const int inf \u003d 1000000000; int main () (int n, ... ανάγνωση n ... διάνυσμα< vector < pair< int ,int > \u003e\u003e g (n); ... Γράφημα ανάγνωσης ... int s \u003d ...; // Ξεκινήστε την κορυφή Διάνυσμα< int > d (n, inf), p (n); D [s] \u003d 0; Διάνυσμα< char > u (n); για (int i \u003d 0; i< n; ++ i) { int v = - 1 ; for (int j= 0 ; j< n; ++ j) if (! u[ j] && (v == - 1 || d[ j] < d[ v] ) ) v = j; if (d[ v] == INF) break ; u[ v] = true ; for (size_t j= 0 ; j< g[ v] .size () ; ++ j) { int to = g[ v] [ j] .first , len = g[ v] [ j] .second ; if (d[ v] + len < d[ to] ) { d[ to] = d[ v] + len; p[ to] = v; } } } }

Εδώ το γράφημα αποθηκεύεται με τη μορφή λίστας γειτνιστών: Για κάθε λίστα κορυφής περιέχει μια λίστα με τους Ryeobers που προέρχονται από αυτή την κορυφή, δηλ. Η λίστα των ζευγών\u003e, όπου το πρώτο στοιχείο του ζεύγους είναι η κορυφή, η οποία οδηγεί την πλευρά, και το δεύτερο στοιχείο είναι το βάρος της πλευράς.

Algorimtm Dejekstra (αλγόριθμος Dijkstra) - Αλγόριθμος στα γραφήματα, εφευρέθηκε από τον ολλανδό επιστήμονα Ε. Dyakstroy το 1959. Βρίσκει τη μικρότερη απόσταση από μια από τις κορυφές του γραφήματος σε όλους τους άλλους. Ο αλγόριθμος λειτουργεί μόνο για γραφήματα χωρίς αρνητικό Βάρος. Ο αλγόριθμος χρησιμοποιείται ευρέως στον προγραμματισμό και τις τεχνολογίες, για παράδειγμα, χρησιμοποιεί το πρωτόκολλο OSPF για την εξάλειψη των οδών δαχτυλιδιών. Επίσης γνωστό ως "πρώτα από τη συντομότερη διαδρομή" (συντομότερη διαδρομή πρώτα).

Ο αλγόριθμος Daekstra λύνει το πρόβλημα των συντομότερων διαδρομών από μια κορυφή για ένα αιωρούμενο γράφημα g \u003d (v, ε) με την αρχική κορυφή s, στην οποία τα βάρη όλων των άκρων είναι μη αρνητικές ((u, v); 0 για όλα (u, v) e). Στην περίπτωση που οι άκρες του γραφήματος δεν είναι ίσες, συνιστάται η χρήση αυτού του αλγορίθμου.

Διατύπωση εργασίας.Υπάρχει ένα γράφημα. Ορισμένες από τις κορυφές του ενδείκνυται ως κορυφή 1. Είναι απαραίτητο να βρεθούν οι ελάχιστες διαδρομές από την κορυφή 1 σε κάθε μία από τις κορυφές του γραφήματος. Ο ελάχιστος τρόπος θα ονομάζεται διαδρομή με ελάχιστη ποσότητα τιμών κατά μήκος της διαδρομής. Τιμή Ας καλέσουμε έναν μη αρνητικό αριθμό της ζύγισης της πλευράς.

Την ιδέα του αλγορίθμου.Η ιδέα βασίζεται στην ακόλουθη προφανή δήλωση: Αφήστε την ελάχιστη διαδρομή από την κορυφή αλλά Στην κορυφή του Β. Και αφήστε την κορυφή Β να συνδέεται με έναν ορισμένο αριθμό κορυφών I. Δηλώνει η τιμή του μονοπατιού από την κορυφή Β στην κορυφή I. Επιλέξτε από την ελάχιστη τιμή C i. Στη συνέχεια, η ελάχιστη συνέχιση της διαδρομής από το σημείο Β θα περάσει από την επιλεγμένη τιμή.

Αυτή η δήλωση πραγματικά δεν απαιτεί απόδειξη. Και ρέει μια πολύ σοβαρή συνέπεια. Αφήστε να υπάρχουν πολλές κορυφές μέσω των οποίων ήδη υφίστανται ελάχιστες διαδρομές. Ένα τέτοιο σύνολο είναι εγγυημένο, αυτή είναι μια κορυφή 1. Η έγκριση που διατυπώνεται παραπάνω σάς επιτρέπει να προσθέσετε στο ήδη υπάρχον σύνολο κορυφών (τότε θα τα καλέσετε να διατεθούν) μια άλλη κορυφή και, αφού μετράνε τον αριθμό των κορυφών, φυσικά, Στη συνέχεια, για τον τελικό αριθμό βημάτων, όλες οι κορυφές του γραφήματος θα είναι αφιερωμένες και αυτό θα είναι μια λύση.

Η ουσία του αλγορίθμου Daekstra και βρίσκεται στη διαδικασία προσθήκης άλλης κορυφής σε μια ποικιλία επιλεγμένων. Αυτή η διαδικασία αποτελείται από δύο βήματα:

1. Δημιουργούμε μια πληθώρα των επιφανειακών κορυφών που διατίθενται και βρίσκονται μεταξύ της κορυφής τους με τη χαμηλότερη τιμή. Η κορυφή της κορυφής προστίθεται στο καθορισμένο.

2. Δημιουργούμε ένα σύνολο κορυφών επιφανειών που επιλέγονται και καθορίζουμε νέες τιμές για αυτούς. Η νέα τιμή της κορυφής είναι η ελάχιστη τιμή του μονοπατιού από μια ποικιλία ειδικών κορυφών σε αυτή την κορυφή. Μια νέα τιμή είναι χτισμένη:

ένα. Για την ατενισμένη κορυφή σε μια ποικιλία επιλεγμένων, προσδιορίζεται ένα υποσύνολο των κορυφών των περιστατικών.

σι. Για κάθε κορυφή της επιλεγμένης υποσύνησης, προσδιορίζεται η τιμή της διαδρομής προς αυτό.

ντο. Η ελάχιστη τιμή προσδιορίζεται. Αυτή η τιμή γίνεται τιμή κορυφής.

Ο αλγόριθμος λειτουργεί με δύο τύπους τιμών: η τιμή της πλευράς και η τιμή της κορυφής. Οι τιμές των τιμών είναι σταθερή τιμή. Οι τιμές των κορυφών επανυπολογίζονται συνεχώς. Η έννοια αυτών των τιμών ποικίλλει. Η τιμή της άκρης είναι η τιμή της μετάβασης από την κορυφή στην κορυφή που συνδέεται με αυτή την άκρη. Και η τιμή της κορυφής είναι η τιμή της ελάχιστης πορείας. Ένα άλλο σημαντικό σημείωμα αφορά τον επανυπολογισμό των προκαταρκτικών τιμών. Στην πραγματικότητα, έχει νόημα να υπολογίσουμε εκ νέου τις προκαθορισμένες τιμές μόνο για τις κορυφές που συνδέονται με την κορυφή που προστίθενται στο σύνολο που διατίθενται στο τελευταίο βήμα, δεδομένου ότι για άλλες κορυφές δεν υπάρχει λόγος αλλαγής της τιμής πριν από την τιμή.

Είναι γνωστό ότι όλες οι τιμές (για παράδειγμα, τα μαξιλάρια ή τα ταξίδια) είναι μη αρνητικά. Βρείτε το μικρότερο κόστος της διαδρομής 1-\u003e i για όλα i \u003d 1. n κατά τη διάρκεια o (n2).

Στη διαδικασία λειτουργίας του αλγορίθμου, ορισμένες πόλεις θα απομονωθούν (στην αρχή - μόνο η πόλη 1, στο τέλος - όλα). Εν:

Για κάθε αφοσιωμένη πόλη i, το χαμηλότερο κόστος της διαδρομής 1-\u003e i αποθηκεύεται. Είναι γνωστό ότι το ελάχιστο επιτυγχάνεται με τον τρόπο που διέρχεται μόνο μέσω των ειδικών πόλεων.

Για κάθε μη ανακαλυφθείσα πόλη I, το μικρότερο κόστος της διαδρομής 1-\u003e i αποθηκεύεται, στην οποία μόνο οι επισημασμένες πόλεις χρησιμοποιούνται ως ενδιάμεσα.

Πολλές αφιερωμένες πόλεις επεκτείνονται με βάση την ακόλουθη παρατήρηση: Εάν μεταξύ όλων των αχρησιμοποίητων πόλεων, για να πάρετε το ένα για το οποίο ο αποθηκευμένος αριθμός είναι ελάχιστος, τότε αυτός ο αριθμός είναι η πραγματική μικρότερη τιμή. Στην πραγματικότητα, ας υπάρχει μικρότερος τρόπος. Εξετάστε την πρώτη μη προηγούμενη πόλη σε αυτό το μονοπάτι - το μονοπάτι είναι μεγαλύτερο πριν! (Δεν υπάρχει αρνητικότητα των τιμών εδώ.)

Προσθέτοντας την επιλεγμένη πόλη στο αφιερωμένο, πρέπει να προσαρμόσουμε τις πληροφορίες που είναι αποθηκευμένες για ασυνήθιστες πόλεις. Ταυτόχρονα, αρκεί να εξεταστεί μόνο τα μονοπάτια στα οποία η νέα πόλη είναι το τελευταίο σημείο της μεταμόσχευσης, και είναι εύκολο να το κάνουμε, αφού γνωρίζουμε ήδη το ελάχιστο κόστος του μονοπατιού σε μια νέα πόλη.

Με άλλα λόγια, κάθε κορυφή του V είναι συγκρίσιμη με την ετικέτα - την ελάχιστη γνωστή απόσταση από αυτή την κορυφή σε α. Ο αλγόριθμος λειτουργεί βήμα προς βήμα - σε κάθε βήμα "επισκέπτεται" μια κορυφή και προσπαθεί να μειώσει τις ετικέτες. Η λειτουργία του αλγορίθμου ολοκληρώνεται όταν επισκέπτονται όλες οι κορυφές.

Αρχικοποίηση. Ετικέτα της ίδιας της κορυφής ΕΝΑ. Ίση βασίζεται 0 , Ετικέτες των υπόλοιπων κορυφών - άπειρο. Αυτό αντανακλά το γεγονός ότι αποστάσεις από ΕΝΑ. Άγνωστη σε άλλες κορυφές. Όλες οι κορυφές του γραφήματος χαρακτηρίζονται ως σύμπαν.

Αλγόριθμος βήμα. Εάν επισκέπτονται όλες οι κορυφές, ο αλγόριθμος ολοκληρώνεται. Διαφορετικά, η κορυφή δεν έχει επισκεφθεί ότι δεν έχει επισκεφθεί ακόμα u.με ελάχιστη ετικέτα. Εξετάζουμε όλα τα είδη διαδρομών στις οποίες u. Είναι το προτελευταίο στοιχείο. Στίχους που συνδέονται με την κορυφή u. Ράβες, ας καλέσουμε τους γείτονες αυτής της κορυφής. Για κάθε γείτονα, σκεφτείτε ένα νέο μήκος διαδρομής ίσο με το άθροισμα του σημερινού σήματος u. και το μήκος της σύνδεσης των πλευρών u. Με αυτόν τον γείτονα. Εάν το μήκος που προκύπτει είναι μικρότερο από την ετικέτα του γείτονα, αντικαταστήστε την ετικέτα αυτό το μήκος. Εξέτασε όλους τους γείτονες, σημειώστε την κορυφή u. Όπως επισκεφθείτε και επαναλάβετε ένα βήμα.

Δεδομένου ότι ο αλγόριθμος Daekstra όποτε επιλέγει το συντομότερο δικαίωμα επεξεργασίας της κορυφής με τη μικρότερη αξιολόγηση της μικρότερης διαδρομής, μπορεί να ειπωθεί ότι αναφέρεται σε άπληστους αλγόριθμους.

Περιγράφουμε λεπτομερέστερα το σχέδιο του έργου του αλγορίθμου Daekstra.

Ο αλγόριθμος χρησιμοποιεί τρεις πίνακες N (\u003d αριθμός κορυφών δικτύου) αριθμούς το καθένα. Ο πρώτος πίνακας A A είναι ετικέτες με δύο τιμές: 0 (η κορυφή δεν έχει ακόμη ληφθεί υπόψη) και 1 (η κορυφή έχει ήδη ληφθεί υπόψη). Ο δεύτερος πίνακας Β περιέχει αποστάσεις - τρέχουσες συντομότερες φυλές από την αντίστοιχη κορυφή. Ο τρίτος πίνακας C περιέχει τους αριθμούς των κορυφών - το K-TH στοιχείο με το [K] υπάρχει μια σειρά από την προτελευταία κορυφή στην τρέχουσα πορεία της αναθερότητας από το VI VK. Οι αποστάσεις μήτρας D ρυθμίζουν το μήκος του doug d; Εάν δεν υπάρχει τέτοιο τόξο, τότε το D αντιστοιχεί σε μεγάλο αριθμό Β, ίσο με το "άπειρο μηχάνημα".

Τώρα μπορείτε να περιγράψετε:

1. (Αρχικοποίηση). Στον κύκλο από 1 έως το n συμπληρώστε τη διάταξη ενός μηδενικού. Συμπληρώστε τον αριθμό I αριθ. C; Για να μεταφέρετε την I-TH σειρά της μήτρας D έως τον πίνακα Β, A [I]: \u003d 1; C [I]: \u003d 0 (i - ο αριθμός της αρχικής κορυφής)

2. (κοινό βήμα). Υπάρχουν τουλάχιστον μεταξύ των μη γνωστών (δηλ. Αυτά τα Κ, για τα οποία ένα [k] \u003d 0). Αφήστε το ελάχιστο να επιτευχθεί στον δείκτη J, δηλ. B [j]<=B [k] Затем выполняются следующие операции: A [j]: =1; если B [k] >Β [J] + D, κατόπιν (b [k]: \u003d b [j] + d; c [k]: \u003d j) (η κατάσταση σημαίνει ότι η διαδρομή VI. VK είναι μεγαλύτερη από τη διαδρομή VI. VJ VK) . (Εάν έχει επισημανθεί όλα τα [K], τότε το μήκος διαδρομής από το VI σε VK είναι ίσο με το B [k]. Τώρα είναι απαραίτητο) να καταχωρίσετε τις κορυφές που περιλαμβάνονται στη συντομότερη διαδρομή).

3. (έκδοση απάντησης). (Η διαδρομή από το VI σε VK εκδίδεται με την αντίστροφη σειρά της ακόλουθης διαδικασίας :)

2. ΣΗΜΕΙΩΣΗ Ζ;

3. z: \u003d C [z]. Εάν z \u003d o, τότε το τέλος, αλλιώς πηγαίνετε στο 3.2.

Για να εκτελέσετε τον αλγόριθμο, πρέπει να δείτε μια συστοιχία Β στοιχεία n, δηλ. Ο αλγόριθμος παρατιθέσεως έχει τετραγωνική πολυπλοκότητα: O (N2).

Παρακάτω είναι ένα διάγραμμα μπλοκ του αλγορίθμου Deiquistra (βλέπε σχήμα 2).

Εικ.2. Block Diagram Daekstra Αλγόριθμος

Στην αρχή του αλγορίθμου, η απόσταση για την αρχική κορυφή θεωρείται μηδέν, και όλες οι άλλες αποστάσεις γεμίζουν με ένα μεγάλο θετικό αριθμό (το οποίο έρχεται η μέγιστη δυνατή διαδρομή στη στήλη). Η πλατφόρμα σημαίας είναι γεμάτη με μηδενικά. Στη συνέχεια ξεκινά ο κύριος κύκλος.

Σε κάθε βήμα του κύκλου, αναζητούμε μια κορυφή με ελάχιστη απόσταση και ισότιμη μηδενική σημαία. Στη συνέχεια, ορίζουμε τη σημαία σε αυτό στο 1 και ελέγξτε όλες τις γειτονικές κορυφές μαζί του. Εάν υπάρχει μεγαλύτερη απόσταση σε αυτήν από την ποσότητα της απόστασης από την τρέχουσα κορυφή και το μήκος της πλευράς, στη συνέχεια το μειώστε. Ο κύκλος ολοκληρώνεται όταν οι σημαίες όλων των κορυφών γίνονται ίσες με 1.

Λύστε το έργο της εύρεσης της μικρότερης διαδρομής του αλγορίθμου Daekstra.
Βρείτε τη συντομότερη διαδρομή από το X0 στο X7. Ο αριθμός καθορίζεται από τα στοιχεία του Matrix Κόστος

Κατασκευάστε αυτό το γράφημα


Ας ξεκινήσουμε με το στοιχείο X0 και το αναθέτουμε μια ετικέτα 0, σκεφτείτε όλους τους γείτονές του, γιατί Δεν υπάρχει ακόμα σημείωση, τους αναθέτετε τα αντίστοιχα μήκη:


Όλοι οι γείτονες x0 θεωρούνται, το επισημαίνουμε και πηγαίνουμε στην κορυφή του x1. Οι γείτονές του x0, x2, x4, αλλά x0 σηματοδοτούν, δεν το θεωρούν. Για το x2: , Αφήστε την ετικέτα.

Για το x4: Αντικαθιστώντας την ετικέτα. Όλοι οι γείτονες της κορυφής X1 θεωρούνται, το επισημάμαστε


Πηγαίνετε στην κορυφή του x2. Οι γείτονές τους x0, x1, x3, x4, x5, x6, αλλά x0, x1 σημειώνονται, μην τα θεωρείτε.
Για το x3: , Αφήστε την ετικέτα.
Για το x5: Αντικαθιστώντας την ετικέτα.
Για το x4: , Αφήστε την ετικέτα.
Για το x6: Αντικαθιστώντας την ετικέτα.
Όλοι οι γείτονες της κορυφής του X2 θεωρούνται, το επισημαίνουμε.


Πηγαίνετε στην κορυφή x3. Οι γείτονες X0, x2, x6, αλλά x0, x2 επισημαίνονται, μην τα θεωρείτε.
Για το x6: , Αφήστε την ετικέτα.
Όλοι οι γείτονες της κορυφής του X3 θεωρούνται, το επισημάνε.


Πηγαίνετε στην κορυφή του x4. Οι γείτονες X1, x2, x5, x7, αλλά x1, x2, σημειώνονται, μην τα θεωρείτε.
Για το x5: Αντικαθιστώντας την ετικέτα.
Για το x7: Αντικαθιστώντας την ετικέτα.
Όλοι οι γείτονες της κορυφής του X4 θεωρούνται, το επισημάνε.


Πηγαίνετε στην κορυφή του x5. Οι γείτονές τους x2, x4, x6, x7, αλλά x2, x2, δεν τα θεωρούν.
Για το x6: , Αφήστε την ετικέτα.
Για το x7: , Αφήστε την ετικέτα.
Όλοι οι γείτονες της κορυφής του X5 θεωρούνται, το επισημάνε.


Πηγαίνετε στην κορυφή του x6. Οι γείτονές τους x2, x3, x5, x7, αλλά x2, x3, x5, δεν τα θεωρούν.
Για το x7: , Αφήστε την ετικέτα.
Όλες οι κορυφές της κορυφής του X6 θεωρούνται, το επισημαίνουμε. Και επισημάσαμε το υπόλοιπο X7, όλες οι κορυφές θεωρούνται.


Συμπέρασμα: Η μικρότερη διαδρομή του x0 τους στο x7 έχει μήκος 101, αυτή η διαδρομή: x7-x4-x1-x0.

5.4.3. Την πρόκληση της μικρότερης πορείας και του αλγορίθμου του Δίπους της απόφασής της

Αφήστε το σύνολο του Orgraf ΣΟΛ.(V., ΜΙ.), με κάθε τόξο του οποίου τοποθετείται σύμφωνα με τον αριθμό
που ονομάζεται Τόξο μακρύς.

Ορισμός. Λένα Η διαδρομή ονομάζεται το άθροισμα των μέσων τόξου που συνθέτουν αυτή τη διαδρομή. Το καθήκον της μικρότερης διαδρομήςΒάζει έτσι.

Επιλογή 1. Βρείτε τα μήκη των συντομότερων διαδρομών (τρόπους ελάχιστου μήκους) και τα ίδια τα μονοπάτια από την σταθερή κορυφή ΜΙΚΡΟ. σε όλες τις άλλες κορυφές του γραφήματος.

Επιλογή 2. Βρείτε τα μήκη των συντομότερων διαδρομών και τα ίδια τα μονοπάτια μεταξύ όλων των ζευγών των κορυφών αυτού του γράφου.

Εάν υπάρχουν αρνητικά τόξα στη στήλη, η εργασία ενδέχεται να μην έχει λύσεις (θα χάσει το νόημα). Αυτό οφείλεται στο γεγονός ότι το περίγραμμα του αρνητικού μήκους μπορεί να υπάρχει στη στήλη. Η παρουσία κυκλωμάτων αρνητικού μήκους σημαίνει ότι το μήκος διαδρομής μπορεί να γίνει ίση
. Και αν δεν υπάρχουν κυκλώματα αρνητικού μήκους, τότε οι μικρότερες διαδρομές υπάρχουν και κάθε μικρότερο μονοπάτι είναι μια απλή αλυσίδα.

Σημειώστε ότι εάν υπάρχει η συντομότερη διαδρομή, τότε οποιοδήποτε από αυτά είναι, είναι επίσης η συντομότερη διαδρομή μεταξύ των αντίστοιχων κορυφών.

Αλγόριθμος Daekstra Επίλυση του προβλήματος της μικρότερης διαδρομής.

Ο αλγόριθμος λειτουργεί με τόξα θετικού μήκους και καθορίζει τις μικρότερες διαδρομές από την σταθερή κορυφή ΜΙΚΡΟ. σε όλες τις άλλες κορυφές του γραφήματος. Υποδηλώνει αυτές τις κορυφές v. 1 , v. 2 ,…, v. Ν. .

Ορισμός. Ας καλέσουμε την κορυφή u. που βρίσκεται πιο κοντά στην κορυφή ΜΙΚΡΟ.από την κορυφή v.Εάν το μήκος της μικρότερης διαδρομής από ΜΙΚΡΟ. πριν u. λιγότερο από το μήκος της μικρότερης διαδρομής από ΜΙΚΡΟ. πριν v.. Θα πούμε ότι οι κορυφές u. και v. Εξισώ Απο πάνω ΜΙΚΡΟ.Εάν τα μήκη των συντομότερων διαδρομών από ΜΙΚΡΟ. πριν u. και από ΜΙΚΡΟ. πριν v. ταιριάξει.

Ο αλγόριθμος Daekstra βελτιώνουν με συνέπεια τις κορυφές του γραφήματος με την έννοια της εγγύτητας με την κορυφή ΜΙΚΡΟ. και με βάση τις ακόλουθες βασικές αρχές.

Εάν τα μήκη του τόξου είναι θετικοί αριθμοί, τότε

    Πλησιέστερο Κ. ΜΙΚΡΟ. Κορυφή - αυτή τον εαυτό της. Μήκος της μικρότερης διαδρομής από ΜΙΚΡΟ. πριν ΜΙΚΡΟ. ίσο με το 0;

    Πλησιέστερο Κ. ΜΙΚΡΟ. κορυφή ΜΙΚΡΟ., Ψέματα από ΜΙΚΡΟ. Σε απόσταση ενός τόξου  το συντομότερο από όλες τις καμάρες που αφήνουν την κορυφή ΜΙΚΡΟ.;

    οποιαδήποτε ενδιάμεση κορυφή της μικρότερης διαδρομής από ΜΙΚΡΟ. Σε κάποιες κορυφές v. Βρίσκεται πιο κοντά στο Κ. ΜΙΚΡΟ.από την τελική κορυφή v.;

    Η συντομότερη διαδρομή προς την επόμενη παραγγέλλουσα κορυφή μπορεί να περάσει μόνο μέσω κορυφών που έχει ήδη παραγγείλει.

Αφήστε τον αλγόριθμο να παραγγείλει ήδη τις κορυφές v. 1 , v. 2 v. Κ. . Δηλώνει
,
Το μήκος της μικρότερης διαδρομής προς την κορυφή v. ΕΓΩ. .

Εξετάστε όλα τα τόξα του γραφήματος πηγής που ξεκινούν σε μία από τις κορυφές του σετ.
Και τελειώνει σε μια άλλη μη συνδεδεμένη κορυφές. Για κάθε τέτοιο τόξο, για παράδειγμα
, Υπολογίζω το άθροισμα
. Το ποσό αυτό είναι ίσο με το μήκος της διαδρομής από ΜΙΚΡΟ. σε y.στην οποία η κορυφή v. ΕΓΩ. Υπάρχει μια προτελευταία κορυφή, και το μονοπάτι από ΜΙΚΡΟ. σε v. ΕΓΩ. - το συντομότερο από όλα τα μονοπάτια που συνδέουν ΜΙΚΡΟ. και v. ΕΓΩ. .

Αυτά είναι τα πιο καθορισμένα μήκη όλων των διαδρομών από ΜΙΚΡΟ. Δεν έχουν ακόμη παραγγείλει κορυφές στις οποίες μόνο οι κορυφές είναι ενδιάμεσες κορυφές είναι Κ. Πλησιέστερο Κ. ΜΙΚΡΟ.. Αφήστε το συντομότερο από αυτά τα μονοπάτια να τελειώσει στην κορυφή w.. Επειτα w. και είναι
Με εγγύτητα με το Κ. ΜΙΚΡΟ. κορυφή.

Οι τεχνικά ενέργειες στον αλγόριθμο Daekstra πραγματοποιούνται χρησιμοποιώντας τη συσκευή σήμανσης της κορυφής. Ετικέτα v. δηλώνει πώς
. Οποιαδήποτε ετικέτα είναι ένας αριθμός ίσος με το μήκος κάποιου διαδρομής από ΜΙΚΡΟ. πριν v.. Οι ετικέτες χωρίζονται σε προσωρινή και σταθερή. Σε κάθε βήμα, μόνο μία ετικέτα γίνεται σταθερή. Αυτό σημαίνει ότι η τιμή του είναι ίση με το μήκος της μικρότερης διαδρομής προς την αντίστοιχη κορυφή και αυτή η κορυφή της κορυφής παραγγέλλεται. Ο αριθμός της επόμενης παραγγελίας Vertex δηλώνεται με το γράμμα r.

Περιγραφή του αλγορίθμου.

Βήμα 1. (Αρχική εγκατάσταση). Βάζω
Και σκεφτείτε αυτή τη σταθερή ετικέτα. Βάζω
,
Και σκεφτείτε αυτά τα σημάδια προσωρινά. Βάζω
.

Βήμα 2. (Κοινόχρηστο βήμα). Επαναλαμβάνει Ν. Μόλις εντοπιστούν όλες οι κορυφές του γραφήματος.

Επανυπολογίστε ένα προσωρινό σήμα
Όλες οι διαταραγμένες κορυφές v. ΕΓΩ. που περιλαμβάνει ένα τόξο που αφήνει την κορυφή r, Κατά κανόνα

Επιλέξτε την κορυφή με ελάχιστη ετικέτα χρόνου. Εάν υπάρχουν πολλές τέτοιες κορυφές, επιλέξτε οποιαδήποτε.

Ας είναι w.- Κορυφή με ελάχιστη ετικέτα χρόνου. Παίρνω μια ετικέτα
σταθερή και βάλτε
.

Τα βήματα του αλγορίθμου Daekstra καταρτίζονται βολικά στον πίνακα, κάθε στήλη του οποίου αντιστοιχεί στην κορυφή του γραφήματος. Οι σειρές του πίνακα αντιστοιχούν στην επανάληψη του συνολικού βήματος.

Παράδειγμα. Για γράφημα στο Σχ. 4. Βρείτε τα συντομότερα μονοπάτια από τις κορυφές
σε όλες τις άλλες κορυφές του γραφήματος. Οι πλευρές σημαίνουν δύο πολυκατοικίες τόξου του ίδιου μήκους.

Απόφαση. Στην καρτέλα. 1 Εγγραφή ετικετών Vertex σε κάθε βήμα. Οι μόνιμες ετικέτες σημειώνονται με "+". Ας περιγράψουμε λεπτομερώς πώς υπολογίζονται οι ετικέτες.

    Από τα τόξα Vertex 1 παραβλέπουν τις κορυφές 2, 5, 6. Ανάκληση των ετικετών αυτών των κορυφών και γεμίζουν τη δεύτερη σειρά του πίνακα.

Η κορυφή της κορυφής 6 γίνεται σταθερή,
.

    Από τα Arcs Vertex 6 είναι ακόμα μη συνδεδεμένες κορυφές 2, 5, 8, 9. Επαναδιοίκηση των ετικετών χρόνου τους

Συμπληρώστε 3 σειρές πίνακα. Το ελάχιστο των ετικετών χρόνου είναι 3 (Top tag 9),
.

    Από τα τόξα κορυφής 9 σε ακίνητες καταχωρήσεις 5, 8, 11, 12. Τότε

Γεμίστε την τέταρτη γραμμή του πίνακα. Σε αυτή τη γραμμή, δύο κορυφές  2 και 12 έχουν ελάχιστες χρονικές ετικέτες ίσες με 4. πρώτη σειρά, για παράδειγμα, η κορυφή 2. Στη συνέχεια, η κορυφή 12 θα παραγγελθεί στο επόμενο βήμα.

Τραπέζι 1

Ετσι,
.

    Από την κορυφή 2 υπάρχουν τόξα σε ακόμα διαταραγμένες κορυφές 3, 4, 5. Ανάκληση προσωρινών σημείων αυτών των κορυφών

Συμπληρώστε 5 σειρές τραπεζιών. Οι ελάχιστες ετικέτες χρόνου είναι 4 (ετικέτα κορυφής 12),
.

Γεμίστε 6 σειρές πίνακα. Οι ελάχιστες ετικέτες χρόνου είναι 5 (Top tag 5),
.

Συμπληρώστε 7 σειρά του πίνακα. Να γίνει μια σταθερή ετικέτα της κορυφής 8 (είναι ίση με 5),
.

Η κορυφή 11 παραγγέλλεται.

    Από την κορυφή 11 τόξα στις διαταραγμένες κορυφές 7, 10. Υπενθυμίζοντας τα χρονικά σήματα αυτών των κορυφών.

Το Top 4 παίρνει μια σταθερή ετικέτα.

    Από το Arcs Vertex 4 σε μη συνδεδεμένες κορυφές 3, 7. Αναπτύξτε ξανά τις ετικέτες χρόνου

Οργανώστε την κορυφή 3.


Συμπληρώστε 12 σειρές τραπεζιών. Σε αυτό το βήμα, παραγγείλουμε την τελευταία διαταραγμένη κορυφή 10.

Δημιουργία ενός δέντρου βραχύτερων διαδρομών.

Το δέντρο των συντομότερων μονοπατιών είναι ένα εστιασμένο δέντρο με μια ρίζα στην κορυφή ΜΙΚΡΟ. . Όλα τα μονοπάτια σε αυτό το δέντρο είναι το συντομότερο για αυτό το γράφημα.

Το μικρότερο δέντρο διαδρομής βασίζεται στο τραπέζι, η κορυφή είναι ενεργοποιημένη πάνω από την κορυφή με τη σειρά με την οποία έλαβαν σταθερές ετικέτες. Το πρώτο στο δέντρο μετατρέπεται στη ρίζα - η κορυφή ΜΙΚΡΟ. .

Κατασκευάζουμε το συντομότερο δέντρο για το παράδειγμά μας.

Πρώτον, ενεργοποιούμε τη ρίζα στο δέντρο - η κορυφή 1. Στη συνέχεια το τόξο μετατρέπεται σε ένα δέντρο (1,6). Η επόμενη ήταν η κορυφή 9, το μήκος της μικρότερης διαδρομής στο οποίο είναι ίσο με 3. Ο πρώτος αριθμός 3 που εμφανίστηκε στην τρίτη γραμμή, η οποία συμπληρώθηκε με
. Κατά συνέπεια, η κορυφή 6 είναι η προτελευταία κορυφή της μικρότερης διαδρομής προς την κορυφή 9. Γυρίζουμε στο ξύλο Arc (6,9) μήκος 1.

Το Top 2 διατάχθηκε με το μήκος της μικρότερης διαδρομής ίσο με 4. Αυτός ο αριθμός για πρώτη φορά εμφανίστηκε στην τρίτη γραμμή, η οποία συμπληρώθηκε με
. Κατά συνέπεια, η συντομότερη διαδρομή στη δεύτερη κορυφή περνά κατά μήκος του τόξου (6.2). Ενεργοποιούμε το τόξο (6.2) μήκους 2.

Στη συνέχεια, παραγγείλαμε τα κορυφαία 12,
. Ο πρώτος αριθμός 4 εμφανίζεται στην τέταρτη γραμμή, η οποία συμπληρώθηκε με
. Το δέντρο περιλαμβάνει ένα τόξο (9.12) μήκους 1. Το συνολικό δέντρο των συντομότερων διαδρομών παρουσιάζεται στο ΣΧ. πέντε.

Ο ατιμωτικός αλγόριθμος μπορεί να είναι λάθος εάν υπάρχουν αρνητικά τόξα στη στήλη. Έτσι, ψάχνοντας τα συντομότερα μονοπάτια από την κορυφή ΜΙΚΡΟ. \u003d 1 για γράφημα στο ΣΧ. 6, ο αλγόριθμος διέταξε πρώτα την κορυφή 3, τότε η κορυφή 2 και ολοκληρώσει την εργασία. Σε αυτή την περίπτωση, αυτή η συντομότερη διαδρομή προς τα κορυφαία 3, από την άποψη του αλγορίθμου Daekstra,  είναι ένα τόξο (1,3) μήκος 3.

Στην πραγματικότητα, η συντομότερη διαδρομή προς την κορυφή 3 αποτελείται από τόξα (1,2) και (2.3), το μήκος αυτής της διαδρομής είναι 5 + (- 3) \u003d 2.

Λόγω της παρουσίας ενός τόξου (2.3) αρνητικού μήκους -3, διαταράσσονται οι ακόλουθες βασικές αρχές:

    Πλησιέστερο Κ. ΜΙΚΡΟ. Η κορυφή βρίσκεται από αυτό σε απόσταση δύο τόξων και όχι ένα.

    Η ενδιάμεση κορυφή της μικρότερης διαδρομής 1-2-3 (κορυφή 2) βρίσκεται περαιτέρω από την κορυφή 1 (σε απόσταση 5) από την τελική κορυφή της διαδρομής 3.

Κατά συνέπεια, η παρουσία αρνητικού μήκους τόξου περιπλέκει τη λύση του προβλήματος της μικρότερης διαδρομής και απαιτεί τη χρήση πιο περίπλοκων αλγορίθμων, αντί του αλγορίθμου Daekstra.

Συνεχίζοντας το θέμα:
Λινάρι

Ο χρήστης στην ορολογία των προδιαγραφών) είναι ένα λογισμικό στο πλάι του συνδρομητή, το οποίο σας επιτρέπει να λαμβάνετε, να στείλετε, να δείτε και να επεξεργαστείτε ...

Νέα άρθρα
/
Δημοφιλής