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

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

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

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

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

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

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

Σωροί. Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: Ουρές Προτεραιότητας Σωροί υλοποίηση και πράξεις Ο αλγόριθμος ταξινόμησης HeapSort

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Δομές Δεδομένων. Ενότητα 10: Πλήρη Δυαδικά Δέντρα, Μέγιστα/Ελάχιστα Δέντρα & Εισαγωγή στο Σωρό- Ο ΑΤΔ Μέγιστος Σωρός. Καθηγήτρια Μαρία Σατρατζέμη

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

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

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

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

Ουρά Προτεραιότητας (priority queue)

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

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

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

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

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

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

Σημειωματάριο Τετάρτης 29 Νοε. 2017

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

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

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

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

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

Συνδετικότητα γραφήματος (graph connectivity)

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

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

Εισαγωγή στους Αλγορίθμους

Αλγόριθμοι Eλάχιστα μονοπάτια

Προγραμματισμός Ι (ΗΥ120)

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

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

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

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

ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΥΠΡΟΥ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ EPL035: ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ ΚΑΙ ΑΛΓΟΡΙΘΜΟΙ

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

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

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

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

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

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

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

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

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

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

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

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

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

Ενότητες 3 & 4: Δένδρα, Σύνολα & Λεξικά Ασκήσεις και Λύσεις

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

ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΥΠΡΟΥ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ. ΑΣΚΗΣΗ 3 Δέντρα

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

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

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

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

Κεφάλαιο 6 Ουρές Προτεραιότητας

Δοµές Δεδοµένων. Αλγόριθµοι & Πολυπλοκότητα (Χειµώνας 2011) Ουρές Προτεραιότητας 2

Αλγόριθµοι και Πολυπλοκότητα

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

Μάθημα 21: Ουρές (Queues)

Ουρά Προτεραιότητας (priority queue)

Διάλεξη 9: Αφηρημένοι Τύποι Δεδομένων. Διδάσκων: Παναγιώτης Ανδρέου

Ουρά Προτεραιότητας: Heap

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

Διάλεξη 15: Δομές Δεδομένων IV (Διπλά Συνδεδεμένες Λίστες)

ΕΠΛ 232: Αλγόριθµοι και Πολυπλοκότητα. Κατ οίκον Εργασία 2A Σκελετοί Λύσεων

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

Δομές Αναζήτησης. κλειδί από ολικά διατεταγμένο σύνολο. Θέλουμε να υποστηρίξουμε δύο βασικές λειτουργίες: Εισαγωγή ενός νέου στοιχείου

Διάλεξη 11: Δέντρα Ι - Εισαγωγή σε Δενδρικές Δομές Δεδομένων

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

Προγραμματισμός Ι. Δομές Δεδομένων. Δημήτρης Μιχαήλ. Ακ. Έτος Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο

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

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

ΟΙΚΟΝΟΜΙΚΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΑΘΗΝΩΝ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ. Δοµές Δεδοµένων

Διάλεξη 15: Δομές Δεδομένων IV (Διπλά Συνδεδεμένες Λίστες)

Κατανεμημένα Συστήματα Ι

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

Ουρά Προτεραιότητας: Heap

Transcript:

Κατ οίκον Εργασία 4 Σκελετοί Λύσεων Άσκηση 1 α) Εφαρμογή της BuildHeap στον πίνακα [-,, 3, 5, 10, 17, 8, 1, 11,, 15] έχει τις εξής ενδιάμεσες καταστάσεις. Αρχική Κατάσταση: 10 17 8 1 11 15 Μετά από εφαρμογή της PercoladeDown του στοιχείου στη θέση 5: 10 15 8 1 11 17 Μετά από εφαρμογή της PercoladeDown του στοιχείου στη θέση 4: 15 8 1 Μετά από εφαρμογή της PercoladeDown του στοιχείου στη θέση 3: 3 1 15 8 5 1

Μετά από εφαρμογή της PercoladeDown του στοιχείου στη θέση : 1 3 15 8 5 Μετά από εφαρμογή της PercoladeDown του στοιχείου στη θέση 1: 1 5 3 15 8 β) Μετά από εφαρμογή της DeleteMin: 10 15 8 11 17 γ) Μετά από εφαρμογή της IncreaseKey (4, 8): 11 15 8 18 17 δ) Μετά από εφαρμογή της Insert (4): 11 4 8 18 17 15

ε) Μετά από εφαρμογή της Insert (7): 11 4 8 18 17 15 7 Άσκηση Χρησιμοποιούμε τις πιο κάτω δομές typedef struct fourheap{ typedef struct Quadruple { int size; int key1; quadruple data[maxsize]; int key; 4heap; int key3; int key4; quadruple ; και υποθέτουμε πως μία σωρός έχει τύπο fourheap και περιέχει τετράδες τύπου quadruple. Οι πράξεις υλοποιούνται παρόμοια με τις πράξεις σε σωρό. Η βασική διαφορά αφορά στο ότι, σε αδελφούς κόμβους, τα κλειδιά του ενός πρέπει να είναι μικρότερα από τα κλειδιά του άλλου. (α) Η διαδικασία εισαγωγής ξεκινά τοποθετώντας τα 4 νέα στοιχεία στην πρώτη διαθέσιμη θέση του πίνακα, έστω h. Συνδυάζουμε τα στοιχεία της θέσης h με τον πατέρα της, έστω f, έτσι ώστε η θέση h να πάρει τα μεγαλύτερα στοιχεία και ο πατέρας τα μικρότερα. Συνδυάζουμε τα στοιχεία της θέσης h με τον αδελφό της, αν υπάρχει αδελφός, έτσι ώστε ο αδελφός που είχε τα μεγαλύτερα στοιχεία να πάρει τα 4 μεγαλύτερα στοιχεία των δύο κόμβων και ο άλλος τα μικρότερα. Συνεχίσουμε την διαδικασία για h = f μέχρις ότου είτε φθάσουμε στη ρίζα είτε φθάσουμε σε κάποιο σημείο όπου ο κόμβος h έχει μεγαλύτερα στοιχεία από τον πατέρα του. Σε ψευδοκώδικα έχει ως εξής: Insert (4heap E, quadruple x){ check E->size < maxsize; int h = E->size + 1; E->size++; Ε.data[h] = x; while(h>1 && υπάρχει κλειδί στον πατέρα, (contents[ h/ ]), μεγαλύτερο από κάποιο κλειδί του contents[h]) { data[h] = τα 4 μεγαλύτερα κλειδιά των θέσεων contents[ h/ ] και contents[h]; data[ h/ ] τα 4 μικρότερα κλειδιά των θέσεων contents[ h/ ] και contents[h]; if (h = h/ ) brother = h+1; brother = h-1; 3

if (brother <= E->size) if (maximum key of data[brother] > maximum key of data[h]) { data[brother] = τα 4 μεγαλύτερα κλειδιά των θέσεων data[brother] και data[h]; data[h]= τα 4 μικρότερα κλειδιά των θέσεων data[brother] και data[h]; data[h] = τα 4 μεγαλύτερα κλειδιά των θέσεων data [brother] και data[h]; data[brother]= τα 4 μικρότερα κλειδιά των θέσεων data[brother] και data[h]; (β) Η διαδικασία εξαγωγής ελαχίστου ξεκινά εξάγοντας το στοιχείο της πρώτης θέσης και τοποθετώντας εκεί τα κλειδιά της τελευταίας θέσης του πίνακα. Ονομάζουμε την πρώτη θέση h. Ελέγχουμε τα παιδιά της θέσης h και συνδυάζουμε τα στοιχεία της με αυτά του παιδιού της με τα μικρότερα κλειδιά, έστω s, έτσι ώστε η θέση h να αποκτήσει τα 4 μικρότερα κλειδιά και η θέση s τα μεγαλύτερα. Στη συνέχεια συνδυάζουμε τα κλειδιά της θέσης s με αυτά του αδελφού της (αν υπάρχει), έστω, q, έτσι ώστε η θέση s να αποκτήσει τα 4 μεγαλύτερα στοιχεία και η θέση q τα 4 μικρότερα. Συνεχίσουμε την διαδικασία για h = s μέχρις ότου είτε φθάσουμε σε φύλλο είτε φθάσουμε σε κάποιο σημείο όπου ο κόμβος h έχει μικρότερα στοιχεία από το μικρότερο παιδί του. Σε ψευδοκώδικα έχει ως εξής: quadrable DeleteMin (4heap E){ if IsEmpty(E) report error; return; min = E->data[1]; E->data[1] = E->data[E->size]; E->size--; h=1; while(h* <= size){ minchild = h*; if (minchild == size) { maxchild = 0; if (max E->data[minchild+1]< min E->[minchild]) { minchild++; maxchild = minchild 1; maxchild = minchild+1; if (min E->data[minchild] < max E->[h]) { data[h] = τα 4 μικρότερα κλειδιά των θέσεων contents[minchild] και contents[h]; data[minchild] = τα 4 μεγαλύτερα κλειδιά των θέσεων contents[minchild] και contents[h]; 4

if (maxchild!= 0) { data[minchild] = τα 4 μικρότερα κλειδιά των θέσεων data[minchild] και data[maxchild]; data[maxchild] = τα 4 μεγαλύτερα κλειδιά των θέσεων data[minchild] και data[maxchild]; break; h = minchild; return min; Άσκηση 3 Το πρόβλημα μπορεί να μεταφραστεί σε πρόβλημα εύρεσης του μονοπατιού με το ελάχιστο κόστος σε γράφο όπου κάθε ακμή έχει βάρος 1. (α) Θεωρήστε τον γράφο με βάρη G = (V, E) όπου V = { P 1, P,..., Pn, δηλαδή υπάρχει μία κορυφή για κάθε ιστοσελίδα Ε = {( P i, Pj ) αν υπάρχει σύνδεσμος μεταξύ των ιστοσελίδων P i και Υποθέτουμε ότι οι γράφοι υλοποιούνται με βάση την πιο κάτω δομή: struct graph{ int matrix[max][max]; int size; (β) Το ελάχιστο μονοπάτι μπορεί να υπολογιστεί με μια κατά πλάτος διερεύνηση στο γράφο. Επομένως, εφαρμόζουμε κατά πλάτος διερεύνηση από τον κόμβο εκκίνησης φυλάγοντας για κάθε κόμβο τους κόμβους που έχουμε περάσει στο μονοπάτι από τον κόμβο εκκίνησης και μόλις συναντήσουμε τον κόμβο προορισμούγια πρώτη φορά επιστρέφουμε το μονοπάτι που έχουμε υπολογίσει: Reachable(vertex A, vertex B, graph G){ int Visited[n]; int Previous[n]; Q=MakeEmptyQueue(); for ( i=0; i<= G->size-1; i++ ) // for each w in G Visited[i]=False; Visited[A]= True; Enqueue(A,Q); while (!IsEmpty(Q)){ w = Dequeue(Q); if (w == B) print w; while(w!= A) w = Previous[w]; print w; P j 5

return; for ( u = 0; u <= G->size-1; u++ ) if (G->matrix[w][u] > 0) // for each u adjacent to w if (Visited[u]=False) { Previous[u] = w; Visited[u]=True; Enqueue(u,Q); Χρόνος Εκτέλεσης: Ο( V ), όπου V είναι ο αριθμός κορυφών του γράφου. Για να έχουμε αποδοτική συνάρτηση MasterPage, πρέπει να τροποποιήσουμε τη συνάρτηση BFS, έτσι ώστε να υπολογίζει τον αριθμό των διαφορετικών κόμβων που είναι προσβάσιμοι από την σελίδα εκκίνησης. Αν ο αριθμός των προσβάσιμων κόμβων είναι ίσος με τον αριθμό των κόμβων του γράφου, τότε η σελίδα εκκίνησης είναι MasterPage. int Reachable(vertex A, graph G){ Q=MakeEmptyQueue(); int reachable = 1; // Για τον κόμβο Α for ( i=0; i<= G->size-1; i++ ) // for each w in G Visited[i]=False; Visited[A]= True; Enqueue(A,Q); while (!IsEmpty(Q)){ w = Dequeue(Q); for ( u = 0; u <= G->size-1; u++ ) if (G->matrix[w][u] > 0) // for each u adjacent to w if (Visited[u]=False) { Visited[u]=True; Enqueue(u,Q); reachable++; if (G->size == reachable) return 1; return 0; Χρόνος Εκτέλεσης: Ο( V ), όπου V είναι ο αριθμός κορυφών του γράφου. ΜasterPage(graph G) { for ( w=0; w<= G->size-1; i++ ) { // for each w in G if (Reachable(w, G)) { // αν όλοι είναι προσβάσιμοι print w; Χρόνος Εκτέλεσης: Ο( V 3 ), όπου V είναι ο αριθμός κορυφών του γράφου. 6