Class Hub
Graphs·Διάλεξη 9·~68 min

L09 · Γραφήματα IV — Dijkstra & Ελάχιστα Συνδετικά Δέντρα

Τι θα δούμε

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

  1. Συντομότερη διαδρομή με θετικά βάρη → ο αλγόριθμος Dijkstra.
  2. Ελάχιστο Συνδετικό Δέντρο (ΕΣΔ / MST)Prim, Kruskal, και η «αντίστροφη διαγραφή».

Και οι τέσσερις είναι άπληστοι: σε κάθε βήμα παίρνουν την τοπικά καλύτερη απόφαση και δεν την ξανακοιτάζουν ποτέ. Το ότι μια σειρά από «μυωπικές» επιλογές δίνει στο τέλος παγκόσμια βέλτιστη λύση δεν είναι καθόλου προφανές — η μισή διάλεξη είναι να αποδείξουμε ακριβώς αυτό.

Συντομότερη διαδρομή με βάρη

Είσοδος: κατευθυνόμενο γράφημα , και σε κάθε ακμή ένας θετικός αριθμός — το «μήκος» της. Το μήκος μιας διαδρομής είναι το άθροισμα των μηκών των ακμών της.

Ζητούμενο: για δοσμένα και , η διαδρομή με το ελάχιστο συνολικό μήκος.

s234567t921216141830116Συντομότερη: s → 2 → 3 → 5 → t = 9 + 21 + 2 + 16 = 48

Ο αλγόριθμος Dijkstra

Η ιδέα — άπληστο κύμα από την s

Πώς προσομοιώνουμε το κύμα; Κρατάμε ένα σύνολο από κορυφές που το κύμα έχει ήδη φτάσει — και για τις οποίες ξέρουμε ήδη, οριστικά, τη συντομότερη απόσταση από την . Στην αρχή το κύμα μόλις ξεκινάει: , .

Σε κάθε βήμα μεγαλώνουμε το με μία ακόμα κορυφή — αυτή που το κύμα θα ακουμπήσει αμέσως μετά. Για να τη βρούμε, για κάθε κορυφή έξω από το ρωτάμε: «αν την πλησιάσω σε ένα μόνο βήμα από κάποια ήδη οριστικοποιημένη κορυφή , ποιο είναι το φθηνότερο που μου δίνει το ;» Αυτό είναι η εκτίμηση :

Η άπληστη επιλογή: παίρνουμε την με το μικρότερο — αυτή που το κύμα θα ακουμπήσει πρώτη — θέτουμε , και τη βάζουμε στο . Ποτέ ξανά δεν την ξανακοιτάμε.

Ο αλγόριθμος

ΑλγόριθμοςDijkstra — συντομότερες διαδρομές από μία πηγή
O(m log n)
Κράτα τις οριστικοποιημένες κορυφές σε σύνολο S· κάθε βήμα οριστικοποίησε την πιο κοντινή που μένει, και χαλάρωσε τις ακμές της.
Είσοδος:
κατευθυνόμενο γράφημα G με θετικά βάρη, και πηγή s
Έξοδος:
η συντομότερη απόσταση d[v] από την s προς κάθε v (και οι γονείς π[v] για τη διαδρομή)

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

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

Dijkstra βήμα-βήμα — εξαγωγή ελαχίστου και χαλάρωση ακμών
S = {∅}

Πράσινο = οριστικοποιημένη (στο S) · κόκκινο = εξάγεται τώρα · κίτρινο = μόλις βελτιώθηκε.

251734116sd=0ad=bd=cd=dd=td=
Αρχικοποίηση: d[s] = 0, κάθε άλλη κορυφή d = ∞. Καμία κορυφή δεν είναι ακόμα οριστικοποιημένη. Πάτα «Επόμενο».
Βήμα 0 / 6

Γιατί είναι σωστός — αναλλοίωτη με επαγωγή στο

Βάση. : μόνο η είναι μέσα, με — προφανώς η συντομότερη διαδρομή προς τον εαυτό της. ✓

Επαγωγικό βήμα. Υποθέτουμε ότι η αναλλοίωτη ισχύει όσο . Έστω η κορυφή που μπαίνει στο στο επόμενο βήμα — αυτή με το ελάχιστο — και έστω η ακμή που το πετυχαίνει, ώστε . Θα δείξουμε ότι καμία διαδρομή δεν είναι φθηνότερη από .

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

Άρα κάθε διαδρομή προς την κοστίζει , οπότε το είναι όντως το συντομότερο.

Η απόδειξη γίνεται πολύ πιο χειροπιαστή αν την τρέξεις. Διάλεξε οποιαδήποτε διαδρομή και δες την αλυσίδα να χτίζεται κρίκο-κρίκο — και να καταλήγει πάντα στο ίδιο σημείο, :

Γιατί ο Dijkstra είναι σωστός — η αλυσίδα ανισοτήτων

Πράσινο = μέσα στο S (οριστικοποιημένες) · μωβ = η διαδρομή P που διάλεξες · χρυσό = η πρώτη ακμή που φεύγει από το S.

S — οριστικοποιημένες514584sd=0xd=5yπ=13vπ=10οριστικοποιείται
Η αλυσίδα — κάθε κρίκος ≥ ο επόμενος
ℓ(P) ≥ ℓ(P′) + ℓ(x,y)
≥ d(x) + ℓ(x,y)
≥ π(y)
≥ π(v)
Ο Dijkstra πρόκειται να οριστικοποιήσει την κορυφή v: από όσες μένουν, αυτή έχει το μικρότερο π — εδώ π(v) = 10. Για να είναι σωστό, καμία διαδρομή s→v δεν επιτρέπεται να κοστίζει λιγότερο. Διάλεξες τη διαδρομή s → x → y → v, συνολικού μήκους 17.
Βήμα 0 / 6

Δεν είναι αφηρημένη απειλή. Ένας τετρακόρυφος γράφος με μία αρνητική ακμή φτάνει για να βάλει τον Dijkstra να επιστρέψει λάθος απάντηση. Πάτα «επόμενο» και δες ακριβώς τη στιγμή που η u «κλειδώνει» στο αν και η αληθινή της απόσταση είναι — και πώς αυτό το μικρό ψέμα μετά κάνει την να είναι 5 αντί για 3:

Πού σπάει ο Dijkstra — μία αρνητική ακμή φτάνει
Βήμα 1/4

Τέσσερις κορυφές, τέσσερις ακμές, μία αρνητική. Δες πώς ο Dijkstra οριστικοποιεί την u πολύ νωρίς — και πληρώνει το τίμημα στην t.

12−34sd=0ud=1vd=2td=
Βήμα 1: εξάγουμε την s (d=0). Χαλαρώνουμε τις s→u και s→v: d[u] = 1, d[v] = 2.
Βήμα 1 / 4

Από εδώ προκύπτει και ο επόμενος αλγόριθμος, ο Bellman-Ford σε L17: επαναπροσπαθεί τη χαλάρωση κάθε ακμής σε κάθε γύρο, αντί να εμπιστεύεται την «οριστικοποίηση». Πληρώνει με — αλλά αντέχει αρνητικά βάρη και, ως μπόνους, εντοπίζει αρνητικούς κύκλους.

Πολυπλοκότητα

Όλο το κόστος είναι στις δύο πράξεις της ουράς προτεραιότητας:

  • φορές extractMin — μία ανά κορυφή.
  • Μέχρι φορές decreaseKey — το πολύ μία ανά ακμή.

Με έναν δυαδικό σωρό (heap, L10) κάθε πράξη κοστίζει , οπότε συνολικά για συνεκτικά γραφήματα. (Με απλό πίνακα αντί σωρού: — προτιμότερο για πυκνά γραφήματα. Με Fibonacci heap: , πέρα από την ύλη.)

Κάρτα μνήμηςDijkstra
Λέξεις-κλειδιά
άπληστοςσύνολο S οριστικοποιημένωνextractMinχαλάρωση ακμών (relax)μόνο θετικά βάρη
Τα βήματα στο μυαλό σου
1d[s] = 0, d[v] = ∞ για κάθε άλλη· όλες οι κορυφές σε ουρά προτεραιότητας.
2Εξάγαγε την κορυφή u με το μικρότερο d — οριστικοποιείται (μπαίνει στο S).
3Χαλάρωσε κάθε εξερχόμενη ακμή (u,v): αν d[u] + ℓ < d[v], ενημέρωσε το d[v].
4Επανάλαβε ώσπου να αδειάσει η ουρά.
Πολυπλοκότητα
O(m log n) με σωρό
Κλασική παγίδα
Λειτουργεί ΜΟΝΟ με μη αρνητικά βάρη. Μια αρνητική ακμή μπορεί να βελτιώσει την απόσταση μιας ήδη οριστικοποιημένης κορυφής — και η αναλλοίωτη καταρρέει. Για αρνητικά βάρη: Bellman-Ford, O(n·m).

Ελάχιστο Συνδετικό Δέντρο (ΕΣΔ)

Διατύπωση

Είσοδος: μη κατευθυνόμενο συνεκτικό γράφημα , με κόστος σε κάθε ακμή.

Ένα συνδετικό δέντρο (spanning tree) είναι ένα υποσύνολο ακμών που (1) είναι δέντρο — συνεκτικό και ακυκλικό — και (2) αγγίζει όλες τις κορυφές. Από το L06, ένα τέτοιο δέντρο έχει ακριβώς ακμές.

Ζητούμενο: το συνδετικό δέντρο ελάχιστου συνολικού κόστους — αυτό που ελαχιστοποιεί το .

Πού χρησιμεύει στην πράξη: σχεδίαση φθηνότερων δικτύων (ηλεκτρικά, υδρευτικά, καλωδιακά, οδικά)· προσεγγιστικοί αλγόριθμοι για NP-δύσκολα προβλήματα (περιοδεύων πωλητής, δέντρο Steiner)· ανάλυση συστάδων (clustering)· το spanning-tree protocol των Ethernet, που σπάει τους βρόχους ενός δικτύου.

Γιατί δεν δοκιμάζουμε απλώς όλα τα δέντρα

Μια χαζή ιδέα πρώτη: «αν θες ελάχιστο, δοκίμασε τα πάντα — κάθε δυνατό συνδετικό δέντρο — και κράτα το φθηνότερο». Φαίνεται δουλειά υπολογιστή· για ένα γράφημα 10 κορυφών δεν θα μπορούσε να αργήσει τόσο, σωστά;

Το θεώρημα του Cayley σε προσγειώνει: το πλήρες γράφημα έχει διαφορετικά συνδετικά δέντρα. Δεν είναι «κάποιες δεκάδες» — είναι έκρηξη. Σύρε το παρακάτω και δες πόσο γρήγορα ο αριθμός σταματάει να χωράει σε χαρτί:

Θεώρημα Cayley — γιατί δεν μπορούμε να δοκιμάσουμε όλα τα δέντρα
K

Το πλήρες γράφημα K έχει nn−2 διαφορετικά συνδετικά δέντρα. Μετακίνησε το n για να δεις πόσο γρήγορα εκτοξεύεται.

K — όλα-όλα-όλα τα ζευγάρια συνδεδεμένα
κορυφέςn = 6
ακμές στο KC(6, 2) = 15
συνδετικά δέντρα64 = 1.296
στο 1 ns/δέντρο τελειώνεις σε1.30 μs
n
6
C(n,2)
15
n^(n−2)
1.296
κλίμακα: λογαριθμική — κάθε γραμμή μετράει «πόσα μηδενικά»
n = 6
Σημεία
Στο K έχουμε ήδη 1.296 συνδετικά δέντρα — η απαρίθμηση γίνεται κουραστική.

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

abcdefgh4085902010457511014010070Κόκκινες = ακμές του ΕΣΔ · γκρι = παραλείπονται

Κύκλοι, αποκοπές, και γιατί η απληστία δουλεύει

Πριν αποδείξουμε ότι Prim και Kruskal είναι σωστοί, χρειαζόμαστε ένα εργαλείο: την έννοια της αποκοπής.

Μια αποκοπή (cut) είναι απλώς ένας χωρισμός των κορυφών σε δύο μέρη — ένα υποσύνολο και το υπόλοιπο . Το σύνολο ακμών αποκοπής είναι οι ακμές με το ένα άκρο στο και το άλλο έξω — αυτές που «διασχίζουν» τη γραμμή.

Δες το με τα χέρια σου. Κάνε κλικ στις κορυφές για να φτιάξεις τη δική σου αποκοπή : οι ακμές που τη διασχίζουν — το — ανάβουν χρυσές, και η φθηνότερη απ' αυτές πρασινίζει. Δοκίμασε όσες διαφορετικές αποκοπές θέλεις και κράτησε μια παρατήρηση για την ελάχιστη χρυσή ακμή — θα της δώσουμε όνομα σε λίγο:

Εξερευνητής αποκοπών — φτιάξε τη δική σου αποκοπή
A = {C, F}

Κάνε κλικ σε κορυφή για να μπει / βγει από το σύνολο A · γαλάζιο = μέσα στο A · χρυσό = ακμές αποκοπής D(A) · πράσινο = η ελάχιστη.

761122358491011ABCDEFG

💡 Κάνε κλικ στις κορυφές — η ελάχιστη ακμή της αποκοπής βγαίνει πάντα ακμή του ΕΣΔ.

D(A)A-C·3C-D·4D-F·10F-G·12
Η αποκοπή A = {C, F} έχει 4 ακμές αποκοπής. Η ελάχιστη είναι η A-C με κόστος 3 και είναι ακμή του ΕΣΔ ✓. Αυτό λέει η ιδιότητα αποκοπής — και ισχύει για όποια αποκοπή κι αν φτιάξεις.

Και ένα λήμμα-εργαλείο — απλό στην απόδειξη, αλλά κάνει το «βρώμικο» επιχείρημα ανταλλαγής που έρχεται μετά να δουλέψει χωρίς τρύπες:

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

Λήμμα κύκλου-αποκοπής — μέτρα τις διασχίσεις
A = {A}

Διάλεξε έναν κύκλο και μια αποκοπή. Πάτα «επόμενο» για να περπατήσεις γύρω-γύρω: κάθε ακμή που σε πάει «μέσα ↔ έξω» αυξάνει τον μετρητή.

Κύκλος
Αποκοπή(ή κλικ σε κορυφή για να την αλλάξεις πλευρά)
354ABCDEFG

💡 Γαλάζιο = μέσα στο A · πορτοκαλί περίγραμμα = πάνω στον κύκλο · κόκκινο = ακμή κύκλου που διασχίζει την αποκοπή.

ΠερπάτημαA↔ +1CD↔ +1A
Διασχίσεις μέχρι τώρα:0
Ο τρίγωνο a-c-d είναι τονισμένος πορτοκαλί. Πάτα «επόμενο» για να περπατήσεις την πρώτη ακμή — αν σε πάει από «μέσα στο A» σε «έξω» (ή το ανάποδο), μετράει διάσχιση.
Βήμα 0 / 3

Η ιδιότητα αποκοπής

Απόδειξη με ανταλλαγή. Έστω η ελάχιστη ακμή της αποκοπής, και έστω, για άτοπο, ένα ΕΣΔ που δεν την περιέχει.

  1. Προσθέτοντας την στο σχηματίζεται ακριβώς ένας κύκλος (δέντρο + μία ακμή = ένας κύκλος).
  2. Η ανήκει και στον και στο . Από το λήμμα κύκλου-αποκοπής, η τομή έχει άρτιο πλήθος — άρα υπάρχει και άλλη ακμή σε αυτή την τομή.
  3. Φτιάξε . Αφαιρώντας μια ακμή του κύκλου, το παραμένει συνδετικό δέντρο.
  4. Αφού η είναι η ελάχιστη του και η είναι κι αυτή στο , ισχύει , άρα — και το περιέχει την . Άρα υπάρχει ΕΣΔ με την .

Η ιδιότητα κύκλου

Απόδειξη — συμμετρική. Έστω η ακριβότερη ακμή του κύκλου, και έστω, για άτοπο, ένα ΕΣΔ που την περιέχει.

  1. Αφαιρώντας την από το , το δέντρο σπάει σε δύο κομμάτια — δηλαδή ορίζεται μια αποκοπή .
  2. Η ανήκει και στον και στο . Από το λήμμα, υπάρχει και άλλη ακμή στην τομή .
  3. Φτιάξε — η ξαναενώνει τα δύο κομμάτια, οπότε το είναι συνδετικό δέντρο.
  4. Αφού η είναι η ακριβότερη του , ισχύει , άρα — αντίφαση με το ότι το ήταν ελάχιστο.

Και οι δύο αποδείξεις είναι, κυριολεκτικά, η ίδια κίνηση: πρόσθεσε ή αφαίρεσε μία ακμή, άφησε το λήμμα κύκλου-αποκοπής να σου δώσει μια δεύτερη ακμή, και κάνε την ανταλλαγή. Δες την να εκτελείται — γύρνα τον διακόπτη ανάμεσα στις δύο ιδιότητες και πρόσεξε πόσο όμοια κινούνται:

Επιχείρημα ανταλλαγής — η απόδειξη βήμα-βήμα
Υπόθεση για άτοποe = A-C (3)
761122358491011ABCDEFG
Ιδιότητα αποκοπής: η ελάχιστη ακμή κάθε αποκοπής ανήκει σε κάποιο ΕΣΔ. Πάρε την αποκοπή A = {C, F}· η φθηνότερη ακμή που τη διασχίζει είναι η e = A-C (κόστος 3). Έστω, για άτοπο, ένα ΕΣΔ T* (γκρι) που ΔΕΝ περιέχει την e.
Βήμα 0 / 5

Ο αλγόριθμος του Prim

Η ιδέα. Μεγάλωσε ένα δέντρο προς τα έξω. Σε κάθε στιγμή η αποκοπή είναι «κορυφές μέσα στο δέντρο» vs «κορυφές έξω». Από την ιδιότητα αποκοπής, η φθηνότερη ακμή που διασχίζει αυτή τη γραμμή ανήκει σίγουρα στο ΕΣΔ — οπότε την προσθέτουμε, χωρίς δισταγμό.

ΑλγόριθμοςPrim — ΕΣΔ μεγαλώνοντας ένα δέντρο
O(m log n)
Ξεκίνα από μια κορυφή· κάθε βήμα πρόσθεσε τη φθηνότερη ακμή που συνδέει το δέντρο με μια κορυφή έξω.
Είσοδος:
μη κατευθυνόμενο συνεκτικό γράφημα G με κόστη ακμών
Έξοδος:
ένα ελάχιστο συνδετικό δέντρο T

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

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

Prim βήμα-βήμα — ένα δέντρο που μεγαλώνει
Δέντρο: 1/7 κορυφές

Πράσινο = στο δέντρο · χρυσό διακεκομμένο = ακμές που διασχίζουν την αποκοπή · παχιά πράσινη = μόλις προστέθηκε · α[v] = κόστος της φθηνότερης ακμής προς το δέντρο.

761122358491011AαφετηρίαBα=7Cα=3Dα=5Eα=Fα=Gα=
ΟυράC:3D:5B:7E:F:G:→ extract-min παίρνει την C
Ξεκινάμε από την κορυφή A: μπαίνει μόνη της στο δέντρο. Κάθε γείτονάς της παίρνει κλειδί ίσο με το κόστος της ακμής που τη συνδέει με την A — α[C]=3, α[D]=5, α[B]=7. Οι υπόλοιπες μένουν με α = ∞.
Βήμα 0 / 6

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

Prim εναντίον Dijkstra — ίδιο γράφημα, διαφορετική στρατηγική
Βήμα 0/6

Και οι δύο αλγόριθμοι παίρνουν διαδοχικά την κορυφή με το μικρότερο κλειδί. Πρόσεξε τι σημαίνει «κλειδί» σε κάθε περίπτωση.

Prim — ΕΣΔκλειδί = φθηνή ακμή
761122358491011ABCDEFG
ΟυράC:3D:5B:7E:F:G:
α = 0δέντρο: 1/7κόστος: 0
Dijkstra — συντομότερες διαδρομέςκλειδί = συνολικό κόστος
761122358491011ABCDEFG
ΟυράC:3D:5B:7E:F:G:
d = 0δέντρο: 1/7κόστος: 0
Και οι δύο ξεκινούν από την A με κενό σύνολο. Έλα να τους δούμε βήμα-βήμα — όσο τα κλειδιά τους συμπίπτουν, παίρνουν την ίδια κορυφή.
Βήμα 0 / 6

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

Πολυπλοκότητα: ίδια ανάλυση με τον Dijkstra — extractMin και μέχρι decreaseKey, άρα με σωρό ( με απλό πίνακα).

Κάρτα μνήμηςPrim
Λέξεις-κλειδιά
μεγαλώνει ΕΝΑ δέντρο από κορυφήιδιότητα αποκοπήςκλειδί = φθηνότερη ακμή προς το δέντροpriority queue
Τα βήματα στο μυαλό σου
1Ξεκίνα από μια κορυφή s· το δέντρο περιέχει μόνο αυτήν.
2Κοίτα την αποκοπή «μέσα στο δέντρο» vs «έξω»· βρες τη φθηνότερη ακμή που τη διασχίζει.
3Πρόσθεσε εκείνη την ακμή και τη νέα κορυφή στο δέντρο.
4Επανάλαβε ώσπου να μπουν και οι n κορυφές.
Πολυπλοκότητα
O(m log n) με σωρό
Κλασική παγίδα
Το κλειδί στην ουρά ΔΕΝ είναι «απόσταση από το s» — αυτό είναι ο Dijkstra. Είναι το κόστος της φθηνότερης ΜΙΑΣ ακμής που συνδέει την κορυφή με το δέντρο. Ο Prim είναι τοπικός, ο Dijkstra συσσωρευτικός.

Ο αλγόριθμος του Kruskal

Η ιδέα. Ξέχνα τη γεωμετρία — δούλεψε μόνο με τη λίστα ακμών. Ταξινόμησέ τες σε αύξουσα σειρά κόστους και σάρωσέ τες:

  • Αν η ακμή ενώνει δύο κορυφές που είναι ήδη συνδεδεμένες, θα έκλεινε κύκλο — και είναι η ακριβότερη του κύκλου (όλες οι προηγούμενες ήταν φθηνότερες). Από την ιδιότητα κύκλου, την παραλείπουμε.
  • Αλλιώς η ακμή ενώνει δύο ξεχωριστά κομμάτια· είναι η ελάχιστη ακμή στην αποκοπή που τα χωρίζει. Από την ιδιότητα αποκοπής, την προσθέτουμε.
ΑλγόριθμοςKruskal — ΕΣΔ συγχωνεύοντας ένα δάσος
O(m log n)
Σάρωσε τις ακμές από τη φθηνότερη στην ακριβότερη· κράτα όποια ενώνει δύο διαφορετικά κομμάτια.
Είσοδος:
μη κατευθυνόμενο συνεκτικό γράφημα G με κόστη ακμών
Έξοδος:
ένα ελάχιστο συνδετικό δέντρο T

Με λόγια. Ταξινόμησε όλες τις ακμές κατά αύξον κόστος. Ξεκίνα με κάθε κορυφή σε δικό της σύνολο — ένα δάσος από μεμονωμένες κορυφές. Πάρε τις ακμές με τη σειρά: για την , αν οι και είναι σε διαφορετικά σύνολα, πρόσθεσέ τη στο δέντρο και ένωσε τα δύο σύνολα· αν είναι στο ίδιο, παράλειψέ τη. Σταμάτα όταν το δέντρο φτάσει τις ακμές.

Δες τον Kruskal να σαρώνει τις ταξινομημένες ακμές. Κάθε χρώμα είναι ένα ξεχωριστό κομμάτι του δάσους· πρόσεξε δύο κομμάτια να συγχωνεύονται σε ένα μόλις μια ακμή γίνεται δεκτή — και μια ακμή να απορρίπτεται ακριβώς τη στιγμή που θα έκλεινε κύκλο:

Kruskal βήμα-βήμα — ένα δάσος που συγχωνεύεται
0/6 ακμές · 7 σύνολα

Κάθε χρώμα = ένα συνεκτικό κομμάτι του δάσους. Ακμή σε δύο χρώματα → ενώνει· ακμή σε ένα χρώμα → θα έκλεινε κύκλο.

E-G·1
C-F·2
A-C·3
C-D·4
A-D·5
B-E·6
A-B·7
B-D·8
D-E·9
D-F·10
D-G·11
F-G·12
761122358491011ABCDEFG
Ταξινομούμε τις 12 ακμές κατά αύξον κόστος. Κάθε κορυφή ξεκινά σε δικό της σύνολο — ένα δάσος από 7 μεμονωμένες κορυφές, καθεμία με το δικό της χρώμα.
Βήμα 0 / 7

Πολυπλοκότητα. Η ταξινόμηση των ακμών κοστίζει . Οι πράξεις Find/Union, με τη δομή Union-Find (union-by-rank + path compression), κοστίζουν , όπου η — η αντίστροφη συνάρτηση Ackermann — είναι πρακτικά σταθερά. Άρα κυριαρχεί η ταξινόμηση: .

Κάρτα μνήμηςKruskal
Λέξεις-κλειδιά
ακμές σε αύξουσα σειρά κόστουςδάσος που συγχωνεύεταιπρόσθεσε αν δεν κλείνει κύκλοUnion-Find
Τα βήματα στο μυαλό σου
1Ταξινόμησε όλες τις ακμές σε αύξουσα σειρά κόστους.
2Κάθε κορυφή ξεκινά σε δικό της σύνολο (δάσος μεμονωμένων κορυφών).
3Πάρε την επόμενη φθηνότερη ακμή: αν τα άκρα είναι σε διαφορετικά σύνολα, πρόσθεσέ τη και ένωσε τα σύνολα· αλλιώς παράλειψέ τη.
4Σταμάτα όταν το δέντρο έχει n − 1 ακμές.
Πολυπλοκότητα
O(m log n)
Κλασική παγίδα
Ο έλεγχος «κλείνει κύκλο;» πρέπει να είναι φθηνός — γι' αυτό η δομή Union-Find. Με αφελή έλεγχο συνεκτικότητας ανά ακμή, ο Kruskal γίνεται πολύ πιο αργός. Το κυρίαρχο κόστος είναι η αρχική ταξινόμηση.

Μια τρίτη παραλλαγή: αντίστροφη διαγραφή

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

Η ιδέα. Κάνε το ακριβώς αντίθετο του Kruskal. Ξεκίνα με όλες τις ακμές μέσα — δηλαδή με όλο το γράφημα — και σάρωσέ τες σε φθίνουσα σειρά κόστους. Για κάθε ακμή ρώτα: αν την αφαιρέσω, μένει το γράφημα συνεκτικό; Αν ναι, διέγραψέ τη οριστικά. Αλλιώς, ήταν γέφυρα — βάλ' τη πίσω.

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

Δες τον αλγόριθμο να σαρώνει και δες την αλλαγή φωνής στη μέση της λίστας: στις 6 ακριβότερες απαντάει «διέγραψε», στις 6 φθηνότερες αρχίζει να απαντάει «κράτησέ τη — γέφυρα». Παρατήρησε επίσης τι μένει στο τέλος — ακριβώς το ΕΣΔ που έβγαλαν και ο Prim και ο Kruskal:

Αντίστροφη διαγραφή — αφαίρεση από την ακριβότερη
Ακμή 1/12

Σαρώνουμε τις ακμές σε φθίνουσα σειρά κόστους. Για καθεμία: αν η αφαίρεση αφήσει το γράφημα συνεκτικό, οριστική διαγραφή (ιδιότητα κύκλου). Αλλιώς, ήταν γέφυρα — την κρατάμε.

Σειρά ↓F-G·12D-G·11D-F·10D-E·9B-D·8A-B·7B-E·6A-D·5C-D·4A-C·3C-F·2E-G·1
761122358491011AαναφοράBCDEFG

Πράσινο = συνεκτικό κομμάτι της A στη δοκιμή · ροζ = αποκόπηκε · παχιά πράσινη ακμή = στο ΕΣΔ · διακεκομμένη γκρι = έχει διαγραφεί.

κρατήθηκαν: 0διαγράφηκαν: 1κόστος δέντρου: 0
Δοκίμασε την F-G (κόστος 12). Αν την αφαιρέσουμε, η A εξακολουθεί να φτάνει και στις 7 κορυφές → το γράφημα μένει συνεκτικό. Άρα η ακμή ήταν η ακριβότερη σε κάποιον κύκλο, και η ιδιότητα κύκλου μας εξασφαλίζει ότι δεν ανήκει σε κανένα ΕΣΔ. Οριστική διαγραφή.
Βήμα 1 / 12

Πολυπλοκότητα: πάλι , αν ο έλεγχος «αποσυνδέεται;» γίνει με κάποια έξυπνη δομή (π.χ. δυναμική συνεκτικότητα). Δεν χρησιμοποιείται συχνά στην πράξη, αλλά είναι το πιο καθαρό παράδειγμα της ιδιότητας κύκλου εν δράσει.

Prim ή Kruskal;

PrimKruskal
Τι μεγαλώνειένα δέντρο, από μία κορυφήένα δάσος που σιγά-σιγά συγχωνεύεται
Βασίζεται στηνιδιότητα αποκοπήςιδιότητες αποκοπής & κύκλου
Δομή δεδομένωνουρά προτεραιότητας στις κορυφέςταξινόμηση + Union-Find
Πολυπλοκότητα
Βολικότερος γιαπυκνά γραφήματααραιά γραφήματα

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

Κλείδωσε τη γνώση

Βάλε στη σειρά τα βήματα του Dijkstra:

Βάλε τα βήματα στη σειρά
Ο αλγόριθμος Dijkstra, από την πρώτη ενέργεια στην τελευταία.
Σύρε τις γραμμές για αναδιάταξη — ή χρησιμοποίησε τα βελάκια.
1.Χαλάρωσε κάθε εξερχόμενη ακμή (u, v): αν d[u] + ℓ(u,v) < d[v], ενημέρωσε το d[v].
2.Επανάλαβε την εξαγωγή ώσπου να αδειάσει η ουρά.
3.Βάλε όλες τις κορυφές σε ουρά προτεραιότητας με κλειδί το d.
4.Εξάγαγε την κορυφή u με το μικρότερο d — οριστικοποίησέ τη.
5.Αρχικοποίησε d[s] = 0 και d[v] = ∞ για κάθε άλλη κορυφή.

Και συμπλήρωσε τα κενά για τις δύο ιδιότητες του ΕΣΔ:

Συμπλήρωσε τα κενά
Οι ιδιότητες αποκοπής και κύκλου, και πού στηρίζονται οι αλγόριθμοι.
Η ιδιότητα αποκοπής λέει ότι η ακμή κόστους που διασχίζει οποιαδήποτε αποκοπή ανήκει σίγουρα στο ΕΣΔ. Η ιδιότητα κύκλου λέει ότι η ακμή κόστους κάθε κύκλου σίγουρα ΔΕΝ ανήκει στο ΕΣΔ. Ο Prim στηρίζεται στην ιδιότητα , ενώ ο Kruskal προσθέτει μια ακμή μόνο αν δεν σχηματίζει .

Τέλος, βάλε στη σειρά τα βήματα του Kruskal:

Βάλε τα βήματα στη σειρά
Ο αλγόριθμος Kruskal, από την πρώτη ενέργεια στην τελευταία.
Σύρε τις γραμμές για αναδιάταξη — ή χρησιμοποίησε τα βελάκια.
1.Πάρε την επόμενη φθηνότερη ακμή {u, v} που μένει.
2.Βάλε κάθε κορυφή σε δικό της σύνολο — ένα δάσος μεμονωμένων κορυφών.
3.Ταξινόμησε όλες τις ακμές σε αύξουσα σειρά κόστους.
4.Αν είναι στο ίδιο σύνολο, παράλειψε την ακμή — θα έκλεινε κύκλο.
5.Επανάλαβε ώσπου το δέντρο να φτάσει τις n − 1 ακμές.
6.Αν οι u, v είναι σε διαφορετικά σύνολα, πρόσθεσε την ακμή και ένωσε τα δύο σύνολα.

Μοτίβο σκέψης

Τι μάθαμε

Τι κρατάμε από αυτή τη διάλεξη

  1. Dijkstra — άπληστος αλγόριθμος για συντομότερες διαδρομές με θετικά βάρη. Κάθε βήμα οριστικοποιεί την πιο κοντινή κορυφή που μένει και χαλαρώνει τις ακμές της. με σωρό.
  2. ΕΣΔ — το συνδετικό δέντρο ( ακμές) ελάχιστου συνολικού κόστους.
  3. Ιδιότητα αποκοπής — η ελάχιστη ακμή κάθε αποκοπής ανήκει στο ΕΣΔ. Ιδιότητα κύκλου — η μέγιστη ακμή κάθε κύκλου δεν ανήκει.
  4. Prim — μεγαλώνει ένα δέντρο από μία κορυφή, διαλέγοντας τη φθηνότερη ακμή που το επεκτείνει (ιδιότητα αποκοπής). .
  5. Kruskal — σαρώνει τις ακμές σε αύξουσα σειρά κόστους, προσθέτοντας όποια δεν κλείνει κύκλο (Union-Find). .
  6. Και οι τρεις άπληστοι του ΕΣΔ δίνουν το ίδιο δέντρο — η ορθότητά τους είναι επιχείρημα ανταλλαγής, η ίδια λογική που θα κυριαρχήσει στα L11–L13.
Επόμενο
L10 · Δομές Δεδομένων

Ασκήσεις από εξετάσεις

Από τη θεωρία στην εξεταστική

16 άσκησεις που χρησιμοποιούν ως τελευταίο εργαλείο αυτή τη διάλεξη. Οι πρόσφατες εξεταστικές (2024/2025) φέρουν badge προτεραιότητας.

Παλαιό θέμαΙούνιος 2025Θέμα Εξετάσεων 2025Θέμα 1.63%ΓραφήματαΕύκολο

Ιούνιος 2025 · Θέμα 1.6 — Άπληστο κριτήριο του Dijkstra

Με ποιο άπληστο κριτήριο λειτουργεί ο αλγόριθμος του Dijkstra;

(i) Επιλογή συντομότερου γείτονα από την τελευταία ακμή που προστέθηκε · (ii) Επιλογή της κορυφής με τη μικρότερη απόσταση από την αφετηρία · (iii) Επιλογή ακμής ελάχιστου βάρους σε μία δεδομένη τομή · (iv) Επιλογή του συντομότερου σε πλήθος ακμών μονοπατιού.

Παλαιό θέμαΙούνιος 2025Θέμα Εξετάσεων 2025Θέμα 2.211%ΓραφήματαΔύσκολο

Ιούνιος 2025 · Θέμα 2.2 — Πλήθος ελάχιστων συνδετικών δέντρων

Δίνεται το παρακάτω μη-κατευθυνόμενο γράφημα με 6 κορυφές και ακμές (με τα βάρη τους):

(α΄) Πόσα διαφορετικά ελάχιστα επικαλύπτοντα δέντρα (ΕΕΔ) έχει το γράφημα; (β΄) Σχεδίασε τα διαφορετικά ΕΕΔ (αν υπάρχουν).

Παλαιό θέμαΣεπτέμβριος 2025Θέμα Εξετάσεων 2025Θέμα 1.53%ΓραφήματαΜέτριο

Σεπτέμβριος 2025 · Θέμα 1.5 — Αλγόριθμοι & αρνητικά βάρη

Ποιος/οι από τους παρακάτω αλγόριθμους δεν λειτουργεί ορθά σε γραφήματα που έχουν αρνητικά βάρη στις ακμές τους;

(i) Αλγόριθμος Prim · (ii) Αλγόριθμος Αναζήτησης κατά Πλάτος (BFS) · (iii) Αλγόριθμος Dijkstra · (iv) Αλγόριθμος Bellman-Ford.

Παλαιό θέμαΣεπτέμβριος 2025Θέμα Εξετάσεων 2025Θέμα 2.110%ΓραφήματαΜέτριο

Σεπτέμβριος 2025 · Θέμα 2.1 — Εκτέλεση του αλγορίθμου Dijkstra

Εφάρμοσε τον αλγόριθμο του Dijkstra στο παρακάτω γράφημα με αφετηρία την κορυφή . Η απάντηση αρκεί να περιέχει τον πλήρη πίνακα που διατηρεί ο Dijkstra σε κάθε βήμα. Το γράφημα έχει 6 κορυφές και τις ακμές (με τα βάρη τους):

Παλαιό θέμαΙούνιος 2024Θέμα Εξετάσεων 2024Θέμα 120%ΓραφήματαΜέτριο

Ιούνιος 2024 · Θέμα 1 — Κατασκευή γραφήματος & εκτέλεση Dijkstra

(α) (10 μονάδες) Να κατασκευάσεις ένα κατευθυνόμενο γράφημα με πέντε κορυφές, εκ των οποίων μία θα είναι η κορυφή-πηγή (με εισερχόμενο βαθμό 0), 5 ακμές, και ένα μη-αρνητικό κύκλο, για το οποίο ο αλγόριθμος του Dijkstra λειτουργεί σωστά. Να αιτιολογήσεις σύντομα την απάντησή σου.

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

Παλαιό θέμαΣεπτέμβριος 2024Θέμα Εξετάσεων 2024Θέμα 2α10%ΓραφήματαΜέτριο

Σεπτέμβριος 2024 · Θέμα 2α — Δίκτυο δρόμων με μη-μοναδικό ΕΕΔ

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

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

Παλαιό θέμαΣεπτέμβριος 2024Θέμα Εξετάσεων 2024Θέμα 2β10%ΓραφήματαΜέτριο

Σεπτέμβριος 2024 · Θέμα 2β — Εφαρμογή αλγορίθμου ΕΕΔ

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

Από φροντιστήριοΦροντιστήριο 2023–24Άσκηση 2ΓραφήματαΜέτριο

Φροντιστηριακό Σετ #6 · Άσκηση 2 — 2η/3η ελαφρύτερη ακμή στο MST

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

Α. Η ακμή με το δεύτερο μικρότερο βάρος ανήκει στο ελάχιστο δέντρο επικάλυψης (MST) του .

Β. Η ακμή με το τρίτο μικρότερο βάρος ανήκει στο ελάχιστο δέντρο επικάλυψης (MST) του .

Από φροντιστήριοΦροντιστήριο 2023–24Άσκηση 11ΓραφήματαΜέτριο

Φροντιστηριακό Σετ #7 · Άσκηση 11 — Σωστό/Λάθος για MST και Dijkstra

Να αποδείξετε αν είναι σωστές ή λάθος οι παρακάτω εκφράσεις:

(i) Αν ο γράφος έχει περισσότερες από ακμές και υπάρχει μια μοναδική ακμή μέγιστου βάρους, τότε αυτή η ακμή δεν μπορεί να είναι τμήμα ενός ΔΕΕΚ (δέντρου επικάλυψης ελάχιστου κόστους).

(ii) Το δέντρο διαδρομών μικρότερου βάρους που υπολογίζεται από τον αλγόριθμο του Dijkstra είναι υποχρεωτικά ένα ΔΕΕΚ.

(iii) Έστω γράφος με διαφορετικά βάρη σε κάθε ακμή. Τότε ο έχει μοναδικό ΔΕΕΚ.

Από φροντιστήριοΦροντιστήριο 2023–24Άσκηση 3ΓραφήματαΜέτριο

Φροντιστηριακό Σετ #7 · Άσκηση 3 — Άπληστη προσέγγιση του TSP μέσω MST

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

Από φροντιστήριοΦροντιστήριο 2023–24Άσκηση 6ΓραφήματαΕύκολο

Φροντιστηριακό Σετ #7 · Άσκηση 6 — Αναβάθμιση τηλεφωνικού δικτύου (MST)

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

i. Διατυπώστε άπληστο αλγόριθμο που ελαχιστοποιεί το κόστος αναβάθμισης, έτσι ώστε για κάθε δύο κόμβους να υπάρχει ακριβώς μία αναβαθμισμένη διαδρομή σύνδεσης και το συνολικό κόστος να είναι το ελάχιστο δυνατό. ii. Δώστε την πολυπλοκότητα χρόνου.

Παλαιό θέμαΙούνιος 2023Θέμα 3Α5%ΓραφήματαΜέτριο

Ιούνιος 2023 · Θέμα 3Α — Το Hamiltonian Path ανήκει στο NP

Hamiltonian Path (Η): δίνεται γράφος με κόμβους και δύο κόμβοι και . Υπάρχει μονοπάτι από τον στον που περνά από κάθε κόμβο του ακριβώς μία φορά;

Δείξε ότι το πρόβλημα ανήκει στην κλάση NP.

Παλαιό θέμαΙούνιος 2023Θέμα 3Β15%ΓραφήματαΜέτριο

Ιούνιος 2023 · Θέμα 3Β — Το πρόβλημα απόφασης MST σε NP και σε P

Minimum Spanning Tree (MST): δίνεται γράφος με κόμβους και μη αρνητικά βάρη στις ακμές μέσω της . Να βρεθεί ένα συνδετικό δέντρο (spanning tree) ελαχίστου βάρους.

i. Γράψε το αντίστοιχο πρόβλημα απόφασης . ii. Δείξε ότι . iii. Δείξε ότι .

Παλαιό θέμαΣεπτέμβριος 2023Θέμα 420%ΓραφήματαΜέτριο

Σεπτέμβριος 2023 · Θέμα 4 — Υπόδεντρο ελάχιστου βάρους & κλάσεις P/NP

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

(i) Να γραφεί το πρόβλημα απόφασης του . (ii) Να δειχθεί ότι ανήκει στην κλάση . (iii) Να δειχθεί ότι ανήκει στην κλάση .

Παλαιό θέμαΙούνιος 2022Θέμα 120%ΓραφήματαΜέτριο

Ιούνιος 2022 · Θέμα 1 — Ανεξάρτητο σύνολο: NP και P για σταθερό k

Θεωρήστε το πρόβλημα του ανεξάρτητου συνόλου:

INDEP: Δοθέντος ενός μη κατευθυνόμενου γράφου με κόμβους και ενός μη αρνητικού ακεραίου , περιέχει ο -ανεξάρτητο σύνολο; (Ένα -ανεξάρτητο σύνολο είναι κόμβοι που ανά 2 δεν συνδέονται με ακμή.)

i. Αποδείξτε ότι το πρόβλημα INDEP ανήκει στην κλάση .

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

Παλαιό θέμαΙούνιος 2022Θέμα 420%ΓραφήματαΜέτριο

Ιούνιος 2022 · Θέμα 4 — Προβλήματα απόφασης MST & TSP

Θεωρήστε τα προβλήματα: ελαχιστοποίηση κόστους ενός δέντρου επικάλυψης (mst) σε ένα γράφο, και ελαχιστοποίηση του κόστους ενός Χαμιλτονιανού κύκλου (TSP) σε έναν πλήρη γράφο.

i. Να δοθούν τα αντίστοιχα προβλήματα απόφασης και .

ii. Με την υπόθεση ότι : το ανήκει στην ; στην ; είναι -complete; Και αντίστοιχα για το .

Φόρτωση σχολίων…
L09 · Γραφήματα IV — Dijkstra & Ελάχιστα Συνδετικά Δέντρα · Algorithms Class Hub