Κατ οίκον Εργασία 5 Σκελετοί Λύσεων

Σχετικά έγγραφα
Κατ οίκον Εργασία 4 Σκελετοί Λύσεων

Κατ οίκον Εργασία 5 Σκελετοί Λύσεων

Κατ οίκον Εργασία 4 Σκελετοί Λύσεων

ΕΠΛ 231 Δοµές Δεδοµένων και Αλγόριθµοι 11-1

ΕΠΛ 231 οµές εδοµένων και Αλγόριθµοι Άννα Φιλίππου,

Διάλεξη 21: Γράφοι II - Τοπολογική Ταξινόμηση

Διδάσκων: Παναγιώτης Ανδρέου

ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΥΠΡΟΥ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ. ΑΣΚΗΣΗ 4 Σωροί, Γράφοι

Διδάσκων: Κωνσταντίνος Κώστα Διαφάνειες: Δημήτρης Ζεϊναλιπούρ

Διδάσκων: Κωνσταντίνος Κώστα Διαφάνειες: Δημήτρης Ζεϊναλιπούρ

Διάλεξη 29: Γράφοι. Διδάσκων: Παναγιώτης Ανδρέου

Ελάχιστα Γεννητορικά ένδρα

Φροντιστήριο 4 Σκελετοί Λύσεων

Φροντιστήριο 4 Σκελετοί Λύσεων

ΠΛΗ111. Ανοιξη Μάθηµα 10 ο. Γράφοι. Τµήµα Ηλεκτρονικών Μηχανικών και Μηχανικών Υπολογιστών Πολυτεχνείο Κρήτης

6η Διάλεξη Διάσχιση Γράφων και Δέντρων

Γράφοι. Ορολογία. Ορισµός: G = (V, E) όπου. Ορολογία (συνέχεια) γράφος ή γράφηµα (graph) V:ένα σύνολο E:µια διµελής σχέση στο V

Διάλεξη 18: Γράφοι I - Εισαγωγή

Κατ οίκον Εργασία 3 Σκελετοί Λύσεων

Διδάσκων: Κωνσταντίνος Κώστα Διαφάνειες: Δημήτρης Ζεϊναλιπούρ

Διάλεξη 26: Σωροί. Διδάσκων: Παναγιώτης Ανδρέου

Κατ οίκον Εργασία 2 Σκελετοί Λύσεων

Διάλεξη 17: Δυαδικά Δέντρα. Διδάσκων: Κωνσταντίνος Κώστα Διαφάνειες: Δημήτρης Ζεϊναλιπούρ

Κατ οίκον Εργασία 3 Σκελετοί Λύσεων

Κατ οίκον Εργασία 2 Σκελετοί Λύσεων

Διάλεξη 22: Δυαδικά Δέντρα. Διδάσκων: Παναγιώτης Ανδρέου

Ενότητα 7 Ουρές Προτεραιότητας

Αλγόριθμοι Γραφημάτων

Υλοποίηση Λιστών. Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα:

Διάλεξη 18: Γράφοι I Εισαγωγή

Εργαστήριο 4: Υλοποίηση Αφηρημένου Τύπου Δεδομένων: Ταξινομημένη Λίστα

ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΑΝΑΛΥΣΗ ΑΛΓΟΡΙΘΜΩΝ

Διάλεξη 12: Λίστες Υλοποίηση & Εφαρμογές. Διδάσκων: Παναγιώτης Ανδρέου

Διδάσκων: Κωνσταντίνος Κώστα Διαφάνειες: Δημήτρης Ζεϊναλιπούρ

Διάλεξη 16: Σωροί. Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: - Ουρές Προτεραιότητας - Ο ΑΤΔ Σωρός, Υλοποίηση και πράξεις

Κατ οίκον Εργασία 2 Σκελετοί Λύσεων

ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΥΠΡΟΥ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ

Διδάσκων: Παναγιώτης Ανδρέου

Διάλεξη 21: Γράφοι IV - Βραχύτερα Μονοπάτια σε Γράφους

ΕΝΟΤΗΤΑ 7 ΟΥΡΕΣ ΠΡΟΤΕΡΑΙΟΤΗΤΑΣ ΣΩΡΟΙ

Αλγόριθμοι Γραφημάτων

ΕΛΛΗΝΙΚΗ ΔΗΜΟΚΡΑΤΙΑ ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΡΗΤΗΣ. Δομές δεδομένων. Ενότητα 7η: Ουρές Προτεραιότητας Παναγιώτα Φατούρου Τμήμα Επιστήμης Υπολογιστών

Διδάσκων: Κωνσταντίνος Κώστα Διαφάνειες: Δημήτρης Ζεϊναλιπούρ

ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΑΝΑΛΥΣΗ ΑΛΓΟΡΙΘΜΩΝ

Διδάσκων: Παναγιώτης Ανδρέου

Αλγόριθμοι Γραφημάτων

Διάλεξη 17: O Αλγόριθμος Ταξινόμησης HeapSort

Ενότητα 7 Ουρές Προτεραιότητας

Βραχύτερα Μονοπάτια σε Γράφους (CLR, κεφάλαιο 25)

Διάλεξη 06: Συνδεδεμένες Λίστες & Εφαρμογές Στοιβών και Ουρών

HY380 Αλγόριθμοι και πολυπλοκότητα Hard Problems

Βασικές Δομές Δεδομένων

Alternative to Balanced Trees, Comms of the ACM, 33(6), June 1990,

Θεωρία Υπολογισμού και Πολυπλοκότητα Μαθηματικό Υπόβαθρο

Διδάσκων: Κωνσταντίνος Κώστα

Διδάσκων: Κωνσταντίνος Κώστα Διαφάνειες: Δημήτρης Ζεϊναλιπούρ

Διάλεξη 16: Σωροί. Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: - Ουρές Προτεραιότητας - Ο ΑΤΔ Σωρός, Υλοποίηση και πράξεις

Δένδρα. Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα:

Δομές Δεδομένων. Ενότητα 4: Ο ΑΤΔ Λίστα & Υλοποίηση Λίστας με σειριακή αποθήκευση- Ο ΑΤΔ Συνδεδεμένη Λίστα- Υλοποίηση ΑΤΔ Συνδεδεμένη Λίστα με πίνακα

υναµικές οµές εδοµένων (συν.) Στην ενότητα αυτή θα µελετηθούν τα εξής επιµέρους θέµατα:

Σχεδίαση & Ανάλυση Αλγορίθμων

Γέφυρες σε Δίκτυα. Μας δίνεται ένα δίκτυο (κατευθυνόμενο γράφημα) αφετηριακός κόμβος. Γέφυρα του (με αφετηρία τον ) :

Κατ οίκον Εργασία 2 Σκελετοί Λύσεων

Διδάσκων: Κωνσταντίνος Κώστα Διαφάνειες: Δημήτρης Ζεϊναλιπούρ

Αναδροµή. Σε αυτήν την (βοηθητική) ενότητα θα µελετηθούν τα εξής : Η έννοια της αναδροµής Υλοποίηση και αποδοτικότητα Αφαίρεση της αναδροµής

Κεφάλαιο 11 Ένωση Ξένων Συνόλων

Διάλεξη 13: Δομές Δεδομένων ΙΙ (Ταξινομημένες Λίστες)

Διδάσκων: Παναγιώτης Ανδρέου

Γράφοι (συνέχεια) Ο αλγόριθµος Dijkstra για εύρεση βραχυτέρων µονοπατιών Ta µονοπάτια Euler

Γράφημα. Συνδυαστικό αντικείμενο που αποτελείται από 2 σύνολα: Σύνολο κορυφών (vertex set) Σύνολο ακμών (edge set) 4 5 πλήθος κορυφών πλήθος ακμών

ΕΡΓΑΣΤΗΡΙΟ 5 ΣΗΜΕΙΩΣΕΙΣ

Ενότητα 10 Γράφοι (ή Γραφήµατα)

Διάλεξη 20: Γράφοι I - Εισαγωγή

Δομές Δεδομένων. Ενότητα 7: Άλλες παραλλαγές Συνδεδεμένων Λιστών-Παράσταση Αραιού Πολυωνύμου με Συνδεδεμένη Λίστα. Καθηγήτρια Μαρία Σατρατζέμη

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

Ενδεικτικές Λύσεις 1ου Σετ Ασκήσεων

Διάλεξη 11: Φροντιστήριο για Στοίβες. Διδάσκων: Παναγιώτης Ανδρέου. ΕΠΛ035 Δομές Δεδομένων και Αλγόριθμοι για Ηλ. Μηχ. Και Μηχ. Υπολ.

Δομές Δεδομένων & Αλγόριθμοι

Διάλεξη 12: Δέντρα ΙΙ Δυαδικά Δέντρα

Δένδρα. Μαθηματικά (συνδυαστικά) αντικείμενα. Έχουν κεντρικό ρόλο στην επιστήμη των υπολογιστών :

Ενότητα 9 Ξένα Σύνολα που υποστηρίζουν τη λειτουργία της Ένωσης (Union-Find)

Αλγόριθµοι Τύπου Μείωσης Προβλήµατος

Κατ οίκον Εργασία 1 Σκελετοί Λύσεων

Ταξινόμηση με συγχώνευση Merge Sort

ΕΠΛ 231 Δομές Δεδομένων και Αλγόριθμοι 4-1

Αλγόριθμοι Γραφημάτων

Πανεπιστήμιο Πειραιώς Σχολή Τεχνολογιών Πληροφορικής και Επικοινωνιών Τμήμα Ψηφιακών Συστημάτων ομές εδομένων

Πανεπιστήμιο Πειραιώς Σχολή Τεχνολογιών Πληροφορικής και Επικοινωνιών Τμήμα Ψηφιακών Συστημάτων ομές εδομένων

Ελάχιστο Γεννητικό Δένδρο. Παράδειγμα - Αλγόριθμος Prim. Γιατί δουλεύουν αυτοί οι αλγόριθμοι;

Διερεύνηση γραφήματος

Κατ οίκον Εργασία 1 Σκελετοί Λύσεων

Βασικές οµές εδοµένων

Ειδικά θέματα Αλγορίθμων και Δομών Δεδομένων (ΠΛΕ073) Απαντήσεις 1 ου Σετ Ασκήσεων

Στοιχεία Θεωρίας Γράφων (Graph Theory)

Επιλογές και Κριτήρια Σχεδιασμού ΑΤΔ Ανεξαρτήτως από Γλώσσα Υλοποίησης 24/4/2012

Αλγόριθμοι και Δομές Δεδομένων (IΙ) (γράφοι και δένδρα)

ΠΑΝΕΠΙΣΤΗΜΙΟ ΠΑΤΡΩΝ ΠΟΛΥΤΕΧΝΙΚΗ ΣΧΟΛΗ ΤΜΗΜΑ ΜΗΧΑΝΙΚΩΝ ΗΛΕΚΤΡΟΝΙΚΩΝ ΥΠΟΛΟΓΙΣΤΩΝ ΚΑΙ ΠΛΗΡΟΦΟΡΙΚΗΣ

Διάλεξη 21η: Απλά Συνδεδεμένες Λίστες

ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΥΠΡΟΥ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ. ΘΕΩΡΗΤΙΚΗ ΑΣΚΗΣΗ 2 ΛΥΣΕΙΣ Γραμμικές Δομές Δεδομένων, Ταξινόμηση

Ενότητα 9 Ξένα Σύνολα που υποστηρίζουν τη λειτουργία της Ένωσης (Union-Find)

Transcript:

Κατ οίκον Εργασία 5 Σκελετοί Λύσεων Άσκηση 1 Χρησιμοποιούμε τις δομές: struct hashtable { struct node array[maxsize]; int maxsize; int size; struct node{ int data; int status; Στο πεδίο status σημειώνουμε την κατάσταση κάθε θέσης. Αν η θέση είναι κενή έχουμε status = -2, αν είναι deleted έχουμε status = -1, και, αν είναι γεμάτη θέτουμε την τιμή του status ως την τιμή >= 0 που αντιστοιχεί στον αριθμό των αποτυχημένων προσπαθειών που έγιναν για εισαγωγή του στοιχείου της συγκεκριμένης θέσης. Οι πράξεις υλοποιούνται ως εξής: Insert(struct hashtable h, int x) { if (h->maxsize == h->size) report Table is full k = x mod h->maxsize while (h->table[k]->status >= 0) { temp = h->table[k]->data; if (temp > x) { h->table[k] = x; x = temp; i = h->table[k]->status + 1; else i++; k = (x + i.x²) mod h->maxsize; h->table[k]->data = x; h->table[k[->status = i; Find(struct hashtable h, int x) { k = x mod h->maxsize while (h->table[k]->status >= -1) { temp = h->table[k]->data; 1

if (temp > x) return -1; if (temp == x) return k; else { i++; k = (x + i.x²) mod h->maxsize; return -1; Delete(struct hashtable h, int x) { k = Find(h, x); if (k == -1) return; else h->table[k]->status = -1; (β) Ο αρχικός πίνακας: -2-2 -2-2 -2-2 -2-2 -2-2 -2 O πίνακας μετά από τις εισαγωγές των 80 και 70: 80 70-2 -2-2 0 0-2 -2-2 -2-2 -2 Ο πίνακας μετά από την εισαγωγή του 14: 80 14 70-2 1-2 0 0-2 -2-2 -2-2 -2 Ο πίνακας μετά από την εισαγωγή του 81: 80 14 70 81-2 1-2 0 0-2 -2-2 -2 1-2 Ο πίνακας μετά από τις εισαγωγές των 83 και 60: 80 14 70 60 83 81-2 1-2 0 0 0 0-2 -2 1-2 Ο πίνακας μετά από την εισαγωγή του 15: 2

80 14 15 60 83 81 70-2 1-2 0 0 0 0-2 3 1-2 Ο πίνακας μετά από τις εξαγωγές των 70 και 80: 80 14 15 60 83 81 70-2 -1-2 0 0 0 0-2 3-1 -2 Ο πίνακας μετά από την εισαγωγή του 21: 80 14 15 60 83 81 70 21-2 -1-2 0 0 0 0-2 3-1 0 Ο πίνακας μετά από την εισαγωγή του 17: 80 81 14 15 60 17 81 83 21-2 -1 2 0 0 0 0-2 3 1 0 (γ) O πίνακας μετά από την εισαγωγή του 80: 80 0-2 -2-2 -2-2 -2-2 -2-2 Παρατηρούμε πως οι συναρτήσεις δεν επιτρέπουν εισαγωγή του 70 στον πίνακα και η διαδικασία Insert μπαίνει σε ένα ατέρμονο βρόχο προσπαθώντας να εντοπίσει κενή θέση για το στοιχείο αυτό στον πίνακα. Άσκηση 2 Αναπαριστούμε το δεδομένο ως ένα γράφο, κόμβοι του οποίου είναι οι σταθμοί του δικτύου και ακμή ανάμεσα σε δύο κόμβους υπάρχει αν και μόνο αν οι σταθμοί που αντιστοιχούν στους δύο κόμβους ενώνονται από επικοινωνιακή γραμμή. Πιο κάτω, παρουσιάζεται η ιδέα των αλγορίθμων που υπολογίζουν την εμβέλεια κάποιου δεδομένου σταθμού v. Επέκταση για τους υπόλοιπους σταθμούς μπορεί να γίνει με κλήση της διαδικασίας μια φορά για κάθε κορυφή. (α) Το πρόβλημα λύνεται με τη βοήθεια της διαδικασίας κατά-πλάτος-διερεύνηση μέχρι την επιθυμητή απόσταση 4. Υποθέτουμε ότι ο γράφος είναι υλοποιημένος με πίνακα γειτνίασης. struct graph{ int matrix[max][max]; int size; CytandT(graph G, vertex v){ Q=MakeEmptyQueue(); 3

for ( i=0; i<= G->size-1; i++ ) // for each w in G Visited[i]=False; Visited[v]= True; Enqueue((v,0),Q); while (!IsEmpty(Q)){ (w,a) = Dequeue(Q); print w; if (a < 4) for ( u = 0; u <= size-1; u++ ) if (G->matrix[w][u] > 0) // for each u adjacent to w if (Visited[u]=False) { Visited[u]=True; Enqueue((u,a+1),Q); Χρόνος εκτέλεσης: Ο( V 2 ) (β) Υποθέτουμε ότι κάθε ακμή (u,v) έχει κάποιο βάρος w(u,v). Το πρόβλημα λύνεται με παραλλαγή του πιο πάνω αλγόριθμου. Συγκεκριμένα, χρησιμοποιούμε μια βοηθητική δομή στην οποία αποθηκεύουμε κόμβους συνοδευόμενους από το βάρος του συντομότερου μονοπατιού που έχει εντοπιστεί μέχρις στιγμής προς αυτούς. Το βάρος αυτό υπολογίζεται ως εξής: κατ αρχή, ο κόμβος εκκίνησης βρίσκεται σε απόσταση 0 από τον εαυτό του. Στη συνέχεια για κάθε κόμβου u που συναντούμε επεξεργαζόμαστε τους γείτονες του και, για κάθε γείτονα v, θεωρούμε ότι η συντομότερη απόσταση προς τον v είναι η απόσταση του u από τον κόμβο εκκίνησης + το βάρος της ακμής (u,v) (δηλαδή το w(u,v)). Η δομή που χρησιμοποιούμε σε αυτό τον αλγόριθμο είναι ο σωρός αφού μας ενδιαφέρει σε κάθε βήμα να επιλέγουμε και να επεξεργαζόμαστε την κοντινότερη κορυφή. H υλοποίηση του γράφου με λίστες γειτνίασης γίνεται με τον γνωστό τρόπο. Παρατηρούμε ότι αφού ο γράφος μας είναι γράφος με βάρη, κάθε κόμβος της συνδεδεμένης λίστας είναι εγγραφή με τρία πεδία: vertex, το οποίο δίνει το όνομα του κόμβου, weight, που δίνει το βάρος τη ακμής που αντιστοιχεί στη συγκεκριμένη αναφορά, και next, το οποίο δείχνει τον επόμενο κόμβο μέσα στην λίστα. Συγκεκριμένα, υποθέτουμε τις πιο κάτω δομές: struct node { struct graph { int vertex; struct node head[max]; int weight; int size; struct node *next ; CytandT2(graph G, vertex v){ heap Q; for ( i=0; i<= G->size-1; i++ ) // for each w in G Visited[i]=False; Visited[v]= True; Insert((v,0),Q); while (!IsEmpty(Q)){ 4

(u,a) = Delete Min(Q); print u; p = G->head[u]; while (p!=null) { // for each v adjacent to u v = p->vertex; w = p->weight; if (a + w <= m AND Visited[v] == FALSE) Insert((u,a+w), Q); Visited[u] = TRUE; p = p->next; Χρόνος εκτέλεσης: Ο( V + E ) Άσκηση 3 (α) Το πρόβλημα μπορεί να μοντελοποιηθεί ως πρόβλημα γράφων ως εξής: Θεωρήστε τον γράφο με βάρη G=(V,E) όπου V = V 1 V 2 και V 1 είναι το σύνολο των εργασιών τύπου OR V 2 είναι το σύνολο των εργασιών τύπου AND Ε={( i, j) αν η εργασία i αποτελεί προαπαιτούμενο της εργασίας j Η δομή που θα χρησιμοποιήσουμε για την υλοποίηση του γράφου είναι: struct node { struct graph { int vertex; struct node head[max]; struct node *next ; int type[max]; int size; Στον πίνακα type γράφουμε τον τύπο των διεργασιών σημειώνοντας type[i] = 0 αν η εργασία είναι τύπου AND και type[i] = 1 αν η εργασία είναι τύπου OR. (β) Η διαδικασία είναι μια παραλλαγή του αλγόριθμου τοπολογικής ταξινόμησης η οποία διακρίνει ανάμεσα στις διεργασίες τύπου OR και AND, και, σε περίπτωση που εκτελεστεί κάποιο προαπαιτούμενο μιας διεργασία τύπου OR, τότε την καθιστά έτοιμη για εκτέλεση τοποθετώντας την στην ουρά. TopSort(graph G){ MakeEmpty(Q); int I[G->size]; for (u = 0; u < G->size; u++) I[u] = 0; for (u = 0; u < G->size; u++) p = G->head[u]; while (p!= NULL) I[p->vertex]++; for (u = 0; u < G->size; u++) if (I[u]==0) Enqueue(u, Q); 5

while (! IsEmpty(Q)) { u = Dequeue(Q); p = G->head[u]; while (p!= NULL) I[p->vertex]--; if (G->type[p->vertex] == 1 OR I[p->vertex] == 0) Enqueue(p->vertex, Q) if (i < V -1) report The tasks contain a dependency cycle ; (γ) Μετά από εκτύπωση των τεσσάρων πρώτων διεργασιών, παρατηρούμε ότι η εκτέλεση της e 5 είναι αδύνατη λόγω ύπαρξης κύκλου ανάμεσα στις 3 τελευταίες διεργασίες. Άσκηση 4 (α) Έστω γράφος G=(V,E) και Ε υποσύνολο του Ε που συνδέει όλες τις κορυφές του V και έχει το ελάχιστο βάρος. Θέλουμε να δείξουμε ότι, αν τα βάρη των ακμών του Ε είναι θετικά, οι ακμές Ε σχηματίζουν ένα δένδρο. Ας υποθέσουμε, για να φθάσουμε σε αντίφαση ότι το Ε δεν είναι δένδρο, δηλαδή περιέχει κάποιο κύκλο. Έστω (u,v) κάποια ακμή του κύκλου. Παρατηρούμε ότι εκτός από την ακμή (u,v) υπάρχει και άλλο μονοπάτι που ενώνει τις δύο κορυφές u και v, δηλαδή το υπόλοιπο του κύκλου που περιέχει την ακμή, έστω path. Θεωρούμε το σύνολο Ε {(u,v). To σύνολο αυτό έχει προφανώς μικρότερο βάρος από το βάρος του Ε. Συγκεκριμένα, αν γράψουμε W(Ε) και W(E ) για το άθροισμα των βαρών των συνόλων Ε και Ε αντίστοιχα, παρατηρούμε ότι W(E ) = W(E) w(u,v) και αφού το βάρος όλων των ακμών είναι θετικό w(u,v) > 0 και W(E ) < W(E ). Επίσης το σύνολο Ε {(u,v) συνδέει όλους τους κόμβους του γράφου: Για οποιοδήποτε ζεύγος κορυφών a και b αφού συνδέονται από τις ακμές Ε υπάρχει μονοπάτι που τις συνδέει. Αν το μονοπάτι αυτό δεν περιέχει την ακμή οποιοδήποτε (u,v) τότε προφανώς οι δύο κορυφές συνδέονται και μέσω τον ακμών Ε {(u,v), διαφορετικά, αν περιέχει τη συγκεκριμένη ακμή, τότε η ακμή αυτή μπορεί να αντικατασταθεί από το μονοπάτι path. Το καινούριο μονοπάτι εξακολουθεί να συνδέει τις δύο κορυφές και επιπλέον περιέχει ακμές μόνο από το σύνολο Ε {(u,v). Κατά συνέπεια το Ε {(u,v) είναι ένα σύνολο ακμών που συνδέει όλους τους κόμβους και έχει μικρότερο βάρος από το Ε Το πιο πάνω μας οδηγεί σε αντίφαση στην υπόθεση ότι το σύνολο E είναι σύνολο ακμών που συνδέει όλες τις κορυφές και έχει το ελάχιστο βάρος. (β) Το σύνολο ακμών που συνδέει όλες τις κορυφές με το ελάχιστο βάρος είναι το {(Α,Β), (Β,Γ), (Γ,Α) και προφανώς δεν είναι δένδρο. 6

(γ) Η ιδέα αυτή μας οδηγεί στον πιο κάτω αλγόριθμο. Ξεκίνα με το κενό σύνολο ακμών Τ και κατασκεύασε ένα γεννητορικό δένδρο ως εξής. 1. Επέλεξε την ακμή με τον μικρότερο βάρος από αυτές που δεν έχεις επεξεργαστεί. 2. Εφόσον η ακμή αυτή δεν δημιουργεί κύκλο στο σύνολο Τ τότε πρόσθεσέ την σε αυτό. Διαφορετικά επανέλαβε από το βήμα 1 και συνέχισε μέχρι να επιλέξεις V - 1 ακμές. Spanning_Tree(graph G){ buildheap(η); (που περιέχει όλες τις ακμές του G) T = ; while (i < V -1){ (u,v) = DeleteMin(H); if T {(u,v) does not contain a cycle T = T {(u,v); i++; 7