Γραφήματα (Graphs) Κατευθυνόμενο γράφημα ακμές με κατεύθυνση (μονόδρομος) G = (V, E) Κορυφές και ακμές. μονοπάτι 1,2,3,4 κορυφή 3
|
|
- Φαίδρα Δημητρακόπουλος
- 8 χρόνια πριν
- Προβολές:
Transcript
1 G = (V, E) Κορυφές και ακμές V(G ) = {,,3,, Γραφήματα (Graphs) G E(G ) = {(,), (,3), (,), (3,), (,) μονοπάτι,,3, κορυφή 3 ακμή γειτονικές 3 Κατευθυνόμενο γράφημα ακμές με κατεύθυνση (μονόδρομος) V(G 3 ) = {,,3, E(G 3 ) = {<,>, <,3>, <3,>, <,> G 3 Ισχυρά συνδεδεμένο αν για κάθε ζεύγος κόμβων Vi, Vjυπάρχoυν κατευθυνόμενα μονοπάτια από Vi σε Vj και απόvj σε Vi Το G3 είναι ισχυρά συνδεδεμένο κατευθυνόμενο γράφημα To Δένδρο, ειδική περίπτωση γραφήματος G Ο ΑΤΔ Γράφημα και οι υλοποιήσεις του Ο ΑΤΔ γράφημα G = (V, E) αποτελείται από ένα σύνολο V (κορυφές), μια σχέση Ε (ακμές) και πράξεις που επιδρούν πάνω στα δύο αυτά σύνολα μήκος μονοπατιού (διαδρομή από κόμβο έως κόμβο) κύκλος (μονοπάτι από έναν κόμβο στον εαυτό του) αν δεν υπάρχει κύκλος τότε ακυκλικό (πχ Δένδρο) συνδεδεμένο (αν για ζεύγη κόμβων υπάρχει μονοπάτι) βαθμός κόμβου (ο αριθμός των ακμών)
2 Βασικές πράξεις Δημιουργία γραφήματος: Δημιουργεί ένα κενό γράφημα Γειτονική κορυφή: Ελέγχει αν υπάρχει ακμή μεταξύ δύο κορυφών 3 Ενημέρωση: Τροποποιεί το περιεχόμενο μιας κορυφής Ανάκτηση: Επιστρέφει το περιεχόμενο μιας κορυφής Διαγραφή κορυφής: Διαγράφει μια κορυφή από το γράφημα μαζί με τις ακμές που περιέχουν την κορυφή αυτή 6 Διαγραφή ακμής: Διαγράφει μια ακμή από το γράφημα 7Εισαγωγή κορυφής: Εισάγει μια κορυφή στο γράφημα, χωρίς τη σύνδεσή της με άλλες κορυφές 8 Εισαγωγή ακμής: Εισάγει μια ακμή στο γράφημα Ο γειτονικός πίνακας ενός γραφήματος δεν είναι μονοσήμαντα ορισμένος, αφού η κατασκευή του εξαρτάται από την αρίθμηση των κορυφών του γραφήματος G 3 3 Γειτονικός πίνακας κατευθυνόμενου γραφήματος Υλοποίηση του ΑΤΔ Γράφημα με πίνακα #define plithos 00 Υλοποίηση με Πίνακα G typedef struct { int typos_pinaka[plithos][plithos]; int arkrfon ; // ο πραγματικός αριθμός κορυφών graphima; 3 graphima G; κατασκευή γειτονικού πίνακα (πίνακας γειτνίασης): αν κορυφές i,j γειτονικές A[i,j]= αλλιώς 0 (για μη-κατευθυνόμενα οι πίνακες είναι συμμετρικοί)
3 /*Δημιουργία κενού γραφήματος (μερική απόκρυψη)*/ void dimiourgia(graphima *G){ G->arkrfon = 0; int diagrafi_akmis(graphima *G, korifi p, korifi q){ /* Προ: H (p,q) είναι ακμή του μη κατευθυνόμενου γραφήματος *G Mετά: Aν οι κορυφές p,q δεν ανήκουν στο σύνολο των κορυφών του γραφήματος *G τότε επιστρέφει-, αλλιώς αν η (p,q) είναι ακμή του γραφήματος *G τότε διαγράφεται η (p,q) από το *G και η συνάρτηση επιστρέφει, αλλιώς η συνάρτηση επιστρέφει 0 */ if ( (p<0) (p > G->arkrfon-) (q<0) (q > G->arkrfon-) ) return -; /* Λάθος κορυφές */ else if (!geitoniki(*g,p,q,)) return 0; else{ G->geit_pin[p][q] = 0; G->geit_pin[q][p] = 0; return ; int geitoniki(graphima G, korifi p, korifi q){ /* Eλέγχει αν οι (p,q) είναι γειτονικές στο μη κατευθυνόμενο γράφημα G */ if( (p < 0) (p > Garkrfon-) (q < 0) (q > Garkrfon-)) return -; /* Λάθος κορυφή */ else return (Ggeit_pin[p][q]); int eisagogi_akmis(graphima *G, korifi p,korifi q){ /* Προ: Oι κορυφές p,q ανήκουν στο σύνολο κορυφών του *G και η ακμή (p,q) δεν ανήκει στο μη κατευθυνόμενο γράφημα Mετά: Aν οι κορυφές p,q δεν ανήκουν στο σύνολο των κορυφών του *G τότε η συνάρτηση επιστρέφει -, αλλιώς αν η ακμή (p,q) δεν ανήκει στο σύνολο ακμών του *G τότε εισάγεται και η συνάρτηση επιστρέφει, αλλιώς η συνάρτηση επιστρέφει 0 */ if (p<0) (p > G->arkrfon-) (q<0) (q > G->arkrfon-) ) return -; /* Λάθος κορυφές */ else if (geitoniki(*g, p, q)) return 0; else{ G->geit_pin[p][q] = ; G->geit_pin[q][p] = ; return ; 3
4 int eisagogi_korifis(graphima *G, korifi *p){ /* Προ:Tο γράφημα *G δεν έχει το μέγιστο πλήθος κορυφών Mετά: Eισάγεται στο γράφημα *G η κορυφή G->arkrfon χωρίς αυτή να συνδεθεί με άλλες κορυφές, το *p γίνεται ίσο με αυτήν και η συνάρτηση επιστρέφει Aν το *G είχε το μέγιστο πλήθος κορυφών τότε η συνάρτηση επιστρέφει 0 */ korifi i; if (G->arkrfon == plithos) return 0; else{ G->arkrfon++; *p = (G->arkrfon)-; /* Tελευταία κορυφή */ for (i = 0; i <= *p; i++){ G->geit_pin[*p][i] = 0; /*Nέα γραμμή*/ G->geit_pin[i][*p] = 0; /*Nέα στήλη*/ return ; int diagrafi_korifis(graphima *G, korifi p) { korifi i,j; if ( (p<0) (p > (G->arkrfon)-) ) return 0; /* Λάθος κορυφή */ else { /* μετακίνηση i+ γραμμής προς τα πάνω */ for ( i = p; i <= (G->arkrfon)-; i++) for ( j = 0; j <= (G->arkrfon)-; j++) G->geit_pin[i][j]=G->geit_pin[i+][j]; /* μετακίνηση i+ στήλης προς τα αριστερά */ for ( i = p; i <= (G->arkrfon)-; i++) for ( j = 0; j <= (G->arkrfon)-; j++) G->geit_pin[j][i] =G->geit_pin[j][i+]; G->arkrfon--; return ; int diagrafi_korifis(graphima *G, korifi p){ /* Προ : H κορυφή p ανήκει στο σύνολο κορυφών του γραφήματος *G Mετά: Aν η κορυφή p ανήκει στο σύνολο κορυφών του γραφήματος *G τότε αυτή διαγράφεται και διαγράφονται και όλες οι ακμές που περιέχουντην κορυφή p και η συνάρτηση επιστρέφει, αλλιώς η συνάρτηση επιστρέφει 0 Mετά από αυτές τις διαγραφές το γράφημα έχει ως κορυφές του τις 0,,, (G->arkrfon)- */ Υλοποίηση του ΑΤΔ Γράφημα με συνδεδεμένες λίστες (κόμβοι και δείκτες) μονοπάτι,,3, κορυφή 3 ακμή γειτονικές G
5 Πίνακας δεικτών 3 Α Λίστα γειτονικών κορυφών του G κόμβοι κεφαλές 3 κόμβοι γειτονικών κορυφών δείκτες Λίστα γειτονικών κορυφών του G A B E C D κόμβοι κεφαλές Data Data Data Data Data κόμβοι γειτονικών κορυφών E B C C B D D A Οι δηλώσεις στην C για την παράσταση ενός γραφήματος με λίστα γειτονικών κορυφών είναι οι ακόλουθες : #define plithos_korifon B E typedef typos_dedomenon; /* τδκορυφών */ typedef int arithmos_korifis; G C D 3 typedef struct korifi *kdktis; typedef struct korifi{ arithmos_korifis arkorifis; kdktis epomenos ; ; /* κόμβος κορυφή */
6 typedef struct kefali *kefdktis; typedef struct kefali{ typos_dedomenon dedomena; kdktis epomenos; ; /* κόμβος κεφαλή ένας για κάθε κορυφή*/ typedef struct{ kefdktis pinakas[plithos_korifon]; int k; /* αριθμός κορυφών */ graphima; graphima G; κόμβοι κεφαλές 3 Απεικόνιση Αραιού Πίνακα, ως γράφημα G Ορθογώνια Λίστα (αραιοί πίνακες -8%!=0) Υλοποίηση Γραφήματος με Λίστα Ακμών Β Α E 3 3 Β Α E 3 3 C D 3 C D 3 G 6
7 λίστα κορυφών G Α B C D E <ΑΒ> <DD> λίστα ακμών <ΑC> <BC> <CB> <CD> <ΑE> /*Δημιουργία κενού γραφήματος*/ void dimiourgia(graphima *G){ *G = NULL; void enimerosi(typos_stoixeiou stoixeio, kdktis p){ /* Mετά:Eισάγει το stoixeio στον κόμβο που δείχνει ο p */ p->dedomena = stoixeio; typos_stoixeiou anaktisi(kdktis p){ /* Mετά: H συνάρτηση επιστρέφει το περιέχομενο του κόμβου που δείχνει δείκτης p */ return (p->dedomena); typedef typos_stoixeiou; /* δεδομένα κορυφής */ typedef struct korifi *kdktis; typedef struct akmi *adktis; typedef struct korifi { typos_stoixeiou dedomena; kdktis epomenos; /* επόμενος λίστας κορυφών*/ adktis kefali; /* δείκτης λίστας ακμών */ ; typedef struct akmi { typos_stoixeiou dedomena; /* δεδομένα ακμής πχ βάρος, απόσταση*/ kdktis akro; /* άκρο ακμής */ adktis epomenos; /* επόμενος λίστας ακμών */ ; typedef kdktis graphima; graphima G; int geitoniki(kdktis p, kdktis q){ int telos; adktis trexon; /*για τη σάρωση της λίστας ακμών */ int geit=0; trexon = p->kefali; /* αφετηρία από την κεφαλή */ telos = 0; while (!telos){ if (trexon == NULL) /* τέλος λίστας ακμών */ telos = ; else if ( trexon->akro == q ){ /* βρέθηκε */ telos = ; geit = ; else /*επόμενος κόμβος λίστας ακμών */ trexon = trexon->epomenos; return geit; 7
8 void diagrafi_korifis(kdktis p,graphima *G){ /* Mετά: H κορυφή που δείχνει ο p διαγράφεται */ kdktis trexon; trexon = *G; /* διατρέχει τη λίστα κορυφών */ while (!keni (trexon)){ /* δεν εξετάζεται η λίστα του p */ if (trexon! = p) /* διαγραφή της (trexon,p)*/ diagrafi_komvou(p,&(trexon->kefali)); proxorise (&trexon)/* στην επόμενη κορυφή*/ void diagrafi_listas(adktis* kefali){ /* Mετά: Διαγράφει όλους τους κόμβους μιας λίστας ακμών ξεκινώντας από την κεφαλή */ if (*kefali!=null){ diagrafi_listas(&((*kefali)->epomenos)); free (*kefali); *kefali = NULL; /* διαγραφή της λίστας ακμών της p */ diagrafi_listas(&(p->kefali)); /* βοηθητική */ diag_kor(p,g); /*διαγραφή κορυφής p */ void diagrafi_komvou(kdktis v, adktis *kefali) /* Mετά: Eντοπίζει και διαγράφει τον κόμβο της λίστας ακμών που ξεκινά απο τον *kefali του οποίου το πεδίο akro είναι ίσο με v */ adktis pros; if (*kefali!= NULL){ if (((*kefali)->akro) == v) /* Διαγραφή του κόμβου */ { pros = *kefali; *kefali = (*kefali)->epomenos; free(pros); else diagrafi_komvou(v, &((*kefali)->epomenos)); void eisagogi_korifis(graphima *G, typos_stoixeiou stoixeio) {/* Mετά: Eισάγεται ένας νέος κόμβος στην αρχή της λίστας κορυφών με δεδομένα stoixeio */ kdktis p; p = malloc(sizeof(struct korifi)); /* Συνδέει το νέο κόμβο με την κεφαλή της λίστας κορυφών του *G */ p->dedomena = stoixeio; p->epomenos = *G; p->kefali = NULL; /* Λίστα ακμών του p είναι κενή*/ /* O κόμβος που δείχνει ο p είναι η νέα κεφαλή της λίστας κορυφών του *G */ *G = p; 8
9 p Εισαγωγή Ακμής: μη κατευθυνόμενο (όπως εισαγωγή αρχή λίστας) Διαδρομή (ή Αναζήτηση) Γραφημάτων Διαδρομή πρώτα κατά βάθος Διαδρομήπρώτα κατά πλάτος Διαδρομή πρώτα κατά βάθος Α B C D q E F H G Μια διαδρομή πρώτα κατά βάθος είναι ΑBEFHCDG void eisagogi_akmis(kdktis p,kdktis q){ /* Mετά: Eισάγεται μια ακμή μεταξύ των κορυφών που δείχνουν οι p και q, σε ένα μη κατευθυνόμενο γράφημα */ adktis pros; if (!geitoniki(p,q)){ pros = p->kefali; p->kefali = malloc(sizeof(struct akmi)); /* Εισαγωγή στην αρχή & σύνδεση με q */ p->kefali->akro = q; p->kefali->epomenos = pros; /* Eπαναλαμβάνονται τα παραπάνω για το q */ pros = q->kefali; q->kefali = malloc(sizeof(struct akmi)); q->kefali->akro = p; q->kefali->epomenos = pros; αφετηρία αφετηρία A B C D E F G H Μια πρώτα κατά βάθος σειρά, ξεκινώντας από την κορυφή Α, είναι : ABFIHGCDE Ξεκινώντας από την Β ποτέ σε Α και Ε Πρέπει όμως να επισκεφτούμε όλες I 9
10 Αλγόριθμος Διαδρομής πρώτα κατά βάθος (ισχυρά συνδεδεμένου) Επισκέπτεται όλες τις κορυφές ενός γραφήματος που είναι συνδεδεμένες με την κορυφή v από την οποία ξεκινά, με την πρώτα κατά βάθος αναζήτηση Επίσκεψη της αρχικής κορυφής v Για κάθε γειτονική κορυφή w της v γίνονται τα εξής: Αν δεν έχουμε επισκεφτείτην w,εφαρμόζεται ο αλγόριθμος της αναζήτησης πρώτα κατά βάθος με αρχική κορυφή την w int episkeftike[plithos]; /* Πίνακας Επισκέψεων */ /*Προ: Το γράφημα G έχει δημιουργηθεί Μετά: Το υποπρόγραμμα episkepsi έχει εκτελεστεί για κάθε κορυφή του γραφήματος G με την πρώτα κατά βάθος σειρά Χρήση: Το υποπρόγραμμα diadromi παράγει την πρώτα κατά βάθος σειρά των κορυφών*/ /* ψευδοκώδικας για όλες τις υλοποιήσεις*/ void vathos(graphima G){ korifi k; for all k in G do /* ψευδοκώδικας */ episkeftike[k] = 0; for all k in G do /* ψευδοκώδικας */ if (!episkeftike[k]) diadromi_vathos(k); προβλήματα Π Ενα γράφημα μπορεί να περιέχει κύκλους, πράγμα που σημαίνει ότι είναι δυνατόν να επισκεφθούμε μία κορυφή περισσότερες από μία φορέςγια αυτό μαρκάρουμε τις κορυφές που επισκεπτόμαστε και ελέγχουμε αν τις έχουμε ξαναεπισκεφθεί Π Το άλλο φαινόμενο που μπορεί να παρουσιαστεί είναι εκείνο του μη συνδεδεμένου (για μη κατευθυνόμενο) ή μη ισχυρά συνδεδεμένου (για κατευθυνόμενο)γραφήματοςγια αυτό ξεκινάμε Διαδρομή από κάθε κορυφή του γραφήματος και αν δεν την έχουμε ξαναεπισκεφθεί ξεκινάμε νέα Διδρομή Η Διαδρομήπρώτα κατά βάθος περιγράφεται από τα παρακάτω δυο υποπρογράμματασε ψευδογλώσσα για να καλύπτει αφαιρετικά και τις τρεις υλοποιήσεις των γραφημάτων Στην συνέχεια τα εξειδικεύουμε για κάθε υλοποίηση /*Προ: k είναι κορυφή του γραφήματος G Μετά: Εχει εκτελεστεί η πρώτα κατά βάθος διαδρομή, με τη χρήση του υποπρογράμματος episkepsi για την k και για όλες τις γειτονικές της κορυφές*/ /* ψευδοκώδικας για όλες τις υλοποιήσεις*/ void diadromi_vathos(korifi k){ korifi w; episkepsi(k); episkeftike[k] = ; for all w γειτονικό to k do /* ψευδοκώδικας */ if (!episkeftike[w]) diadromi_vathos(w); 0
11 Εξειδίκευση: η υλοποίηση της Διαδρομής πρώτα κατά βάθος στην περίπτωση όπου το γράφημα παριστάνεται με γειτονικό πίνακα int episkeftike[plithos]; /*Προ: Εχει δημιουργηθεί ο γειτονικός πίνακας Μετά: Επίσκεψη όλων των κορυφών του γραφήματος με τη μέθοδο της αναζήτησης πρώτα κατά βάθος*/ void vathosp(graphima G){ korifi i; for (i=0; i<=(garkrfon-); i++) episkeftike[i] = 0; Εξειδίκευση: το γράφημα παριστάνεται με τη λίστα ακμών Κάθε κόμβος περιέχει ένα boolean πεδίο episkeftike, το οποίο αρχικά έχειτεθείίσομε falseγιακάθεκορυφή Η diadromi τροποποιείται ως εξής: for (i=0; i<=(garkrfon-); i++) if (!episkeftike[i]) diadromi_vathosp(g,i); /*Προ: i είναι μια κορυφή του γραφήματος Μετά: Η επίσκεψη της κορυφής i και των γειτονικών της έχειτελειώσει με την αναζήτηση πρώτα κατά βάθος*/ void diadromi_vathosp(graphima G, korifi i){ int j; episkepsi(i); /*επίσκεψη της i κορυφής*/ episkeftike[i] = ; for (j=0; j<= Garkrfon-; j++) if (geitoniki(i,j,g) && (!episkeftike[j])) diadromi_vathosp(g,j); void diadromi_vathosla(kdktis p){ /* Ο δείκτης p δείχνει την κορυφή αφετηρίας */ adktis trexon; kdktis q; episkepsi(p); p->episkeftike = ; trexon=p->kefali; while (trexon!=null){ q=trexon->akro; /* η q γειτονική της p */ if (!(q->episkeftike)) diadromi_vathosla(q); trexon = trexon->epomenos;
12 Πολυπλοκότητα Διαδρομής κατά βάθος Γειτονικός Πίνακας : Ο(n ), επειδή Ο(n) για γειτονικές x n Λίστα γειτονικών κορυφών : Ο(e) (το πολύ e κόμβοι) Λίστα ακμών : Ο(n+e) Συνήθως e << n Οι υλοποιήσεις με λίστες έχουν πιο αποδοτικές αναζητήσεις Η υλοποίηση με πίνακα χρησιμοποιείται σε αλγεβρικούς υπολογισμούς με πίνακες (μετάβασης) Αναζήτηση πρώτα κατά πλάτος A Β C D E F G H A B C D E F G H Αναζήτηση πρώτα κατά πλάτος B F Η αναζήτηση πρώτα κατά πλάτος ενός γραφήματος είναι ανάλογη με την επίσκεψη των κόμβων ενός δυαδικού δέντρου κατά επίπεδα Αν κατά τη διαδρομή αυτή επισκέφτηκε η κορυφή v, τότε στη συνέχεια επισκέπτονται όλες οι γειτονικές της κορυφές τοποθετώντας τις γειτονικές τους κορυφές σε μια λίστα (ουρά) αναμονής προκειμένου να επισκεφτούν, αφού πρώτα επισκεφτούν όλες οι γειτονικές κορυφές της v αφετηρία A C D E G I H A B D E F C H G I B F G I H C D A καιε;
13 Ο αλγόριθμος της αναζήτησης πρώτα κατά πλάτος είναι παρόμοιος με εκείνον της αναζήτησης πρώτα κατά βάθος με τη διαφορά ότι τώρα προστίθεται η δημιουργία της ουράς των κορυφών και καλεί diadromi_platos typedef korifi typos_stoixeiou; typos_oura oura_korifon; int episkeftike[plithos]; void platos(graphima G){ korifi k; for all k in G do episkeftike[k] = 0; dimiourgia(&oura_korifon); for all k in G do if (!episkeftike[k]) diadromi_platos(k); Επαναληπτικός αλγόριθμος void diadromi_platos(korifi k){ /*Προ: k είναι η κορυφή του γραφήματος Μετά: Έχει εκτελεστεί η κατά πλάτος διαδρομή */ korifi w,i; episkeftike[k] = ; prosthesi(&oura_korifon,k); while (!keni(oura_korifon)){ apomakrynsi(&oura_korifon,&i); episkepsi(i); for all w adjacent to i do /* ψευδοκώδικας */ if (!episkeftike[w]){ episkeftike[w] = ; prosthesi(&oura_korifon,w); Όλες οι αλλαγές βρίσκονται στον αλγόριθμο του τρόπου επίσκεψης των κορυφών Πιο συγκεκριμένα ο αλγόριθμος της διαδρομής των κορυφών του γραφήματος τροποποιείται στον παρακάτω: Εξειδίκευση: το γράφημα παριστάνεται με τη λίστα ακμών, τότε υποθέτουμε ότι κάθε κόμβος περιέχει ένα boolean πεδίο episkeftike, το οποίο αρχικά έχει τεθεί ίσο με false για κάθε κορυφή Η δε διαδρομή τροποποιείται ως εξής: /*Ο δείκτης p δείχνει την κορυφή-αφετηρία Προ: Το γράφημα G έχει δημιουργηθεί Μετά: Εχει εκτελεστεί η κατά πλάτος διαδρομή όλων των κορυφών του γραφήματος Χρήση: Οι βασικές πράξεις της ουράς*/ 3
14 void diadromi_platosla(kdktis p){ adktis trexon; kdktis q,i; p->episkeftike = ; prosthesi(&oura_korifon, p); while (!(keni(oura_korifon))){ apomakrynsi(&oura_korifon, &i); episkepsi(i); trexon=i->kefali; while (trexon!=null){ q=trexon->akro;/* q γειτονική p*/ if (!(q->episkeftike)){ q->episkeftike = ; prosthesi(&oura_korifon,q); trexon=trexon->epomenos; Ενα δέντρο επικάλυψης με πρώτα κατά βάθος επίσκεψη των κορυφών του Αφετηρία η κορυφή a a b e d f j g h i Δέντρα Επικάλυψης (Spanning Trees) Εναδέντροεπικάλυψηςγιαέναγράφημα G,είναιέναδέντροπουέχει δημιουργηθεί από μερικές ακμές του G έτσι ώστε να περιέχει όλες τις κορυφές του Με άλλα λόγια ένα δέντρο επικάλυψης είναι ένα γράφημα με το ελάχιστο πλήθος ακμών που επιτρέπει την επικοινωνία μεταξύ οποιονδήποτε κορυφών του γραφήματος αφετηρία a c b e g h i d f j
15 Στη συνέχεια η vathos τροποποιείται κατάλληλα για τον εντοπισμό των ακμών ενός πρώτα κατά βάθος δέντρου επικάλυψης /*Δημιουργεί ένα κατά βάθος δέντρο επικάλυψης*/ void vathos_spantree(graphima G){ kdktis p; adktis e; p = G; /*Αρχικές τιμές - δίνονται αρχικές τιμές σε όλα τα σημάδια επισκέπτονται όλες οι κορυφές του G και σημαδεύεται η κάθε ακμή ώστε αρχικά να μην ανήκειστο δέντρο επικάλυψης*/ συνέχεια void vathos_dimiourgia(kdktis p){ adktis trexon; kdktis q; p->episkeftike = ; trexon = p->kefali; while (trexon!=null){ q= trexon->akro; if (!(q->episkeftike)){ /* σημαδεύεται η ακμή του δέντρου*/ trexon->simadi = ; /*θα μπορούσαμε να τυπώσουμε την ακμή του δέντρου στο σημείο*/ vathos_dimiourgia(q); trexon = trexon->epomenos; while (p!=null){ /*αρχικά οι κορυφές δεν έχουμε επισκεφτεί p->episkeftike = 0; e = p->kefali; /*επισκέπτεται τη λίστα ακμών για κάθε κορυφή καισημαδεύεται η κάθε ακμή, ώστε αρχικά να μην ανήκει στο δέντρο επικάλυψης*/ while (e!=null){ e->simadi = 0; e = e->epomenos; p = p->epomenos; p = G; vathos_dimiourgia(p); Με όμοιο τρόπο τροποποιείται η platos και κατασκευάζεται ένα πρώτα κατά πλάτος δέντρο επικάλυψης ενός γραφήματος G void platos_spantree(graphima G){ /*Δημιουργεί ένα κατά πλάτος δέντρο επικάλυψης */ typos_ouras oura; kdktis n,m; adktis trexon; /*Tο πεδίο episkeftike κάθε κορυφής true */ n = G; while (n!=null){ n->episkeftike = 0; trexon = n->kefali; while (trexon!=null){ trexon->simadi = 0; trexon = trexon->epomenos; n = n->epomenos; συνέχεια
16 dimiourgia(&oura); /*Το ξεκίνημα από την κεφαλή της λίστας κορυφών*/ n = G; prosthesi(&oura,n); n->episkeftike = ; while (!keni(oura)){ apomakrynsi(&oura,&n); /* επισκέπτεται η λιστά ακμών */ trexon = n->kefali; while (trexon!=null){ m = trexon->akro; if (!(m->episkeftike)){ prosthesi(&oura,m); m->episkeftike = ; trexon->simadi = ; trexon = trexon->epomenos; Μεταβατικό γράφημα : Γενικά : Εφαρμογές Γραφημάτων Ενα πρώτα κατά πλάτος δέντρο επικάλυψης του γραφήματος Αφετηρία η κορυφή a b g αφετηρία a c e h i Υπάρχει μονοπάτι μήκους <= 3 ; d f j Υπαρξη μονοπατιού 6
17 Β Α E 3 3 Μεταβατικός Πίνακας / Γράφημα Γράφημα που συνδέει κορυφές που γειτνιάζουν με οποιοδήποτε αριθμό μεταβάσεων (n) Και ο πίνακας γειτνίασής του λέγεται μεταβατικός πίνακας Πχ για το παραπάνω γράφημα ο μεταβατικός πίνακας είναι: C D 3 Γειτονικός πίνακας Ο(n ) ή O(n 3 ) Αλγόριθμος Warshall Μεταβατικού Πίνακα P k [i, j] = /* TRUE */ Αν υπάρχει μονοπάτι από την i στην j το οποίο να μην διέρχεται από καμία κορυφή μεγαλύτερη του k Μεταβατικός πίνακας βημάτων 7
18 P k+ [i, j] = /*true*/ AN P k [i, j] = /*true*/ ή P k [i, k+] = και P k [k+, j] = Τα παραπάνω ισοδυναμούν με P k+ [i, j] = (P k [i, j] (P k [i, k+] && P k [k+, j])); ή αναλυτικότερα for (i=;i<=n;i++) for (j=;j<=n;j++) P k [i, j] = P k- [i, j] (P k- [i, k] && P k- [k, j]); και τελικά : P k = P k-; for (i=;i<=n;i++) if (P k- [i, k]) for (j=;j<=n;j++) if (P k- [k, j]) P k [i, j] = ; Ισχύει P 0 [i,j] = A[i,j] Απλοποιώντας τα παραπάνω λαμβάνουμε P k = P k -; for (i=;i<=n;i++) if (P k- [i, k]) for (j=; j<=n; j++) P k [i, j] := P k- [i, j] P k- [k, j]; void metavatikos_pinakas(geit_pin A, geit_pin P){ korifi i,j,k; geit_pin PP; for (i=0; i <= plithos-; i++) for (j = 0; j <= plithos-; j++) P[i][j]=A[i][j]; for (k=0; k <= plithos-; k++){ for (i =0 ; i <= plithos-; i++) for (j = 0; j <= plithos-; j++) PP[i][j]=P[i][j]; for (i=0; i <= plithos-; i++) if (PP[i][k]) for (j=0; j <= plithos-; j++) if (PP[k][j]) P[i][j] = ; 8
19 Το συντομότερο μονοπάτι σε ένα κατευθυνόμενο γράφημα: Ο Αλγόριθμος του Dijkstra Μπορούμε να φανταστούμε το G σαν μια απεικόνιση αεροπορικών γραμμών, στην οποία κάθε κορυφή παριστάνει μια πόλη και το βάρος σε κάθε ακμή το κόστος της πτήσης από μια πόλη σε μιαν άλλη Το πρόβλημά μας είναι η εύρεση μιας διαδρομής από την πόλη vστηνπόλη wέτσιώστετοσυνολικόκόστος (απόσταση)ναείναι ελάχιστο Ας θεωρήσουμε το κατευθυνόμενο γράφημα του παραπάνω σχήματος Αν υποτεθεί ότι η κορυφή είναι η πηγή, τότε το πρόβλημά μας είναι η εύρεση του συντομότερου μονοπατιού από την κορυφή προς όλες τις άλλες κορυφές του γραφήματος ΠαράστασημεπίνακαΑόπουΑ[i][j]είναιτοκόστοςμετάβασηςαπότην iστην j Αν δεν υπάρχει ακμή, Α[i][j]= Διατηρεί σύνολο S με κορυφές των οποίων η συντομότερη διαδρομή από την κορυφή-πηγή είναι γνωστή Σε κάθε βήμα προσθέτει μια κορυφή στο S Πίνακας D (Δ) περιέχει κόστος (μήκος) για κάθε κορυφή του S Πίνακας P (Δ) περιέχει το μονοπάτι - προηγούμενη κάθε κορυφής του S Άπληστος αλγόριθμος Αλγόριθμος του Dijkstra Ένα κατευθυνόμενο γράφημα με βάρη /* Υπολογίζει το κόστος του συντομότερου μονοπατιού από τηνκορυφή μέχρι μια οποιαδήποτε κορυφή ενός κατευθυνόμενου γραφήματος */ () S = {; /*Το σύνολο S περιέχει την κορυφή */ () for i=,n do D[i] = A[,i]; {Αρχικές τιμές του D (3) for i=,n do P[i] = 0 αν δεν υπάρχει ακμή από την προς την i P[i] = αν υπάρχει ακμή από την προς την i () for i = n- do { () Διάλεξε μια κορυφή w εκτός S τέτοια ώστε η D[w] να είναι ελάχιστη (6) Πρόσθεσε την w στο S (7) Για κάθε κορυφή vεκτός S να ελεγχθεί αν η απόσταση απο την στην v μπορεί να συντομευθεί διαμέσου της w Αν ναι, να ενημερωθείη αντίστοιχη τιμή του πίνακα D () D[v] = min (D[v], D[w] + A[w,v]) () Αν D[w]+A[w,v] < D[v] τότε P[v]=w 9
20 S={ min d=30 d= d=0 d=0 Επανάληψη s w D[] D[3] D[] D[] D[6] αρχική { {, d=30 d= d= min d=0 70 d=0 S={,, Επανάληψη s w D[] D[3] D[] D[] D[6] {,, {,,, S={, d=30 d= d=0 d=70 min d=0 d=30 d= min d= d=0 d=0 S={,,, Επανάληψη s w D[] D[3] D[] D[] D[6] {, {,, Επανάληψη s w D[] D[3] D[] D[] D[6] 3 {,,, {,,,,
21 d=30 d= S={,,,, 3, 6 Πολυπλοκότης : Ο(n ) w Υποθετικά συντομότερο μονοπάτι d= d=0 d=0 S x Επανάληψη s w D[] D[3] D[] D[] D[6] {,,,, {,,,,3, Ο αλγόριθμος του Dijkstra υλοποιείται στο παρακάτω πρόγραμμα όπου χρησιμοποιείται ο πίνακας γειτονικών κορυφών για την παράσταση του γραφήματος s w D[] D[3] D[] D[] D[6] αρχική { {, {,, {,,, {,,,, {,,,,3, Αν αλλάξει D[v]λόγω w P[v]=w Εδώ Αλλαγές για w=,,3 P[3]=, P[3]=,P[6]=3 90 P[] P[] P[3] P[] P[] P[6] #include <stdioh> #define plithos 0 #define infinity 0000 /* τιμή όπου δεν υπάρχει ακμή */ #define min_stoixeio 0 #define max_stoixeio plithos- #define megisto_plithos max_stoixeio-min_stoixeio+ typedef int typos_synolou[megisto_plithos]; typedef int korifi; typedef int typos_pinaka[plithos][plithos]; typedef struct { typos_pinaka geit_pin; int arkrfon; graphima; συνέχεια
22 void Dimiourgia_graphimatos(graphima *G); void Diavasma_graphimatos(graphima *G); void Ektyposi_graphimatos(graphima G); void Dijkstra(graphima G); void Synolo_dimiourgia(typos_synolou synolo); int Synolo_eisagogi(int stoixeio, typos_synolou synolo); int Synolo_melos(int stoixeio, typos_synolou synolo); void Diavasma_graphimatos(graphima *G){ /* Προ: έχει δημιουργηθεί ο geit_pin χωρίς ακμές Μετά: Έχει δημιουργηθεί ο geit_pin με ακμές*/ korifi i,j; int kostos; printf("\nδώστε τα στοιχεία του γραφήματος"); printf("\nδώστε i,j και kostos\n\n"); scanf ("%d %d %d",&i,&j,&kostos); main(){ graphima G; printf("\n Δώστε το πλήθος των κορυφών: "); scanf("%d",&(garkrfon)); Dimiourgia_graphimatos(&G); Diavasma_graphimatos(&G); Ektyposi_graphimatos(G); Dijkstra(G); while (i!= plithos+){ if ( (i>=0) && (i<(g->arkrfon)) &&(j>=0) &&(j<(g->arkrfon)) &&(kostos>=0)&&(kostos < infinity)) (G->geit_pin)[i][j] = kostos; else{ printf("\nλάθος δεδομένα Ξαναδώστε τα"); scanf ("%d %d %d", &i, &j, &kostos); void Dimiourgia_graphimatos(graphima *G){ /* Όλα τα στοιχεία του geit_pin έχουν τιμή infinity */ int i,j; void Ektyposi_graphimatos(graphima G){ /*Προ : Έχει δημιουργηθεί ο γειτονικός πίνακας Μετά: Για κάθε κορυφή έχει τυπωθεί μια γραμμή στην οποία εμφανίζονται οι κορυφές με τις οποίες είναι συνδεδεμένη*/ korifi i,j; for (i=0; i<=(g->arkrfon)-; i++) for (j=0; j<=(g->arkrfon)-; j++) (G->geit_pin)[i][j] = infinity; for (i=0; i <= Garkrfon-; i++){ printf("γραμμή %d ", i); for (j=0; j <= Garkrfon-; j++) printf ("%8d",Ggeit_pin[i][j]); printf ("\n"); printf ("\n");
23 /* Προ : Ένα κατευθυνόμενο γράφημα με βάρη Μετά: Εύρεση του συντομότερου μονοπατιού και επιστροφή του αποτελέσματος στον πίνακα D */ void Dijkstra(graphima G){ typos_synolou S; /* το σύνολο ειδικών κορυφών*/ korifi i,j,w; int elaxisti_apostasi; int apostasi[plithos]; int monopati[plithos]; dimiourgia(s); eisagogi(0,s); /* Αρχικές τιμές για τα συντομότερα μονοπάτια εφόσον υπάρχουν ακμές από την κορυφή 0*/ for (j=; j <= Garkrfon-; j++){ apostasi[j] = Ggeit_pin[0][j]; if (Ggeit_pin[0][j] == infinity) monopati[j] = -; else monopati[j] = 0; συνέχεια for ( i = ; i <= Garkrfon-; i++){ /* Επιλογή μιας κορυφής w στο V-S : apostasi[w]=min */ elaxisti_apostasi = infinity; for (j = ; j <= Garkrfon-; j++) if ( (!melos(j,s)) &&(apostasi[j]<elaxisti_apostasi)){ elaxisti_apostasi = apostasi[j]; w = j; eisagogi(w,s); /* Πρόσθεση της w στο S */ /*Ενημέρωση των τιμών για τον πίνακα apostasi */ for (j = ; j <= Garkrfon-; j++) if ( (!melos(j,s)) &&( apostasi[w]+(ggeit_pin)[w][j]) < (apostasi[j])){ apostasi[j]= apostasi[w]+(ggeit_pin)[w][j]; monopati[j] = w; for (i=; i <= Garkrfon-; i++) printf("%d %d %d\n",i,apostasi[i],monopati[i]); 3
Γραφήματα (Graphs) G = (V, E) Κορυφές και ακμές. μονοπάτι 1,2,3,4 κορυφή 3. ακμή. γειτονικές G 1 V(G 1 ) = {1,2,3,4,5}
Γραφήματα (Graphs) G = (V, E) Κορυφές και ακμές 2 4 μονοπάτι,2,3,4 κορυφή 3 ακμή γειτονικές V(G ) = {,2,3,4,5 G E(G ) = {(,2), (2,3), (2,4), (3,4), (4,5) 5 To Δένδρο, ειδική περίπτωση γραφήματος 2 3 G
Γραφήματα (Graphs) To Δένδρο, ειδική περίπτωση γραφήματος. G = (V, E) Κορυφές V και ακμές E G 2 4. μονοπάτι 1, 2, 3, 4 κορυφή 3
G = (V, E) Κορυφές V και ακμές E V(G ) = {,,3,, Γραφήματα (Graphs) G E(G ) = {(,), (,3), (,), (3,), (,) μονοπάτι,, 3, κορυφή 3 ακμή γειτονικές To Δένδρο, ειδική περίπτωση γραφήματος G 3 6 7 μήκος μονοπατιού
Δομές Δεδομένων και Τεχνικές Προγραμματισμού Ενότητα 7: ΑΤΔ Γράφημα. Ιωάννης Κοτρώνης Σχολή Θετικών Επιστημών Τμήμα Πληροφορικής και Τηλεπικοινωνιών
Δομές Δεδομένων και Τεχνικές Προγραμματισμού Ενότητα 7: ΑΤΔ Γράφημα Ιωάννης Κοτρώνης Σχολή Θετικών Επιστημών Τμήμα Πληροφορικής και Τηλεπικοινωνιών Σκοποί ενότητας Να ορίσει τον ΑΤΔ Γράφημα. Να σχεδιάσει
Γραφήματα (Graphs) G = (V, E) Κορυφές V και ακμές E. μονοπάτι 1, 2, 3, 4 κορυφή 3. ακμή. γειτονικές G 1 V(G 1 ) = {1,2,3,4,5}
Γραφήματα (Graphs) G = (V, E) Κορυφές V και ακμές E 2 4 μονοπάτι, 2, 3, 4 κορυφή 3 ακμή γειτονικές V(G ) = {,2,3,4,5 G E(G ) = {(,2), (2,3), (2,4), (3,4), (4,5) 5 To Δένδρο, ειδική περίπτωση γραφήματος
Δέντρα (Trees) - Ιεραρχική Δομή
Δέντρα (Trees) - Ιεραρχική Δομή Εφαρμογές Δομή Οργάνωση Αρχείων Οργανογράμματα Ορισμός (αναδρομικός ορισμός): Ένα δέντρο είναι ένα πεπερασμένο σύνολο κόμβων το οποίο είτε είναι κενό είτε μη κενό σύνολο
ΠΛΗ111. Ανοιξη 2005. Μάθηµα 10 ο. Γράφοι. Τµήµα Ηλεκτρονικών Μηχανικών και Μηχανικών Υπολογιστών Πολυτεχνείο Κρήτης
ΠΛΗ111 οµηµένος Προγραµµατισµός Ανοιξη 2005 Μάθηµα 10 ο Γράφοι Τµήµα Ηλεκτρονικών Μηχανικών και Μηχανικών Υπολογιστών Πολυτεχνείο Κρήτης Γράφοι Ορισµός Αφηρηµένος τύπος δεδοµένων Υλοποίηση Αναζήτηση έντρο
Tύπος δεδοµένων (data type) µιας µεταβλητής (σε µια γλώσσα προγραµµατισµού) είναι το σύνολο των τιµών που µπορεί να πάρει η µεταβλητή.
Tύπος δεδοµένων (data type) µιας µεταβλητής (σε µια γλώσσα προγραµµατισµού) είναι το σύνολο των τιµών που µπορεί να πάρει η µεταβλητή. Αφηρηµένος τύπος δεδοµένων (abstract data type): είναι ένα θεωρητικό
Ουρές (Queues) FIFO A B C. Διαγραφή. Εισαγωγή. εµπρός. πίσω. πίσω. πίσω
εµπρός Ουρές (Queues) A B C FIFO εµπρός πίσω B C Διαγραφή εµπρός πίσω B C D E Εισαγωγή πίσω Ορισµός Η ουρά είναι µια γραµµική λίστα στην οποία η διαγραφή ενός στοιχείου γίνεται στο ένα άκρο το οποίο καλείται
Υλοποιήσεις,Δοκιμές και Εφαρμογές Βασικών Αφηρημένων Τύπων Δεδομένων στη C για εκπαιδευτική χρήση 1. Ο ΑΤΔ ΓΡΑΦΗΜΑ
1.1 Εισαγωγή 1. Ο ΑΤΔ ΓΡΑΦΗΜΑ Σε προηγούμενα κεφάλαια είδαμε γραμμικές δομές δεδομένων (στοίβα, ουρά, λίστα), στις οποίες κάθε στοιχείο μπορεί να έχει το πολύ ένα επόμενο και το πολύ ένα προηγούμενο, αλλά
ΛΙΣΤΕΣ. Ορισμός ΑΤΔ Λίστα ΑΤΔ Ακολουθιακή Λίστα Διαχείριση Δεικτών και Λιστών στη C ΑΤΔ Συνδεδεμένη Λίστα. Εφαρμογές και Χρήση Λιστών
ΛΙΣΤΕΣ Ορισμός ΑΤΔ Λίστα ΑΤΔ Ακολουθιακή Λίστα Διαχείριση Δεικτών και Λιστών στη C ΑΤΔ Συνδεδεμένη Λίστα Υλοποίηση με δείκτες (pointers) Υλοποίηση με πίνακα Εφαρμογές και Χρήση Λιστών Λίστες (Lists) Δεδομένα
Δυαδικά Δέντρα Αναζήτησης (Binary Search Trees) Ορισμός : Ένα δυαδικό δέντρο αναζήτησης t είναι ένα δυαδικό δέντρο, το οποίο είτε είναι κενό είτε:
Δυαδικά Δέντρα Αναζήτησης (Binary Search Trees) Ορισμός : Ένα δυαδικό δέντρο αναζήτησης t είναι ένα δυαδικό δέντρο, το οποίο είτε είναι κενό είτε: (i) όλα τα περιεχόμενα στο αριστερό υποδέντρο του t είναι
ΟιβασικέςπράξειςπουορίζουντονΑΤΔ δυαδικό δέντρο αναζήτησης είναι οι ακόλουθες:
Δυαδικά Δέντρα Αναζήτησης (Binary Search Trees) Ορισμός : Ένα δυαδικό δέντρο αναζήτησης t είναι ένα δυαδικό δέντρο, το οποίο είτε είναι κενό είτε: (i) όλα τα περιεχόμενα στο αριστερό υποδέντρο του t είναι
Οι βασικές πράξεις που ορίζουν τον ΑΤ δυαδικό δέντρο αναζήτησης είναι οι ακόλουθες:
υαδικά έντρα Αναζήτησης (Binary Search Trees) Ορισµός : Ένα δυαδικό δέντρο αναζήτησης t είναι ένα δυαδικό δέντρο, το οποίο είτε είναι κενό είτε: (i) όλα τα περιεχόµενα στο αριστερό υποδέντρο του t είναι
Επισκόπηση Μαθήματος. Γραμμικές Δομές Δεδομένων. ΑΤΔ Ουρά Εναλλακτικοί Σχεδιασμοί Προγραμματισμός με Ενότητες Interface.h Implementation.
Γραμμικές Δομές Δεδομένων Επισκόπηση Μαθήματος Συλλογή δεδομένων στη σειρά (ολική διάταξη). Προσθέτουμε δεδομένα στη Δομή (μεγαλώνει) ή αφαιρούμε δεδομένα (μικραίνει) Αν περιορίσουμε τις πράξεις Στην Αρχή
Γραμμικές Δομές Δεδομένων
Γραμμικές Δομές Δεδομένων Συλλογή δεδομένων στη σειρά (ολική διάταξη). Προσθέτουμε δεδομένα στη Δομή (μεγαλώνει) ή αφαιρούμε δεδομένα (μικραίνει) Αν περιορίσουμε τις πράξεις Στην Αρχή μόνο Στοίβα (stack)
Διάλεξη 17: Δυαδικά Δέντρα. Διδάσκων: Κωνσταντίνος Κώστα Διαφάνειες: Δημήτρης Ζεϊναλιπούρ
Διάλεξη 7: Δυαδικά Δέντρα Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: Δυαδικά Δένδρα Δυαδικά Δένδρα Αναζήτησης Πράξεις Εισαγωγής, Εύρεσης Στοιχείου, Διαγραφής Μικρότερου Στοιχείου Διδάσκων:
ΣΤΟΙΒΕΣ (stacks) Σχήµα: Λειτουργία Στοίβας
ΣΤΟΙΒΕΣ (stacks) Η στοίβα είναι µια συλλογή δεδοµένων µε γραµµική διάταξη στην οποία όλες οι εισαγωγές και οι διαγραφές γίνονται στο ένα άκρο που λέγεται κορυφή (top) της στοίβας Σχήµα: Λειτουργία Στοίβας
Δομές Δεδομένων και Αλγόριθμοι
Δομές Δεδομένων και Αλγόριθμοι Χρήστος Γκόγκος ΤΕΙ Ηπείρου Χειμερινό Εξάμηνο 2014-2015 Παρουσίαση 18 Dijkstra s Shortest Path Algorithm 1 / 12 Ο αλγόριθμος εύρεσης της συντομότερης διαδρομής του Dijkstra
Δομές Δεδομένων. Ενότητα 1: Εισαγωγή-Υλοποίηση του ΑΤΔ Σύνολο με Πίνακα. Καθηγήτρια Μαρία Σατρατζέμη. Τμήμα Εφαρμοσμένης Πληροφορικής.
Ενότητα 1: Εισαγωγή-Υλοποίηση του ΑΤΔ Σύνολο με Πίνακα Καθηγήτρια Μαρία Σατρατζέμη Άδειες Χρήσης Το παρόν εκπαιδευτικό υλικό υπόκειται σε άδειες χρήσης Creative Commons. Για εκπαιδευτικό υλικό, όπως εικόνες,
Διάλεξη 22: Δυαδικά Δέντρα. Διδάσκων: Παναγιώτης Ανδρέου
Διάλεξη 22: Δυαδικά Δέντρα Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: - Δυαδικά Δένδρα - Δυαδικά Δένδρα Αναζήτησης - Πράξεις Εισαγωγής, Εύρεσης Στοιχείου, Διαγραφής Μικρότερου Στοιχείου
Δομές Δεδομένων και Τεχνικές Προγραμματισμού Ενότητα 3: ΑΤΔ Ουρά. Ιωάννης Κοτρώνης Σχολή Θετικών Επιστημών Τμήμα Πληροφορικής και Τηλεπικοινωνιών
Δομές Δεδομένων και Τεχνικές Προγραμματισμού Ενότητα 3: ΑΤΔ Ουρά Ιωάννης Κοτρώνης Σχολή Θετικών Επιστημών Τμήμα Πληροφορικής και Τηλεπικοινωνιών Ορίζει τον ΑΤΔ Ουρά Σκοποί ενότητας Σχεδιάζει τον ΑΤΔ Ουρά
Επιλογές και Κριτήρια Σχεδιασμού ΑΤΔ Ανεξαρτήτως από Γλώσσα Υλοποίησης 24/4/2012
Επιλογές και Κριτήρια Σχεδιασμού ΑΤΔ Ανεξαρτήτως από Γλώσσα Υλοποίησης 24/4/2012 Κύκλος (Ζωής) Λογισμικού (ΑΤΔ) Γενικά Ορισμός ΑΤΔ (Προδιαγραφές) Οργάνωση Δεδομένων Τι κάνει Υλοποίηση Σχεδιασμός (ανεξάρτητος
ΕΠΛ232: Εργαστήριο 2
ΕΠΛ232: Εργαστήριο 2 Παράδειγμα σε Στοίβες 1 Υπολογισμός Αριθμητικών Παραστάσεων - Πολωνικός Συμβολισμός A + (B * C) A + (BC * ) A(BC *) + ABC * + Ενδοθεματική μορφή Μεταθεματική μορφή Οι κανόνες που διέπουν
ΔΙΑΣΧΙΣΗ ΓΡΑΦΗΜΑΤΩΝ 1
ΔΙΑΣΧΙΣΗ ΓΡΑΦΗΜΑΤΩΝ 1 Θέματα μελέτης Πρόβλημα αναζήτησης σε γραφήματα Αναζήτηση κατά βάθος (Depth-first search DFS) Αναζήτηση κατά πλάτος (Breadth-first search BFS) 2 Γράφημα (graph) Αναπαράσταση συνόλου
ρίζα E F G H I J επίπεδο 1
Δέντρα (Trees) Ορισµός: Ενα δέντρο είναι ένα πεπερασµένο µη κενό σύνολο κόµβων τέτοιο ώστε: 1.Yπάρχει ένας µοναδικός κόµβος, που καλείται ρίζα, ο οποίος δεν έχει προηγούµενο. 2.Οι υπόλοιποι κόµβοι χωρίζονται
Διδάσκων: Κωνσταντίνος Κώστα
Διάλεξη Ε4: Επανάληψη Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: Εισαγωγή σε δενδρικές δομές δεδομένων, Δυαδικά Δένδρα Αναζήτησης Ισοζυγισμένα Δένδρα & 2-3 Δένδρα Διδάσκων: Κωνσταντίνος
2 η Υλοποίηση του ΑΤΔ συνδεδεμένη λίστα με πίνακα Κόμβοι από δεδομένα και θέσεις πίνακα ????
η Υλοποίηση του ΑΤΔ συνδεδεμένη λίστα με πίνακα Κόμβοι από δεδομένα και θέσεις πίνακα θέση (index) dedomena epomenos lista = 0 1 3 Ελένη Σπύρος Βασίλης -1 1 Στη συνέχεια θα πρέπει να γνωρίζουμε την οργάνωση
Διδάσκων: Παναγιώτης Ανδρέου
Διάλεξη 12: Δέντρα ΙΙ -Δυαδικά Δέντρα Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: - Δυαδικά Δένδρα - Δυαδικά Δένδρα Αναζήτησης(ΔΔΑ) - Εύρεση Τυχαίου, Μέγιστου, Μικρότερου στοιχείου - Εισαγωγή
ΕΛΛΗΝΙΚΟ ΑΝΟΙΚΤΟ ΠΑΝΕΠΙΣΤΗΜΙΟ
ΟΔΗΓΙΕΣ: ΘΕΜΑΤΙΚΗ ΕΝΟΤΗΤΑ ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΠΛΗΡΟΦΟΡΙΚΗ - ΠΛΗ10 ΤΕΛΙΚΕΣ ΕΞΕΤΑΣΕΙΣ - 14 ΙΟΥΝΙΟΥ 2015 Τα θέματα που έχετε στα χέρια σας είναι σε τρεις (3) σελίδες. Επιβεβαιώστε το και αν λείπει κάποια σελίδα
Διδάσκων: Κωνσταντίνος Κώστα Διαφάνειες: Δημήτρης Ζεϊναλιπούρ
Διάλεξη 9: Εισαγωγή στους Γράφους Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: Γράφοι - ορισμοί και υλοποίηση Διάσχιση Γράφων Διδάσκων: Κωνσταντίνος Κώστα Διαφάνειες: Δημήτρης Ζεϊναλιπούρ
Προγραμματισμός Ι (ΗΥ120)
Προγραμματισμός Ι (ΗΥ120) Διάλεξη 20: Δυαδικό Δέντρο Αναζήτησης Δυαδικό δέντρο Κάθε κόμβος «γονέας» περιέχει δύο δείκτες που δείχνουν σε δύο κόμβους «παιδιά» του ιδίου τύπου. Αν οι δείκτες προς αυτούς
u v 4 w G 2 G 1 u v w x y z 4
Διάλεξη :.0.06 Θεωρία Γραφημάτων Γραφέας: Σ. Κ. Διδάσκων: Σταύρος Κολλιόπουλος. Εισαγωγικοί ορισμοί Ορισμός. Γράφημα G καλείται ένα ζεύγος G = (V, E) όπου V είναι το σύνολο των κορυφών (ή κόμβων) και E
Δομές Δεδομένων. Ενότητα 6: Εφαρμογή Συνδεδεμένων Λιστών: Αλφαβητικό ευρετήριο κειμένου- Υλοποίηση ΑΤΔ Στοίβα και Ουρά με δείκτες
Ενότητα 6: Εφαρμογή Συνδεδεμένων Λιστών: Αλφαβητικό ευρετήριο κειμένου- Υλοποίηση ΑΤΔ Στοίβα και Ουρά με δείκτες Καθηγήτρια Μαρία Σατρατζέμη Άδειες Χρήσης Το παρόν εκπαιδευτικό υλικό υπόκειται σε άδειες
Αλγόριθμοι και Δομές Δεδομένων (IΙ) (γράφοι και δένδρα)
Ιόνιο Πανεπιστήμιο Τμήμα Πληροφορικής Εισαγωγή στην Επιστήμη των Υπολογιστών 2016-17 Αλγόριθμοι και Δομές Δεδομένων (IΙ) (γράφοι και δένδρα) http://mixstef.github.io/courses/csintro/ Μ.Στεφανιδάκης Αφηρημένες
Δομές Δεδομένων. Ενότητα 10: Πλήρη Δυαδικά Δέντρα, Μέγιστα/Ελάχιστα Δέντρα & Εισαγωγή στο Σωρό- Ο ΑΤΔ Μέγιστος Σωρός. Καθηγήτρια Μαρία Σατρατζέμη
Ενότητα 10: Πλήρη Δυαδικά Δέντρα, Μέγιστα/Ελάχιστα Δέντρα & Εισαγωγή στο Σωρό- Ο ΑΤΔ Μέγιστος Σωρός Καθηγήτρια Μαρία Σατρατζέμη Άδειες Χρήσης Το παρόν εκπαιδευτικό υλικό υπόκειται σε άδειες χρήσης Creative
Διάλεξη 26: Σωροί. Διδάσκων: Παναγιώτης Ανδρέου
Διάλεξη 26: Σωροί Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: - Ουρές Προτεραιότητας -Ο ΑΤΔ Σωρός, Υλοποίηση και πράξεις Διδάσκων: Παναγιώτης Ανδρέου ΕΠΛ035 Δομές Δεδομένων και Αλγόριθμοι
Κατ οίκον Εργασία 5 Σκελετοί Λύσεων
Κατ οίκον Εργασία 5 Σκελετοί Λύσεων Άσκηση 1 Χρησιμοποιούμε τις δομές: struct hashtable { struct node array[maxsize]; int maxsize; int size; struct node{ int data; int status; Στο πεδίο status σημειώνουμε
ΤΕΙ ΛΑΜΙΑΣ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ ΚΑΙ ΤΕΧΝΟΛΟΓΙΑ ΥΠΟΛΟΓΙΣΤΩΝ
ÌïëëÜ Ì. Á μýô Á.Ì. : 5 moll@moll.r ΤΕΙ ΛΑΜΙΑΣ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ ΚΑΙ ΤΕΧΝΟΛΟΓΙΑ ΥΠΟΛΟΓΙΣΤΩΝ ΜΑΘΗΜΑ : ΕΙΣΑΓΩΓΗ ΣΤΟ ΔΙΑΔΙΚΤΥΟ (ΕΡΓΑΣΤΗΡΙΟ) Ε ΕΞΑΜΗΝΟ ΕΙΣΗΓΗΤΕΣ: Χαϊδόγιαννος Χαράλαμπος ΕΡΓΑΣΤΗΡΙΑΚΗ ΑΣΚΗΣΗ
AVL δέντρα. h L h R. G.M. Adelson_Velkii και E.M. Landis 1962
AVL δέντρα L - R 1 L R G.M. AdelsonVelkii και E.M. Landis 1962 AVL Δέντρα Μη AVL Δέντρα Εισαγωγή κόμβου 4, 6 : 4 12 : 6 4 6 Αριστερή στροφή 6 4 12 12 8, 14 : 6 4 12 8 14 7 : 4 6 12 6 4 8 6 8 12 7 8 14
1 Το πρόβλημα της συντομότερης διαδρομής
ΤΕΧΝΟΛΟΓΙΚΟ ΕΚΠΑΙΔΕΥΤΙΚΟ ΙΔΡΥΜΑ ΛΑΜΙΑΣ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ ΚΑΙ ΤΕΧΝΟΛΟΓΙΑΣ ΥΠΟΛΟΓΙΣΤΩΝ ΣΧΕΔΙΑΣΜΟΣ ΚΑΙ ΑΝΑΛΥΣΗ ΑΛΓΟΡΙΘΜΩΝ ΑΚΑΔΗΜΑΪΚΟ ΕΤΟΣ 00 Ιστοσελίδα μαθήματος: http://eclass.teilam.gr/di88 6ο ΕΡΓΑΣΤΗΡΙΟ
Διάλεξη 12: Λίστες Υλοποίηση & Εφαρμογές. Διδάσκων: Παναγιώτης Ανδρέου
Διάλεξη 12: Λίστες Υλοποίηση & Εφαρμογές Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: -Ευθύγραμμες Απλά Συνδεδεμένες Λίστες (εύρεση, εισαγωγή, διαγραφή) - Σύγκριση Συνδεδεμένων Λιστών με Πίνακες
Γράφοι. Ορολογία. Ορισµός: G = (V, E) όπου. Ορολογία (συνέχεια) γράφος ή γράφηµα (graph) V:ένα σύνολο E:µια διµελής σχέση στο V
Γράφοι Ορολογία γράφος ή γράφηµα (graph) Ορισµός: G = (V, E) όπου V:ένα σύνολο E:µια διµελής σχέση στο V Ορολογία (συνέχεια) κάθε v V ονοµάζεται κορυφή (vertex) ή κόµβος (node) κάθε (v 1, v 2 ) Ε ονοµάζεται
Κατ οίκον Εργασία 5 Σκελετοί Λύσεων
Κατ οίκον Εργασία 5 Σκελετοί Λύσεων Άσκηση 1 (α) Ο αλγόριθµος χρησιµοποιεί τη διαδικασία DFS(v) η οποία, ως γνωστό, επισκέπτεται όλους τους κόµβους που είναι συνδεδεµένοι µε τον κόµβο v. Για να µετρήσουµε
Πανεπιστήμιο Πειραιώς Σχολή Τεχνολογιών Πληροφορικής και Επικοινωνιών Τμήμα Ψηφιακών Συστημάτων ομές εδομένων
Πανεπιστήμιο Πειραιώς Σχολή Τεχνολογιών Πληροφορικής και Επικοινωνιών Τμήμα Ψηφιακών Συστημάτων 6. Δυαδικά Δέντρα 2 ομές εδομένων 4 5 Χρήστος ουλκερίδης Τμήμα Ψηφιακών Συστημάτων 18/11/2016 Εισαγωγή Τα
1. ΕΙΣΑΓΩΓΗ-ΓΕΝΙΚΑ ΠΕΡΙ ΑΦΗΡΗΜΕΝΩΝ ΤΥΠΩΝ ΔΕΔΟΜΕΝΩΝ
1. ΕΙΣΑΓΩΓΗ-ΓΕΝΙΚΑ ΠΕΡΙ ΑΦΗΡΗΜΕΝΩΝ ΤΥΠΩΝ ΔΕΔΟΜΕΝΩΝ Σκοπός-αντικείμενο των σημειώσεων αποτελεί η παρουσίαση βασικών αφηρημένων τύπων δεδομένων (ΑΤΔ) τόσο σε επίπεδο υλοποιήσεων και εφαρμογών αυτών σε προγραμματιστικό
ΕΠΛ 231 Δοµές Δεδοµένων και Αλγόριθµοι 11-1
Γράφοι Στην ενότητα αυτή θα µελετηθούν τα εξής επιµέρους θέµατα: Γράφοι - ορισµοί και υλοποίηση Διάσχιση Γράφων Τοπολογική Ταξινόµηση ΕΠΛ 23 Δοµές Δεδοµένων και Αλγόριθµοι - Γράφοι Η πιο γενική µορφή δοµής
Διάλεξη 12: Δέντρα ΙΙ Δυαδικά Δέντρα
Διάλεξη 12: Δέντρα ΙΙ Δυαδικά Δέντρα Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: Δυαδικά Δένδρα Δυαδικά Δένδρα Αναζήτησης (ΔΔΑ) Εύρεση Τυχαίου, Μέγιστου, Μικρότερου στοιχείου Εισαγωγή στοιχείου
Αναζήτηση Κατά Πλάτος
Αναζήτηση Κατά Πλάτος ημήτρης Φωτάκης Σχολή Ηλεκτρολόγων Μηχανικών και Μηχανικών Υπολογιστών Εθνικό Μετσόβιο Πολυτεχνείο Γραφήματα Μοντελοποίηση πολλών σημαντικών προβλημάτων (π.χ. δίκτυα συνεκτικότητα,
Αναζήτηση Κατά Πλάτος
Αναζήτηση Κατά Πλάτος Επιμέλεια διαφανειών: Δ. Φωτάκης Σχολή Ηλεκτρολόγων Μηχανικών και Μηχανικών Υπολογιστών Εθνικό Μετσόβιο Πολυτεχνείο Γραφήματα Μοντελοποίηση πολλών σημαντικών προβλημάτων (π.χ. δίκτυα
Αλγόριθµοι και Πολυπλοκότητα
Αλγόριθµοι και Πολυπλοκότητα Ν. Μ. Μισυρλής Τµήµα Πληροφορικής και Τηλεπικοινωνιών, Πανεπιστήµιο Αθηνών Καθηγητής: Ν. Μ. Μισυρλής () Αλγόριθµοι και Πολυπλοκότητα 26 Ιουνίου 201 1 / Απληστοι (Greedy) Αλγόριθµοι
Αλγόριθµοι και Πολυπλοκότητα
Αλγόριθµοι και Πολυπλοκότητα Ν. Μ. Μισυρλής Τµήµα Πληροφορικής και Τηλεπικοινωνιών, Πανεπιστήµιο Αθηνών Καθηγητής: Ν. Μ. Μισυρλής () Αλγόριθµοι και Πολυπλοκότητα Μαΐου 201 1 / Απληστοι (Greedy) Αλγόριθµοι
ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΥΠΡΟΥ ΕΠΛ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΜΕΘΟΔΩΝ ΕΠΙΛΥΣΗΣ ΠΡΟΒΛΗΜΑΤΩΝ
ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΥΠΡΟΥ ΕΠΛ 032 2 ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΜΕΘΟΔΩΝ ΕΠΙΛΥΣΗΣ ΠΡΟΒΛΗΜΑΤΩΝ Ενδιάμεση Εξέταση Ημερομηνία:08/03/10 Διάρκεια: 13:30 15:00 Διδάσκων: Παύλος Αντωνίου Ονοματεπώνυμο: Αριθμός Ταυτότητας: Η εξέταση
Σχεδιαση Αλγοριθμων -Τμημα Πληροφορικης ΑΠΘ - Κεφαλαιο 9ο
Σχεδίαση Αλγορίθμων Άπληστοι Αλγόριθμοι http://delab.csd.auth.gr/~gounaris/courses/ad 1 Άπληστοι αλγόριθμοι Προβλήματα βελτιστοποίησης ηςλύνονται με μια σειρά επιλογών που είναι: εφικτές τοπικά βέλτιστες
Εισαγωγή στους Αλγόριθμους
Εισαγωγή στους Αλγόριθμους Εύη Παπαϊωάννου Σχολή Οργάνωσης και Διοίκησης Επιχειρήσεων Τμήμα Διαχείρισης Πολιτισμικού Περιβάλλοντος και Νέων Τεχνολογιών Σκοποί ενότητας Παρουσίαση και μελέτη αλγορίθμων
Εργαστήριο 4: Υλοποίηση Αφηρημένου Τύπου Δεδομένων: Ταξινομημένη Λίστα
Εργαστήριο 4: Υλοποίηση Αφηρημένου Τύπου Δεδομένων: Ταξινομημένη Λίστα Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: -Λίστες -Υλοποίηση ταξινομημένης λίστας με δυναμική δέσμευση μνήμης ΕΠΛ035
Δομές Δεδομένων. Ενότητα 7: Άλλες παραλλαγές Συνδεδεμένων Λιστών-Παράσταση Αραιού Πολυωνύμου με Συνδεδεμένη Λίστα. Καθηγήτρια Μαρία Σατρατζέμη
Ενότητα 7: Άλλες παραλλαγές Συνδεδεμένων Λιστών-Παράσταση Αραιού Πολυωνύμου με Συνδεδεμένη Λίστα Καθηγήτρια Μαρία Σατρατζέμη Άδειες Χρήσης Το παρόν εκπαιδευτικό υλικό υπόκειται σε άδειες χρήσης Creative
Α. unsigned int Β. double. Γ. int. unsigned char x = 1; x = x + x ; x = x * x ; x = x ^ x ; printf("%u\n", x); Β. unsigned char
ΕΙΣΑΓΩΓΗ ΣΤΟΝ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ Εξετάσεις Β Περιόδου 2015 (8/9/2015) ΟΝΟΜΑΤΕΠΩΝΥΜΟ:................................................................................ Α.Μ.:...............................................
Διδάσκων: Κωνσταντίνος Κώστα Διαφάνειες: Δημήτρης Ζεϊναλιπούρ
ιάλεξη : λάχιστα εννητορικά ένδρα Αλγόριθμος Prim Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: λάχιστα εννητορικά ένδρα () Minimum Spanning Trees Ο αλγόριθμος του Prim για εύρεση σε γράφους
Δομές Δεδομένων. Καθηγήτρια Μαρία Σατρατζέμη. Τμήμα Εφαρμοσμένης Πληροφορικής. Δομές Δεδομένων. Τμήμα Εφαρμοσμένης Πληροφορικής
Ενότητα 8: Γραμμική Αναζήτηση και Δυαδική Αναζήτηση-Εισαγωγή στα Δέντρα και Δυαδικά Δέντρα-Δυαδικά Δέντρα Αναζήτησης & Υλοποίηση ΔΔΑ με δείκτες Καθηγήτρια Μαρία Σατρατζέμη Άδειες Χρήσης Το παρόν εκπαιδευτικό
ΣΥΜΒΟΛΟΣΕΙΡΕΣ (Strings) Ο ΑΤΔ Συµβολοσειρά Μία συµβολοσειρά είναι µία ακολουθία χαρακτήρων. Bασικές πράξεις : 1. Δηµιουργία. 2. Μήκος. 3.
ΣΥΜΒΟΛΟΣΕΙΡΕΣ (Strings) Ο ΑΤΔ Συµβολοσειρά Μία συµβολοσειρά είναι µία ακολουθία χαρακτήρων Bασικές πράξεις : 1. Δηµιουργία 2. Μήκος 3. Ανάκτηση 4. Προσάρτηση 5. Διαγραφή 6. Αντιγραφή 7. Συνένωση 8. Αναζήτηση
Αναζήτηση Κατά Πλάτος
Αναζήτηση Κατά Πλάτος ιδάσκοντες: Σ. Ζάχος,. Φωτάκης Επιμέλεια διαφανειών:. Φωτάκης Σχολή Ηλεκτρολόγων Μηχανικών και Μηχανικών Υπολογιστών Εθνικό Μετσόβιο Πολυτεχνείο Άδεια Χρήσης Το παρόν εκπαιδευτικό
Γέφυρες σε Δίκτυα. Μας δίνεται ένα δίκτυο (κατευθυνόμενο γράφημα) αφετηριακός κόμβος. Γέφυρα του (με αφετηρία τον ) :
Μας δίνεται ένα δίκτυο (κατευθυνόμενο γράφημα) αφετηριακός κόμβος και Γέφυρα του (με αφετηρία τον ) : Ακμή που περιέχεται σε κάθε μονοπάτι από το στο s a b c d e f g h i j k l Μας δίνεται ένα δίκτυο (κατευθυνόμενο
ΣΤΟΙΒΑ ΧΑΡΑΚΤΗΡΙΣΤΙΚΗ ΙΔΙΟΤΗΤΑ ΤΗΣ ΣΤΟΙΒΑΣ. Το τελευταίο στοιχείο που εισήχθη θα εξαχθεί πρώτο. Άλλο όνομα L I F O (Last In First Out)
ΣΤΟΙΒΑ ΧΑΡΑΚΤΗΡΙΣΤΙΚΗ ΙΔΙΟΤΗΤΑ ΤΗΣ ΣΤΟΙΒΑΣ Το τελευταίο στοιχείο που εισήχθη θα εξαχθεί πρώτο. Άλλο όνομα L I F O (Last In First Out) Χρήσεις Στοίβας Καθημερινή Ζωή (όχι πάρα πολλές) Δίσκοι Τραπεζαρίας
ΣΤΟΙΒΑ ΧΑΡΑΚΤΗΡΙΣΤΙΚΗ ΙΔΙΟΤΗΤΑ ΤΗΣ ΣΤΟΙΒΑΣ. Το τελευταίο στοιχείο που εισήχθη θα εξαχθεί πρώτο. Άλλο όνομα L I F O (Last In First Out)
ΣΤΟΙΒΑ ΧΑΡΑΚΤΗΡΙΣΤΙΚΗ ΙΔΙΟΤΗΤΑ ΤΗΣ ΣΤΟΙΒΑΣ Το τελευταίο στοιχείο που εισήχθη θα εξαχθεί πρώτο. Άλλο όνομα L I F O (Last In First Out) Χρήσεις Στοίβας Καθημερινή Ζωή (όχι πάρα πολλές) Δίσκοι Τραπεζαρίας
Αλγόριθμοι Γραφημάτων
Αλγόριθμοι Γραφημάτων. Γραφήματα. Αναπαράσταση Γραφημάτων 3. Διερεύνηση σε Πρώτα σε Πλάτος (BFS) Εισαγωγή στην Ανάλυση Αλγορίθμων Μάγια Σατρατζέμη Γράφημα Ορισμός: Ένα γράφημα G είναι το διατεταγμένο ζεύγος
Γράφημα. Συνδυαστικό αντικείμενο που αποτελείται από 2 σύνολα: Σύνολο κορυφών (vertex set) Σύνολο ακμών (edge set) 4 5 πλήθος κορυφών πλήθος ακμών
Γράφημα Συνδυαστικό αντικείμενο που αποτελείται από 2 σύνολα: Σύνολο κορυφών (vertex set) Σύνολο ακμών (edge set) 1 2 3 4 5 πλήθος κορυφών πλήθος ακμών Γράφημα Συνδυαστικό αντικείμενο που αποτελείται από
Κατ οίκον Εργασία 3 Σκελετοί Λύσεων
Κατ οίκον Εργασία 3 Σκελετοί Λύσεων Άσκηση 1 (α) Έστω Α(n) και Κ(n) ο αριθμός των ακμών και ο αριθμός των κόμβων ενός αυστηρά δυαδικού δένδρου με n φύλλα. Θέλουμε να αποδείξουμε για κάθε n 1 την πρόταση
υαδικό δέντρο έντρα (Trees) -Ιεραρχική οµή
έντρα (Trees) Ιεραρχική οµή Εφαρµογές οµή Οργάνωση ρχείων Οργανογράµµατα Ορισµός (αναδροµικός ορισµός): Ένα δέντρο είναι ένα πεπερασµένο σύνολο κόµβων το οποίο είτε είναι κενό είτε µη κενό σύνολο τέτοιο
Διακριτά Μαθηματικά ΙΙ Χρήστος Νομικός Τμήμα Μηχανικών Η/Υ και Πληροφορικής Πανεπιστήμιο Ιωαννίνων 2018 Χρήστος Νομικός ( Τμήμα Μηχανικών Η/Υ Διακριτά
Διακριτά Μαθηματικά ΙΙ Χρήστος Νομικός Τμήμα Μηχανικών Η/Υ και Πληροφορικής Πανεπιστήμιο Ιωαννίνων 2018 Χρήστος Νομικός ( Τμήμα Μηχανικών Η/Υ Διακριτά και Πληροφορικής Μαθηματικά Πανεπιστήμιο ΙΙ Ιωαννίνων
Εισαγωγή στην Επιστήμη των Υπολογιστών
Εισαγωγή στην Επιστήμη των Υπολογιστών 4 ο εξάμηνο ΣΗΜΜΥ 4 η ενότητα: Γράφοι: προβλήματα και αλγόριθμοι Επιμέλεια διαφανειών: Στάθης Ζάχος, Άρης Παγουρτζής, Δημήτρης Φωτάκης Σχολή Ηλεκτρολόγων Μηχανικών
Βασικές Δοµές Δεδοµένων. Σύντοµη επανάληψη (ΕΠΛ 035).
Βασικές Δοµές Δεδοµένων Σύντοµη επανάληψη (ΕΠΛ 035). Περίληψη Γραµµικές Δοµές Δεδοµένων Πίνακες Λίστες Στοίβες Ουρές Γράφοι Δέντρα Γραµµικές Δοµές Πίνακας (array) A[0] A[1] A[2] A[ ] A[n-1] Προκαθορισµένη
Θεωρία Γραφημάτων 5η Διάλεξη
Θεωρία Γραφημάτων 5η Διάλεξη Α. Συμβώνης Εθνικό Μετσόβιο Πολυτεχνείο Σχολή Εφαρμοσμένων Μαθηματικών και Φυσικών Επιστημών Τομέας Μαθηματικών Φεβρουάριος 2017 Α. Συμβώνης (ΕΜΠ) Θεωρία Γραφημάτων 5η Διάλεξη
6η Διάλεξη Διάσχιση Γράφων και Δέντρων
ΘΕΩΡΙΑ ΓΡΑΦΩΝ 6 η Διάλεξη Διάσχιση Γράφων και Δέντρων Αλγόριθμος αναζήτησης σε Βαθος Αλγόριθμος αναζήτησης κατά Πλάτος Αλγόριθμοι για Δένδρα Εύρεση ελαχίστων Γεννητορικών (Επικαλύπτοντα) Δένδρων Διάσχιση
ΕΠΛ 231 οµές εδοµένων και Αλγόριθµοι Άννα Φιλίππου,
Γράφοι Στην ενότητα αυτή θα µελετηθούν τα εξής επιµέρους θέµατα: Γράφοι - ορισµοί και υλοποίηση Τοπολογική Ταξινόµηση ιάσχιση Γράφων ΕΠΛ 23 οµές εδοµένων και Αλγόριθµοι Άννα Φιλίππου, 26 - Γράφοι Ηπιο
Δένδρα. Μαθηματικά (συνδυαστικά) αντικείμενα. Έχουν κεντρικό ρόλο στην επιστήμη των υπολογιστών :
Δένδρα Μαθηματικά (συνδυαστικά) αντικείμενα. Έχουν κεντρικό ρόλο στην επιστήμη των υπολογιστών : Ανάλυση αλγορίθμων (π.χ. δένδρα αναδρομής) Δομές δεδομένων (π.χ. δένδρα αναζήτησης) ακμή Κατηγορίες (αύξουσα
Αναζήτηση Κατά Πλάτος
Αναζήτηση Κατά Πλάτος Επιµέλεια διαφανειών:. Φωτάκης Σχολή Ηλεκτρολόγων Μηχανικών και Μηχανικών Υπολογιστών Εθνικό Μετσόβιο Πολυτεχνείο Γραφήµατα Μοντελοποίηση πολλών σηµαντικών προβληµάτων (π.χ. δίκτυα
ΟΙΚΟΝΟΜΙΚΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΑΘΗΝΩΝ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ ΦΡΟΝΤΙΣΤΗΡΙΟ ΑΛΓΟΡΙΘΜΩΝ ΒΟΗΘΟΣ: ΒΑΓΓΕΛΗΣ ΔΟΥΡΟΣ
1 ΟΙΚΟΝΟΜΙΚΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΑΘΗΝΩΝ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ ΦΡΟΝΤΙΣΤΗΡΙΟ ΑΛΓΟΡΙΘΜΩΝ ΒΟΗΘΟΣ: ΒΑΓΓΕΛΗΣ ΔΟΥΡΟΣ Φροντιστήριο #2: Πολυωνυμικοί Αλγόριθμοι, Εισαγωγή στα Γραφήματα, Αναζήτηση κατά Βάθος, Τοπολογική Ταξινόμηση
ΠΛΗ111. Ανοιξη 2005. Μάθηµα 3 ο. Συνδεδεµένες Λίστες. Τµήµα Ηλεκτρονικών Μηχανικών και Μηχανικών Υπολογιστών Πολυτεχνείο Κρήτης
ΠΛΗ111 οµηµένος Προγραµµατισµός Ανοιξη 2005 Μάθηµα 3 ο Συνδεδεµένες Λίστες Τµήµα Ηλεκτρονικών Μηχανικών και Μηχανικών Υπολογιστών Πολυτεχνείο Κρήτης Ανασκόπηση ΟΑΤ λίστα Ακολουθιακή λίστα Συνδεδεµένη λίστα
Δρ. Πέτρος Παναγή B123
Δρ. Πέτρος Παναγή petrosp@cs.ucy.ac.cy B123 1 ΣΥΜΒΟΛΟΣΕΙΡΕΣ (Strings) Ο ΑΤΔ Συμβολοσειρά Μία συμβολοσειρά είναι μία συλλογή χαρακτήρων με διάταξη Bασικές πράξεις : (Είναιτοελάχιστοδυνατόσύνολοπράξεων)
Αλγόριθμοι Ταξινόμησης Μέρος 1
Αλγόριθμοι Ταξινόμησης Μέρος 1 Μανόλης Κουμπαράκης 1 Το Πρόβλημα της Ταξινόμησης Το πρόβλημα της ταξινόμησης (sorting) μιας ακολουθίας στοιχείων με κλειδιά ενός γνωστού τύπου (π.χ., τους ακέραιους ή τις
ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΑΝΑΛΥΣΗ ΑΛΓΟΡΙΘΜΩΝ
ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΑΝΑΛΥΣΗ ΑΛΓΟΡΙΘΜΩΝ Ενότητα 10β: Αλγόριθμοι Γραφημάτων-Γραφήματα- Αναπαράσταση Γραφημάτων- Διερεύνηση Πρώτα σε Πλάτος (BFS) Μαρία Σατρατζέμη Τμήμα Εφαρμοσμένης Πληροφορικής Άδειες Χρήσης Το
Δομές Δεδομένων. Ενότητα 4: Ο ΑΤΔ Λίστα & Υλοποίηση Λίστας με σειριακή αποθήκευση- Ο ΑΤΔ Συνδεδεμένη Λίστα- Υλοποίηση ΑΤΔ Συνδεδεμένη Λίστα με πίνακα
Ενότητα 4: Ο ΑΤΔ Λίστα & Υλοποίηση Λίστας με σειριακή αποθήκευση- Ο ΑΤΔ Συνδεδεμένη Λίστα- Υλοποίηση ΑΤΔ Συνδεδεμένη Λίστα με πίνακα Καθηγήτρια Μαρία Σατρατζέμη Άδειες Χρήσης Το παρόν εκπαιδευτικό υλικό
ΕΝΟΤΗΤΑ 7 ΟΥΡΕΣ ΠΡΟΤΕΡΑΙΟΤΗΤΑΣ ΣΩΡΟΙ
ΕΝΟΤΗΤΑ 7 ΟΥΡΕΣ ΠΡΟΤΕΡΑΙΟΤΗΤΑΣ ΣΩΡΟΙ Ουρές Προτεραιότητας (Priority Queues) Θεωρούµε ότι τα προς αποθήκευση στοιχεία έχουν κάποια διάταξη (καθένα έχει µια προτεραιότητα). Τα προς αποθήκευση στοιχεία είναι
Λυσεις προβλημάτων τελικής φάσης Παγκύπριου Μαθητικού Διαγωνισμού Πληροφορικής 2007
Λυσεις προβλημάτων τελικής φάσης Παγκύπριου Μαθητικού Διαγωνισμού Πληροφορικής 2007 Πρόβλημα 1 Το πρώτο πρόβλημα λύνεται με τη μέθοδο του Δυναμικού Προγραμματισμού. Για να το λύσουμε με Δυναμικό Προγραμματισμό
Κατανεμημένα Συστήματα Ι
Κατανεμημένα Συστήματα Ι Εκλογή αρχηγού και κατασκευή BFS δένδρου σε σύγχρονο γενικό δίκτυο Παναγιώτα Παναγοπούλου Περίληψη Εκλογή αρχηγού σε γενικά δίκτυα Ορισμός του προβλήματος Ο αλγόριθμος FloodMax
1 Διάσχιση κατευθυνόμενων γραφημάτων
ΤΕΧΝΟΛΟΓΙΚΟ ΕΚΠΑΙΔΕΥΤΙΚΟ ΙΔΡΥΜΑ ΛΑΜΙΑΣ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ ΚΑΙ ΤΕΧΝΟΛΟΓΙΑΣ ΥΠΟΛΟΓΙΣΤΩΝ ΣΧΕΔΙΑΣΜΟΣ ΚΑΙ ΑΝΑΛΥΣΗ ΑΛΓΟΡΙΘΜΩΝ ΑΚΑΔΗΜΑΪΚΟ ΕΤΟΣ 2010 11 Ιστοσελίδα μαθήματος: http://eclass.teilam.gr/di288 5ο ΕΡΓΑΣΤΗΡΙΟ
ΕΙΣΑΓΩΓΗ ΣΤΟΝ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ Ενδεικτικές Απαντήσεις Εξετάσεων Α' Περιόδου Θέµα 1. (α') 2 - ii 3 - iii 4 - iv
ΕΙΣΑΓΩΓΗ ΣΤΟΝ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ Ενδεικτικές Απαντήσεις Εξετάσεων Α' Περιόδου 2011 Θέµα 1 (α') 1 - i 2 - ii 3 - iii 4 - iv 5 - v 6 - vi 7 - vii 8 - viii 9 - ix 10 - x Το αποτέλεσµα είναι η αντιστοιχία των
ΑΛΓΟΡΙΘΜΟΙ. Ενότητα 9: Άπληστοι Αλγόριθμοι. Ιωάννης Μανωλόπουλος, Καθηγητής Αναστάσιος Γούναρης, Επίκουρος Καθηγητής Τμήμα Πληροφορικής ΑΠΘ
ΑΡΙΣΤΟΤΕΛΕΙΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΟΝΙΚΗΣ ΑΝΟΙΚΤΑ ΑΚΑΔΗΜΑΪΚΑ ΜΑΘΗΜΑΤΑ ΑΛΓΟΡΙΘΜΟΙ Ενότητα 9: Άπληστοι Ιωάννης Μανωλόπουλος, Καθηγητής Αναστάσιος Γούναρης, Επίκουρος Καθηγητής Άδειες Χρήσης Το παρόν εκπαιδευτικό
Θεωρία Γραφημάτων 5η Διάλεξη
Θεωρία Γραφημάτων 5η Διάλεξη Α. Συμβώνης Εθνικο Μετσοβειο Πολυτεχνειο Σχολη Εφαρμοσμενων Μαθηματικων και Φυσικων Επιστημων Τομεασ Μαθηματικων Φεβρουάριος 2016 Α. Συμβώνης (ΕΜΠ) Θεωρία Γραφημάτων 5η Διάλεξη
Διδάσκων: Κωνσταντίνος Κώστα Διαφάνειες: Δημήτρης Ζεϊναλιπούρ
Διάλεξη 10: Λίστες Υλοποίηση & Εφαρμογές Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: Ευθύγραμμες Απλά Συνδεδεμένες Λίστες (εύρεση, εισαγωγή, διαγραφή) Σύγκριση Συνδεδεμένων Λιστών με Πίνακες
Υλοποίηση Λιστών. Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα:
Υλοποίηση Λιστών Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: Ευθύγραμμές Απλά και Διπλά Συνδεδεμένες Λίστες Κυκλικές Απλά και Διπλά Συνδεδεμένες Λίστες Τεχνικές Μείωσης Μνήμης ΕΠΛ 231 Δομές
Εισαγωγή στην Επιστήμη των Υπολογιστών
Εισαγωγή στην Επιστήμη των Υπολογιστών 4 ο εξάμηνο ΣΗΜΜΥ 5 η ενότητα: Γράφοι: προβλήματα και αλγόριθμοι Επιμέλεια διαφανειών: Στάθης Ζάχος, Άρης Παγουρτζής, Δημήτρης Φωτάκης Σχολή Ηλεκτρολόγων Μηχανικών
Ειδικά θέματα Αλγορίθμων και Δομών Δεδομένων (ΠΛΕ073) Απαντήσεις 1 ου Σετ Ασκήσεων
Ειδικά θέματα Αλγορίθμων και Δομών Δεδομένων (ΠΛΕ073) Απαντήσεις 1 ου Σετ Ασκήσεων Άσκηση 1 α) Η δομή σταθμισμένης ένωσης με συμπίεση διαδρομής μπορεί να τροποποιηθεί πολύ εύκολα ώστε να υποστηρίζει τις
Διάλεξη 16: Σωροί. Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: - Ουρές Προτεραιότητας - Ο ΑΤΔ Σωρός, Υλοποίηση και πράξεις
ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι 1 Διάλεξη 16: Σωροί Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: - Ουρές Προτεραιότητας - Ο ΑΤΔ Σωρός, Υλοποίηση και πράξεις Ουρά Προτεραιότητας Η δομή
Εισαγωγή στην C. Μορφή Προγράµµατος σε γλώσσα C
Εισαγωγή στην C Μορφή Προγράµµατος σε γλώσσα C Τµήµα Α Με την εντολή include συµπεριλαµβάνω στο πρόγραµµα τα πρότυπα των συναρτήσεων εισόδου/εξόδου της C.Το αρχείο κεφαλίδας stdio.h είναι ένας κατάλογος
Διάλεξη 07: Λίστες Ι Υλοποίηση & Εφαρμογές
Διάλεξη 07: Λίστες Ι Υλοποίηση & Εφαρμογές Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: Ευθύγραμμες Απλά Συνδεδεμένες Λίστες (εισαγωγή, εύρεση, διαγραφή) Ευθύγραμμες Διπλά Συνδεδεμένες Λίστες
Μη AVL Δέντρα Εισαγωγή κόμβου 4, 6 : 4 12 :
AVL δέντρα AVL Δέντρα L R G.M. AdelsonVelkii και E.M. Landis 192 Μη AVL Δέντρα Εισαγωγή κόμβου, : : Αριστερή στροφή 1 8, 1 : 8 1 7 : 7 8 1 Δεξιά στροφή 8 7 Αριστερή στροφή 1 8 7 1 Περιπτώσεις LL : ο νέος
Μάθημα 21: Ουρές (Queues)
Queues Page 1 Μάθημα 21: Ουρές (Queues) Η ουρά (queue) είναι μια δομή δεδομένων. Η βασική λειτουργικότητα είναι η εισαγωγή στοιχείων στην πίσω θέση και η εξαγωγή-διαγραφή στοιχείων από την μπροστινή θέση.
Πελάτες φθάνουν στο ταμείο μιας τράπεζας Eνα μόνο ταμείο είναι ανοικτό Κάθε πελάτης παρουσιάζεται με ένα νούμερο - αριθμός προτεραιότητας Όσο ο
Ουρές προτεραιότητας Πελάτες φθάνουν στο ταμείο μιας τράπεζας Eνα μόνο ταμείο είναι ανοικτό Κάθε πελάτης παρουσιάζεται με ένα νούμερο - αριθμός προτεραιότητας Όσο ο αριθμός είναι μεγάλος, τόσο οι πελάτες
Αλγόριθμοι Γραφημάτων
Αλγόριθμοι Γραφημάτων 1. Συντομότατα μονοπάτια 2. Αλγόριθμος Bellman-Ford 3. Αλγόριθμος Dijkstra 4. Floyd-Warshall Εισαγωγή στην Ανάλυση Αλγορίθμων Μάγια Σατρατζέμη Single-Source Shortest Path Πρόβλημα: