Στοιχειώδεις Δομές Δεδομένων TexPoint fonts used in EMF. Read the TexPoint manual before you delete this box.: AA A A A Τύποι δεδομένων στη C Ακέραιοι.

Slides:



Advertisements
Παρόμοιες παρουσιάσεις
Αναδρομικοί Αλγόριθμοι
Advertisements

Δομές Δεδομένων και Αλγόριθμοι
Το αλφαριθμητικό (string)
Δένδρα van Emde Boas TexPoint fonts used in EMF. Read the TexPoint manual before you delete this box.: AA A A A Μελετάμε την περίπτωση όπου αποθηκεύουμε.
Συλλογές, Στοίβες και Ουρές Σε πολλές εφαρμογές μας αρκεί η αναπαράσταση ενός δυναμικού συνόλου με μια δομή δεδομένων η οποία δεν υποστηρίζει την αναζήτηση.
Επίπεδα Γραφήματα (planar graphs)
Στοιχειώδεις Δομές Δεδομένων TexPoint fonts used in EMF. Read the TexPoint manual before you delete this box.: AA A A A Τύποι δεδομένων στη Java • Ακέραιοι.
Δυναμικοί πίνακες Πολλές δομές δεδομένων υλοποιούνται με χρήση πινάκων
ΜΑΘΗΜΑ 7ο Κυκλικές και Διπλά Συνδεδεμένες Λίστες,
ΕΠΛ 231 – Δομές Δεδομένων και Αλγόριθμοι
Λίστες παράλειψης (skip lists) TexPoint fonts used in EMF. Read the TexPoint manual before you delete this box.: AA A A A
Άμεσοι Αλγόριθμοι: Προσπέλαση Λίστας (list access) TexPoint fonts used in EMF. Read the TexPoint manual before you delete this box.: AA A A A Έχουμε αποθηκεύσει.
Επίπεδα Γραφήματα : Προβλήματα και Υπολογιστική Πολυπλοκότητα TexPoint fonts used in EMF. Read the TexPoint manual before you delete this box.: AA A AA.
Πολυπλοκότητα Παράμετροι της αποδοτικότητας ενός αλγόριθμου:
Ισορροπημένα Δένδρα TexPoint fonts used in EMF. Read the TexPoint manual before you delete this box.: AA A A A Μπορούμε να επιτύχουμε χρόνο εκτέλεσης για.
Δομές Αναζήτησης TexPoint fonts used in EMF. Read the TexPoint manual before you delete this box.: AA A A A εισαγωγή αναζήτησηεπιλογή διατεταγμένος πίνακας.
Ψηφιακά Δένδρα TexPoint fonts used in EMF. Read the TexPoint manual before you delete this box.: AA A A A Μπορούμε να χρησιμοποιήσουμε την παραπάνω αναπαράσταση.
Δένδρα Αναζήτησης Πολλαπλής Διακλάδωσης TexPoint fonts used in EMF. Read the TexPoint manual before you delete this box.: AA A A A Δένδρα στα οποία κάθε.
11-1 ΜΑΘΗΜΑ 12 ο Γράφοι, Διάσχιση Γράφων Υλικό από τις σημειώσεις Ν. Παπασπύρου, 2006.
1Πέτρος ΣτεφανέαςΠρογραμματιστικές Τεχνικές ΓΡΑΦΟΙ (GRAPHS) ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΕΣ ΤΕΧΝΙΚΕΣ Διδάσκοντες:Γιάννης Μαΐστρος Νίκος Παπασπύρου.
Διαίρει και Βασίλευε πρόβλημα μεγέθους Ν διάσπαση πρόβλημα μεγέθους Ν-k πρόβλημα μεγέθους k.
Κοντινότεροι Κοινοί Πρόγονοι α βγ θ δεζ η π ν ι κλμ ρσ τ κκπ(λ,ι)=α, κκπ(τ,σ)=ν, κκπ(λ,π)=η κκπ(π,σ)=γ, κκπ(ξ,ο)=κ ξο κκπ(ι,ξ)=β, κκπ(τ,θ)=θ, κκπ(ο,μ)=α.
Προσεγγιστικοί Αλγόριθμοι
Δυναμική Διατήρηση Γραμμικής Διάταξης Διατηρεί μια γραμμική διάταξη δυναμικά μεταβαλλόμενης συλλογής στοιχείων. Υποστηρίζει τις λειτουργίες: Έλεγχος της.
Μέγιστη ροή TexPoint fonts used in EMF. Read the TexPoint manual before you delete this box.: AA A AA A A Συνάρτηση χωρητικότητας Κατευθυνόμενο γράφημα.
Αριθμοθεωρητικοί Αλγόριθμοι TexPoint fonts used in EMF. Read the TexPoint manual before you delete this box.: AA A AA A A Αλγόριθμοι που επεξεργάζονται.
Τυχαιοκρατικοί Αλγόριθμοι TexPoint fonts used in EMF. Read the TexPoint manual before you delete this box.: AA Πιθανότητες και Αλγόριθμοι Ανάλυση μέσης.
Ισορροπημένα Δένδρα TexPoint fonts used in EMF. Read the TexPoint manual before you delete this box.: AA A A A Μπορούμε να επιτύχουμε χρόνο εκτέλεσης για.
TexPoint fonts used in EMF. Read the TexPoint manual before you delete this box.: AA A Δυναμικός Προγραμματισμός πρόβλημα μεγέθους Ν διάσπαση πρόβλημα.
Δομές Αναζήτησης TexPoint fonts used in EMF. Read the TexPoint manual before you delete this box.: AA A A A Χειριζόμαστε ένα σύνολο στοιχείων όπου το κάθε.
Ανάλυση αλγορίθμων Παράμετροι απόδοσης ενός αλγόριθμου: Χρόνος εκτέλεσης Απαιτούμενοι πόροι, π.χ. μνήμη, επικοινωνία (π.χ. σε κατανεμημένα συστήματα) Προσπάθεια.
Ελαφρύτατες διαδρομές TexPoint fonts used in EMF. Read the TexPoint manual before you delete this box.: AA A AA A A Συνάρτηση βάρους Κατευθυνόμενο γράφημα.
Ισορροπημένα Δένδρα TexPoint fonts used in EMF. Read the TexPoint manual before you delete this box.: AA A A A Μπορούμε να επιτύχουμε χρόνο εκτέλεσης για.
Ψηφιακά Δένδρα TexPoint fonts used in EMF. Read the TexPoint manual before you delete this box.: AA A A A Μπορούμε να χρησιμοποιήσουμε την παραπάνω αναπαράσταση.
ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΠΛΗΡΟΦΟΡΙΚΗ
Δυναμικη Δεσμευση Μνημης Συνδεδεμενες Λιστες (dynamic memory allocation, linked lists) Πως υλοποιουμαι προγραμματα που δεν γνωριζουμε πριν την εκτελεση.
Δυναμικά Σύνολα TexPoint fonts used in EMF. Read the TexPoint manual before you delete this box.: AA A AA A A Δυναμικό σύνολο Tα στοιχεία του μεταβάλλονται.
TexPoint fonts used in EMF. Read the TexPoint manual before you delete this box.: AA A A A Ουρά Προτεραιότητας (priority queue) Δομή δεδομένων που υποστηρίζει.
TexPoint fonts used in EMF. Read the TexPoint manual before you delete this box.: AA A A A Ουρά Προτεραιότητας (priority queue) Δομή δεδομένων που υποστηρίζει.
ΕΠΛ 223 Θεωρία και Πρακτική Μεταγλωττιστών7-1 Πίνακας Συμβόλων Πίνακας συμβόλων: δομή δεδομένων που χρησιμοποιείται για την αποθήκευση διαφόρων πληροφοριών.
Διερεύνηση γραφήματος. Ένας αλγόριθμος διερεύνησης γραφήματος επισκέπτεται τους κόμβους του γραφήματος με μια καθορισμένη στρατηγική, π.χ. κατά εύρος.
Δυναμικά Σύνολα TexPoint fonts used in EMF. Read the TexPoint manual before you delete this box.: AA A AA A A Δυναμικό σύνολο Tα στοιχεία του μεταβάλλονται.
Ελαφρύτατες διαδρομές TexPoint fonts used in EMF. Read the TexPoint manual before you delete this box.: AA A AA A A.
TexPoint fonts used in EMF. Read the TexPoint manual before you delete this box.: AA A A A Ουρά Προτεραιότητας (priority queue) Δομή δεδομένων που υποστηρίζει.
Γραμμικός Προγραμματισμός TexPoint fonts used in EMF. Read the TexPoint manual before you delete this box.: AA A AA A A Μια εταιρεία παράγει κέικ δύο κατηγοριών,
Δομές Αναζήτησης TexPoint fonts used in EMF. Read the TexPoint manual before you delete this box.: AA A A A Θέλουμε να υποστηρίξουμε δύο βασικές λειτουργίες:
Επίπεδα Γραφήματα: Έλεγχος Επιπεδότητας TexPoint fonts used in EMF. Read the TexPoint manual before you delete this box.: AA A AA A A αβ ζ η ε γ θ Το γράφημα.
Διερεύνηση γραφήματος. Ένας αλγόριθμος διερεύνησης γραφήματος επισκέπτεται τους κόμβους του γραφήματος με μια καθορισμένη στρατηγική, π.χ. κατά εύρος.
Θεωρία Γράφων Θεμελιώσεις-Αλγόριθμοι-Εφαρμογές
Lab 3: Sorted List ΕΠΛ231-Δομές Δεδομένων και Αλγόριθμοι115/4/2015.
Λίστες παράλειψης (skip lists) TexPoint fonts used in EMF. Read the TexPoint manual before you delete this box.: AA A A A
Γράφημα TexPoint fonts used in EMF. Read the TexPoint manual before you delete this box.: AA A A A Συνδυαστικό αντικείμενο που αποτελείται από.
Μέγιστη ροή TexPoint fonts used in EMF. Read the TexPoint manual before you delete this box.: AA A AA A A Συνάρτηση χωρητικότητας Κατευθυνόμενο γράφημα.
Ελαφρύτατες διαδρομές TexPoint fonts used in EMF. Read the TexPoint manual before you delete this box.: AA A AA A A.
Δομές Δεδομένων και Αρχεία Ενότητα 10: Κυκλικά και Διπλά Συνδεδεμένη Λίστα Ηλίας Κ. Σάββας, Αναπληρωτής Καθηγητής, Τμήμα Μηχανικών Πληροφορικής Τ.Ε., T.E.I.
Μέγιστη ροή TexPoint fonts used in EMF. Read the TexPoint manual before you delete this box.: AA A AA A A Συνάρτηση χωρητικότητας Κατευθυνόμενο γράφημα.
Συνδετικότητα γραφήματος (graph connectivity). α β Υπάρχει μονοπάτι μεταξύ α και β; Παραδείγματα: υπολογιστές ενός δικτύου ιστοσελίδες ισοδύναμες μεταβλητές.
Γράφημα Συνδυαστικό αντικείμενο που αποτελείται από 2 σύνολα:
Στοιχειώδεις Δομές Δεδομένων: Πίνακες και Λίστες
Διερεύνηση γραφήματος
Μέγιστη ροή Κατευθυνόμενο γράφημα 12 Συνάρτηση χωρητικότητας
Πίνακες Συμβόλων TexPoint fonts used in EMF.
Μέγιστη ροή Κατευθυνόμενο γράφημα 12 Συνάρτηση χωρητικότητας
Ισορροπημένα Δένδρα Μπορούμε να επιτύχουμε χρόνο εκτέλεσης
Δένδρα Αναζήτησης Πολλαπλής Διακλάδωσης
Ισορροπημένα Δένδρα Μπορούμε να επιτύχουμε χρόνο εκτέλεσης
Ουρά Προτεραιότητας (priority queue)
Δομές Αναζήτησης Χειριζόμαστε ένα σύνολο στοιχείων όπου το κάθε στοιχείο έχει ένα κλειδί από ολικά διατεταγμένο σύνολο Θέλουμε να υποστηρίξουμε δύο.
Ελαφρύτατες διαδρομές
Εξωτερική Αναζήτηση Ιεραρχία Μνήμης Υπολογιστή Εξωτερική Μνήμη
Μεταγράφημα παρουσίασης:

Στοιχειώδεις Δομές Δεδομένων TexPoint fonts used in EMF. Read the TexPoint manual before you delete this box.: AA A A A Τύποι δεδομένων στη C Ακέραιοι ( int, long ) Αριθμοί κινητής υποδιαστολής ( float, double ) Χαρακτήρες ( char ) Από τους παραπάνω μπορούμε να φτιάξουμε σύνθετους τύπους typedef struct { float x; float y; } point; Π.χ.

Πίνακες Σύνολο στοιχείων ιδίου τύπου Π.χ. πίνακας ακεραίων, πίνακας δεικτών σε ακέραιους, … Συνεχόμενες θέσεις στη μνήμη Το i-oστο στοιχείο Α[i-1] βρίσκεται στη θέση X + (i-1)*L, όπου Χ η θέση του πρώτου στοιχείου Α[0] και L το μέγεθος του κάθε στοιχείου Αναφορά με χρήση ακέραιου δείκτη Π.χ. ανάθεση τιμής στο 3 ο στοιχείο του πίνακα Α[2]=t; Πίνακας (array) Α με στοιχεία τύπου T

Πίνακες Πίνακες στη C #define N 1000 void initialize(int A[]) { int i; for (i=0; i<N; i++) A[i]=0; } void main() { int A[N]; initialize(A); } Στατική κατανομή μνήμης Στην C, το όνομα ενός πίνακα είναι δείκτης στο 1 ο στοιχείο του Α[0]

Πίνακες Πίνακες στη C void initialize(int *A, int N) { A = malloc(N*sizeof(int)); for (i=0; i<N; i++) A[i]=0; } void main() { int *A; int N; read(N); initialize(A,N); } Δυναμική κατανομή μνήμης

Πίνακες Πίνακες στη C void initialize(int *A, int N) { A = malloc(N*sizeof(int)); for (i=0; i<N; i++) A[i]=0; } void main() { int *A; int N; read(N); initialize(A,N); } Δυναμική κατανομή μνήμης Τι γίνεται αν δε γνωρίζουμε εκ των προτέρων τηv τιμή του N ;

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

Δυναμικοί πίνακες Δυναμικοί πίνακες με εισαγωγές και διαγραφές εισαγωγή με διπλασιασμός διαγραφή με 7 0 υποδιπλασιασμός Επιτυγχάνει και συνολικό κόστος για εισαγωγές/διαγραφές

Συνδεδεμένες Λίστες Συνδεδεμένη λίστα: Αποθηκεύει ένα σύνολο στοιχείων σε κόμβους. typedef struct node *link; struct node {Item item; link next;}; Κάθε κόμβος περιλαμβάνει ένα σύνδεσμο προς τον επόμενο κόμβο. node : item next : δείκτης σε κόμβο τύπου node

Συνδεδεμένες Λίστες Συνδεδεμένη λίστα: Αποθηκεύει ένα σύνολο στοιχείων σε κόμβους. typedef struct node *link; struct node {Item item; link next;}; Κάθε κόμβος περιλαμβάνει ένα σύνδεσμο προς τον επόμενο κόμβο. node : item μηδενικός σύνδεσμος ( NULL ) next : δείκτης σε κόμβο τύπου node

Συνδεδεμένες Λίστες Συνδεδεμένη λίστα: Αποθηκεύει ένα σύνολο στοιχείων σε κόμβους. typedef struct node *link; struct node {Item item; link next;}; Κάθε κόμβος περιλαμβάνει ένα σύνδεσμο προς τον επόμενο κόμβο. node : item μηδενικός σύνδεσμος ( NULL ) next : δείκτης σε κόμβο τύπου node link head Για να προσπελάσουμε τα στοιχεία της λίστας χρειαζόμαστε ένα δείκτη στον πρώτο κόμβο της λίστας. Ο δείκτης αποθηκεύεται στη μεταβλητή head (τύπου link ).

Συνδεδεμένες Λίστες Συνδεδεμένη λίστα: Αποθηκεύει ένα σύνολο στοιχείων σε κόμβους. typedef struct node *link; struct node {Item item; link next;}; Κάθε κόμβος περιλαμβάνει ένα σύνδεσμο προς τον επόμενο κόμβο. node : item σύνδεσμος προς τον πρώτο κόμβο κυκλική λίστα next : δείκτης σε κόμβο τύπου node link head Σε ορισμένες περιπτώσεις που θέλουμε να επεξεργαστούμε τα στοιχεία της λίστας πολλαπλές φορές είναι βολικό να κάνουμε τη λίστα κυκλική

Συνδεδεμένες Λίστες Συνδεδεμένη λίστα: Αποθηκεύει ένα σύνολο στοιχείων σε κόμβους. typedef struct node *link; struct node {Item item; link next;}; Κάθε κόμβος περιλαμβάνει ένα σύνδεσμο προς τον επόμενο κόμβο. node : item δημιουργία νέου κόμβου link x = malloc(sizeof *x); next : δείκτης σε κόμβο τύπου node x x->item = πεδίο item του κόμβου που δείχνει ο x x->next = πεδίο next του κόμβου που δείχνει ο x

Συνδεδεμένες Λίστες Συνδεδεμένη λίστα: Αποθηκεύει ένα σύνολο στοιχείων σε κόμβους. typedef struct node *link; struct node {Item item; link next;}; Κάθε κόμβος περιλαμβάνει ένα σύνδεσμο προς τον επόμενο κόμβο. Εισαγωγή του κόμβου t μετά το x x x->next t

Συνδεδεμένες Λίστες Συνδεδεμένη λίστα: Αποθηκεύει ένα σύνολο στοιχείων σε κόμβους. typedef struct node *link; struct node {Item item; link next;}; Κάθε κόμβος περιλαμβάνει ένα σύνδεσμο προς τον επόμενο κόμβο. Εισαγωγή του κόμβου t μετά το x x->next x t t->next = x->next;

Συνδεδεμένες Λίστες Συνδεδεμένη λίστα: Αποθηκεύει ένα σύνολο στοιχείων σε κόμβους. typedef struct node *link; struct node {Item item; link next;}; Κάθε κόμβος περιλαμβάνει ένα σύνδεσμο προς τον επόμενο κόμβο. Εισαγωγή του κόμβου t μετά το x x t x->next = t; t->next = x->next;

Συνδεδεμένες Λίστες Συνδεδεμένη λίστα: Αποθηκεύει ένα σύνολο στοιχείων σε κόμβους. typedef struct node *link; struct node {Item item; link next;}; Κάθε κόμβος περιλαμβάνει ένα σύνδεσμο προς τον επόμενο κόμβο. Διαγραφή του κόμβου μετά το x x x->next

Συνδεδεμένες Λίστες Συνδεδεμένη λίστα: Αποθηκεύει ένα σύνολο στοιχείων σε κόμβους. typedef struct node *link; struct node {Item item; link next;}; Κάθε κόμβος περιλαμβάνει ένα σύνδεσμο προς τον επόμενο κόμβο. Διαγραφή του κόμβου μετά το x x x->next t t = x->next;

Συνδεδεμένες Λίστες Συνδεδεμένη λίστα: Αποθηκεύει ένα σύνολο στοιχείων σε κόμβους. typedef struct node *link; struct node {Item item; link next;}; Κάθε κόμβος περιλαμβάνει ένα σύνδεσμο προς τον επόμενο κόμβο. Διαγραφή του κόμβου μετά το x x t t = x->next; x->next = t->next;

Συνδεδεμένες Λίστες Συνδεδεμένη λίστα: Αποθηκεύει ένα σύνολο στοιχείων σε κόμβους. typedef struct node *link; struct node {Item item; link next;}; Κάθε κόμβος περιλαμβάνει ένα σύνδεσμο προς τον επόμενο κόμβο. Διαγραφή του κόμβου μετά το x x t t = x->next; x->next = t->next; free(t);

Πρόβλημα του Josephus Ν άτομα στέκονται σε ένα κύκλο και περιμένουν να εκτελεστούν. Σε κάθε βήμα εκτελείται το Μ-οστό άτομο όπως διατρέχουμε τον κύκλο. Στον τελευταίο που θα μείνει δίνεται χάρη Π.χ. Ν=8, Μ=5 αρχική θέση

Πρόβλημα του Josephus Ν άτομα στέκονται σε ένα κύκλο και περιμένουν να εκτελεστούν. Σε κάθε βήμα εκτελείται το Μ-οστό άτομο όπως διατρέχουμε τον κύκλο. Στον τελευταίο που θα μείνει δίνεται χάρη Π.χ. Ν=8, Μ=5

Πρόβλημα του Josephus Ν άτομα στέκονται σε ένα κύκλο και περιμένουν να εκτελεστούν. Σε κάθε βήμα εκτελείται το Μ-οστό άτομο όπως διατρέχουμε τον κύκλο. Στον τελευταίο που θα μείνει δίνεται χάρη Π.χ. Ν=8, Μ=5

Πρόβλημα του Josephus Ν άτομα στέκονται σε ένα κύκλο και περιμένουν να εκτελεστούν. Σε κάθε βήμα εκτελείται το Μ-οστό άτομο όπως διατρέχουμε τον κύκλο. Στον τελευταίο που θα μείνει δίνεται χάρη Π.χ. Ν=8, Μ=5

Πρόβλημα του Josephus Ν άτομα στέκονται σε ένα κύκλο και περιμένουν να εκτελεστούν. Σε κάθε βήμα εκτελείται το Μ-οστό άτομο όπως διατρέχουμε τον κύκλο. Στον τελευταίο που θα μείνει δίνεται χάρη Π.χ. Ν=8, Μ=5

Πρόβλημα του Josephus Ν άτομα στέκονται σε ένα κύκλο και περιμένουν να εκτελεστούν. Σε κάθε βήμα εκτελείται το Μ-οστό άτομο όπως διατρέχουμε τον κύκλο. Στον τελευταίο που θα μείνει δίνεται χάρη Π.χ. Ν=8, Μ=5

Πρόβλημα του Josephus Ν άτομα στέκονται σε ένα κύκλο και περιμένουν να εκτελεστούν. Σε κάθε βήμα εκτελείται το Μ-οστό άτομο όπως διατρέχουμε τον κύκλο. Στον τελευταίο που θα μείνει δίνεται χάρη Π.χ. Ν=8, Μ=5

Πρόβλημα του Josephus Ν άτομα στέκονται σε ένα κύκλο και περιμένουν να εκτελεστούν. Σε κάθε βήμα εκτελείται το Μ-οστό άτομο όπως διατρέχουμε τον κύκλο. Στον τελευταίο που θα μείνει δίνεται χάρη Π.χ. Ν=8, Μ=5

Πρόβλημα του Josephus Ν άτομα στέκονται σε ένα κύκλο και περιμένουν να εκτελεστούν. Σε κάθε βήμα εκτελείται το Μ-οστό άτομο όπως διατρέχουμε τον κύκλο. Στον τελευταίο που θα μείνει δίνεται χάρη Π.χ. Ν=8, Μ=5

Πρόβλημα του Josephus Ν άτομα στέκονται σε ένα κύκλο και περιμένουν να εκτελεστούν. Σε κάθε βήμα εκτελείται το Μ-οστό άτομο όπως διατρέχουμε τον κύκλο. Στον τελευταίο που θα μείνει δίνεται χάρη Π.χ. Ν=8, Μ=5

Πρόβλημα του Josephus Ν άτομα στέκονται σε ένα κύκλο και περιμένουν να εκτελεστούν. Σε κάθε βήμα εκτελείται το Μ-οστό άτομο όπως διατρέχουμε τον κύκλο. Στον τελευταίο που θα μείνει δίνεται χάρη Π.χ. Ν=8, Μ=5

Πρόβλημα του Josephus Ν άτομα στέκονται σε ένα κύκλο και περιμένουν να εκτελεστούν. Σε κάθε βήμα εκτελείται το Μ-οστό άτομο όπως διατρέχουμε τον κύκλο. Στον τελευταίο που θα μείνει δίνεται χάρη Π.χ. Ν=8, Μ=5

Πρόβλημα του Josephus Ν άτομα στέκονται σε ένα κύκλο και περιμένουν να εκτελεστούν. Σε κάθε βήμα εκτελείται το Μ-οστό άτομο όπως διατρέχουμε τον κύκλο. Στον τελευταίο που θα μείνει δίνεται χάρη Π.χ. Ν=8, Μ=5

Πρόβλημα του Josephus Ν άτομα στέκονται σε ένα κύκλο και περιμένουν να εκτελεστούν. Σε κάθε βήμα εκτελείται το Μ-οστό άτομο όπως διατρέχουμε τον κύκλο. Στον τελευταίο που θα μείνει δίνεται χάρη Π.χ. Ν=8, Μ=5

Πρόβλημα του Josephus Ν άτομα στέκονται σε ένα κύκλο και περιμένουν να εκτελεστούν. Σε κάθε βήμα εκτελείται το Μ-οστό άτομο όπως διατρέχουμε τον κύκλο. Στον τελευταίο που θα μείνει δίνεται χάρη. 3 6 Π.χ. Ν=8, Μ=5

Πρόβλημα του Josephus Ν άτομα στέκονται σε ένα κύκλο και περιμένουν να εκτελεστούν. Σε κάθε βήμα εκτελείται το Μ-οστό άτομο όπως διατρέχουμε τον κύκλο. Στον τελευταίο που θα μείνει δίνεται χάρη. 3 6 Π.χ. Ν=8, Μ=5

Πρόβλημα του Josephus Ν άτομα στέκονται σε ένα κύκλο και περιμένουν να εκτελεστούν. Σε κάθε βήμα εκτελείται το Μ-οστό άτομο όπως διατρέχουμε τον κύκλο. Στον τελευταίο που θα μείνει δίνεται χάρη. 3 Π.χ. Ν=8, Μ=5

Πρόβλημα του Josephus Ν άτομα στέκονται σε ένα κύκλο και περιμένουν να εκτελεστούν. Σε κάθε βήμα εκτελείται το Μ-οστό άτομο όπως διατρέχουμε τον κύκλο. Στον τελευταίο που θα μείνει δίνεται χάρη. #include typedef struct node *link; struct node {int item; link next;}; main(int argc, char *argv[]){ int i, N=atoi(argv[1]), M=atoi(argv[2]); link t=malloc(sizeof *t), x=t; t->item=1; t->next=t; for (i=2; i<=N; i++){ x=(x->next=malloc(sizeof *x)); x->item=i; x->next=t; } while (x!=x->next){ for (i=1; i next; x->next=x->next->next; N--; } printf(“%d\n”, x->item); }

Ταξινόμηση Συνδεδεμένης Λίστας Μη διατεταγμένη λίστα ταξινόμηση

Ταξινόμηση Συνδεδεμένης Λίστας Ταξινόμηση με εισαγωγή Έστω a η αρχική λίστα. Διατηρούμε μία ακόμα λίστα b που θα είναι διατεταγμένη. Για ευκολία τοποθετούμε ένα ψευδο-κόμβο κεφαλής στην αρχή κάθε λίστας Αρχικά η b περιλαμβάνει μόνο τον ψευδο-κόμβο κεφαλής. Μέχρι να αδειάσει η a διαγράφουμε το πρώτο στοιχείο της a και το εισάγουμε στη σωστή του θέση στη b. a b ψευδο-κόμβοι κεφαλής

Ταξινόμηση Συνδεδεμένης Λίστας Ταξινόμηση με εισαγωγή Έστω a η αρχική λίστα. Διατηρούμε μία ακόμα λίστα b που θα είναι διατεταγμένη. Για ευκολία τοποθετούμε ένα ψευδο-κόμβο κεφαλής στην αρχή κάθε λίστας Αρχικά η b περιλαμβάνει μόνο τον ψευδο-κόμβο κεφαλής. Μέχρι να αδειάσει η a διαγράφουμε το πρώτο στοιχείο της a και το εισάγουμε στη σωστή του θέση στη b. a b t x t = επόμενος κόμβος της a x = κόμβος της b που προηγείται του t : ο t πρέπει να τοποθετηθεί στη θέση x->next

Ταξινόμηση Συνδεδεμένης Λίστας Ταξινόμηση με εισαγωγή Έστω a η αρχική λίστα. Διατηρούμε μία ακόμα λίστα b που θα είναι διατεταγμένη. Για ευκολία τοποθετούμε ένα ψευδο-κόμβο κεφαλής στην αρχή κάθε λίστας Αρχικά η b περιλαμβάνει μόνο τον ψευδο-κόμβο κεφαλής. Μέχρι να αδειάσει η a διαγράφουμε το πρώτο στοιχείο της a και το εισάγουμε στη σωστή του θέση στη b. a b tx t = επόμενος κόμβος της a x = κόμβος της b που προηγείται του t : ο t πρέπει να τοποθετηθεί στη θέση x->next

Ταξινόμηση Συνδεδεμένης Λίστας Ταξινόμηση με εισαγωγή Έστω a η αρχική λίστα. Διατηρούμε μία ακόμα λίστα b που θα είναι διατεταγμένη. Για ευκολία τοποθετούμε ένα ψευδο-κόμβο κεφαλής στην αρχή κάθε λίστας Αρχικά η b περιλαμβάνει μόνο τον ψευδο-κόμβο κεφαλής. Μέχρι να αδειάσει η a διαγράφουμε το πρώτο στοιχείο της a και το εισάγουμε στη σωστή του θέση στη b. a b t x t = επόμενος κόμβος της a x = κόμβος της b που προηγείται του t : ο t πρέπει να τοποθετηθεί στη θέση x->next

Ταξινόμηση Συνδεδεμένης Λίστας Ταξινόμηση με εισαγωγή Έστω a η αρχική λίστα. Διατηρούμε μία ακόμα λίστα b που θα είναι διατεταγμένη. Για ευκολία τοποθετούμε ένα ψευδο-κόμβο κεφαλής στην αρχή κάθε λίστας Αρχικά η b περιλαμβάνει μόνο τον ψευδο-κόμβο κεφαλής. Μέχρι να αδειάσει η a διαγράφουμε το πρώτο στοιχείο της a και το εισάγουμε στη σωστή του θέση στη b. a b t x 5 t = επόμενος κόμβος της a x = κόμβος της b που προηγείται του t : ο t πρέπει να τοποθετηθεί στη θέση x->next

Ταξινόμηση Συνδεδεμένης Λίστας Ταξινόμηση με εισαγωγή Έστω a η αρχική λίστα. Διατηρούμε μία ακόμα λίστα b που θα είναι διατεταγμένη. Για ευκολία τοποθετούμε ένα ψευδο-κόμβο κεφαλής στην αρχή κάθε λίστας Αρχικά η b περιλαμβάνει μόνο τον ψευδο-κόμβο κεφαλής. Μέχρι να αδειάσει η a διαγράφουμε το πρώτο στοιχείο της a και το εισάγουμε στη σωστή του θέση στη b. a b t x 5 t = επόμενος κόμβος της a x = κόμβος της b που προηγείται του t : ο t πρέπει να τοποθετηθεί στη θέση x->next

Ταξινόμηση Συνδεδεμένης Λίστας Ταξινόμηση με εισαγωγή Έστω a η αρχική λίστα. Διατηρούμε μία ακόμα λίστα b που θα είναι διατεταγμένη. Για ευκολία τοποθετούμε ένα ψευδο-κόμβο κεφαλής στην αρχή κάθε λίστας Αρχικά η b περιλαμβάνει μόνο τον ψευδο-κόμβο κεφαλής. Μέχρι να αδειάσει η a διαγράφουμε το πρώτο στοιχείο της a και το εισάγουμε στη σωστή του θέση στη b. a b t x 5 t = επόμενος κόμβος της a x = κόμβος της b που προηγείται του t : ο t πρέπει να τοποθετηθεί στη θέση x->next

Ταξινόμηση Συνδεδεμένης Λίστας Ταξινόμηση με εισαγωγή Έστω a η αρχική λίστα. Διατηρούμε μία ακόμα λίστα b που θα είναι διατεταγμένη. Για ευκολία τοποθετούμε ένα ψευδο-κόμβο κεφαλής στην αρχή κάθε λίστας Αρχικά η b περιλαμβάνει μόνο τον ψευδο-κόμβο κεφαλής. Μέχρι να αδειάσει η a διαγράφουμε το πρώτο στοιχείο της a και το εισάγουμε στη σωστή του θέση στη b. a b t x 5 t = επόμενος κόμβος της a x = κόμβος της b που προηγείται του t : ο t πρέπει να τοποθετηθεί στη θέση x->next

Ταξινόμηση Συνδεδεμένης Λίστας 2 81 Ταξινόμηση με εισαγωγή Έστω a η αρχική λίστα. Διατηρούμε μία ακόμα λίστα b που θα είναι διατεταγμένη. Για ευκολία τοποθετούμε ένα ψευδο-κόμβο κεφαλής στην αρχή κάθε λίστας Αρχικά η b περιλαμβάνει μόνο τον ψευδο-κόμβο κεφαλής. Μέχρι να αδειάσει η a διαγράφουμε το πρώτο στοιχείο της a και το εισάγουμε στη σωστή του θέση στη b. a b tx 512 t = επόμενος κόμβος της a x = κόμβος της b που προηγείται του t : ο t πρέπει να τοποθετηθεί στη θέση x->next

Ταξινόμηση Συνδεδεμένης Λίστας 2 81 Ταξινόμηση με εισαγωγή Έστω a η αρχική λίστα. Διατηρούμε μία ακόμα λίστα b που θα είναι διατεταγμένη. Για ευκολία τοποθετούμε ένα ψευδο-κόμβο κεφαλής στην αρχή κάθε λίστας Αρχικά η b περιλαμβάνει μόνο τον ψευδο-κόμβο κεφαλής. Μέχρι να αδειάσει η a διαγράφουμε το πρώτο στοιχείο της a και το εισάγουμε στη σωστή του θέση στη b. a b t x 512 t = επόμενος κόμβος της a x = κόμβος της b που προηγείται του t : ο t πρέπει να τοποθετηθεί στη θέση x->next

Ταξινόμηση Συνδεδεμένης Λίστας 2 81 Ταξινόμηση με εισαγωγή Έστω a η αρχική λίστα. Διατηρούμε μία ακόμα λίστα b που θα είναι διατεταγμένη. Για ευκολία τοποθετούμε ένα ψευδο-κόμβο κεφαλής στην αρχή κάθε λίστας Αρχικά η b περιλαμβάνει μόνο τον ψευδο-κόμβο κεφαλής. Μέχρι να αδειάσει η a διαγράφουμε το πρώτο στοιχείο της a και το εισάγουμε στη σωστή του θέση στη b. a b t x 512 t = επόμενος κόμβος της a x = κόμβος της b που προηγείται του t : ο t πρέπει να τοποθετηθεί στη θέση x->next

Ταξινόμηση Συνδεδεμένης Λίστας 2 81 Ταξινόμηση με εισαγωγή Έστω a η αρχική λίστα. Διατηρούμε μία ακόμα λίστα b που θα είναι διατεταγμένη. Για ευκολία τοποθετούμε ένα ψευδο-κόμβο κεφαλής στην αρχή κάθε λίστας Αρχικά η b περιλαμβάνει μόνο τον ψευδο-κόμβο κεφαλής. Μέχρι να αδειάσει η a διαγράφουμε το πρώτο στοιχείο της a και το εισάγουμε στη σωστή του θέση στη b. a b t x 512 t = επόμενος κόμβος της a x = κόμβος της b που προηγείται του t : ο t πρέπει να τοποθετηθεί στη θέση x->next

Ταξινόμηση Συνδεδεμένης Λίστας 2 1 Ταξινόμηση με εισαγωγή Έστω a η αρχική λίστα. Διατηρούμε μία ακόμα λίστα b που θα είναι διατεταγμένη. Για ευκολία τοποθετούμε ένα ψευδο-κόμβο κεφαλής στην αρχή κάθε λίστας Αρχικά η b περιλαμβάνει μόνο τον ψευδο-κόμβο κεφαλής. Μέχρι να αδειάσει η a διαγράφουμε το πρώτο στοιχείο της a και το εισάγουμε στη σωστή του θέση στη b. a b tx 5812 t = επόμενος κόμβος της a x = κόμβος της b που προηγείται του t : ο t πρέπει να τοποθετηθεί στη θέση x->next

Ταξινόμηση Συνδεδεμένης Λίστας 2 1 Ταξινόμηση με εισαγωγή Έστω a η αρχική λίστα. Διατηρούμε μία ακόμα λίστα b που θα είναι διατεταγμένη. Για ευκολία τοποθετούμε ένα ψευδο-κόμβο κεφαλής στην αρχή κάθε λίστας Αρχικά η b περιλαμβάνει μόνο τον ψευδο-κόμβο κεφαλής. Μέχρι να αδειάσει η a διαγράφουμε το πρώτο στοιχείο της a και το εισάγουμε στη σωστή του θέση στη b. a b t x 5812 t = επόμενος κόμβος της a x = κόμβος της b που προηγείται του t : ο t πρέπει να τοποθετηθεί στη θέση x->next

Ταξινόμηση Συνδεδεμένης Λίστας 1 Ταξινόμηση με εισαγωγή Έστω a η αρχική λίστα. Διατηρούμε μία ακόμα λίστα b που θα είναι διατεταγμένη. Για ευκολία τοποθετούμε ένα ψευδο-κόμβο κεφαλής στην αρχή κάθε λίστας Αρχικά η b περιλαμβάνει μόνο τον ψευδο-κόμβο κεφαλής. Μέχρι να αδειάσει η a διαγράφουμε το πρώτο στοιχείο της a και το εισάγουμε στη σωστή του θέση στη b. a b t x t = επόμενος κόμβος της a x = κόμβος της b που προηγείται του t : ο t πρέπει να τοποθετηθεί στη θέση x->next

Ταξινόμηση Συνδεδεμένης Λίστας Ταξινόμηση με εισαγωγή t = επόμενος κόμβος της a x = κόμβος της b που προηγείται του t : ο t πρέπει να τοποθετηθεί στη θέση x->next struct node heada, headb; link a = &heada;... /* construct list a */... /* sort list */ a = &heada; link b = &headb; b->next = NULL; link t, u, x; for (t = a->next; t != NULL; t = u){ u = t->next; for (x = b; x->next != NULL; x = x->next) if (x->next->item > t->item) break; t->next = x->next; x->next = t; }

Ταξινόμηση Συνδεδεμένης Λίστας Ταξινόμηση με εισαγωγή t = επόμενος κόμβος της a x = κόμβος της b που προηγείται του t : ο t πρέπει να τοποθετηθεί στη θέση x->next struct node heada, headb; link a = &heada;... /* construct list a */... /* sort list */ a = &heada; link b = &headb; b->next = NULL; link t, u, x; for (t = a->next; t != NULL; t = u){ u = t->next; for (x = b; x->next != NULL; x = x->next) if (x->next->item > t->item) break; t->next = x->next; x->next = t; } 2 81 a b t 512 x u

Διπλά Συνδεδεμένη Λίστα διπλά συνδεδεμένη λίστα typedef struct node *link; struct node {Item item; link next; link previous;}; διπλά συνδεδεμένη κυκλική λίστα

Δομή Εύρεσης-Ένωσης με Λίστες Διατηρούμε ξένα μεταξύ τους σύνολα που είναι υποσύνολα ενός, όπου και Δημιουργεί νέο σύνολο με μόνο στοιχείο το Έστω το σύνολο που περιέχει το και έστω το σύνολο που περιέχει το. Δημιουργεί ένα νέο σύνολο και διαγράφει τα και Επιστρέφει το όνομα του συνόλου που περιέχει το Λειτουργίες Ως «όνομα» ενός συνόλου μπορούμε να ορίσουμε ένα στοιχείο που να αποτελεί τον «αντιπρόσωπο» του συνόλου συνόλου

Δομή Εύρεσης-Ένωσης με Λίστες Έχουμε δει αποδοτικές δομές εύρεσης-ένωσης που αναπαριστούν τα σύνολα με ένα μόνο πίνακα δέντρο ένωσης-εύρεσης πίνακας Εδώ θα σχεδιάσουμε μια δομή εύρεσης-ένωσης με συνδεδεμένες λίστες η οποία θα μας επιτρέπει επιπλέον να βρίσκουμε γρήγορα όλα τα στοιχεία ενός συνόλου

Δομή Εύρεσης-Ένωσης με Λίστες Κάθε σύνολο μπορεί να αποθηκευτεί σε μια συνδεδεμένη λίστα με τον αντιπρόσωπο του στην κορυφή της λίστας d headS bah Π.χ. για το σύνολο με αντιπρόσωπο Για να έχουμε τη δυνατότητα να βρούμε τον αντιπρόσωπο γρήγορα, προσθέτουμε στη δομή node ένα ακόμα πεδίο rep που είναι δείκτης στον κόμβο-αντιπρόσωπο typedef struct node *link; struct node {Item item; link next; link rep}; headS bdah

Δομή Εύρεσης-Ένωσης με Λίστες Κάθε σύνολο μπορεί να αποθηκευτεί σε μια συνδεδεμένη λίστα με τον αντιπρόσωπο του στην κορυφή της λίστας Τώρα τα ορίσματα που δέχονται και οι τιμές που επιστρέφουν οι λειτουργίες και είναι δείκτες σε κόμβους Η λειτουργία επιστρέφει ένα δείκτη σε νέο κόμβο που αποθηκεύει το στοιχείο Για να έχουμε τη δυνατότητα να βρούμε τον αντιπρόσωπο γρήγορα, προσθέτουμε στη δομή node ένα ακόμα πεδίο rep που είναι δείκτης στον κόμβο-αντιπρόσωπο

Δομή Εύρεσης-Ένωσης με Λίστες Κάθε σύνολο μπορεί να αποθηκευτεί σε μια συνδεδεμένη λίστα με τον αντιπρόσωπο του στην κορυφή της λίστας Για να έχουμε τη δυνατότητα να βρούμε τον αντιπρόσωπο γρήγορα, προσθέτουμε στη δομή node ένα ακόμα πεδίο rep που είναι δείκτης στον κόμβο-αντιπρόσωπο x k Δημιουργεί νέο κόμβο που αποθηκεύει το στοιχείο k και επιστρέφει δείκτη x στον κόμβο link x = malloc(sizeof *x); x->item = k; x->next = NULL; x->rep = x; Χρόνος

Δομή Εύρεσης-Ένωσης με Λίστες Κάθε σύνολο μπορεί να αποθηκευτεί σε μια συνδεδεμένη λίστα με τον αντιπρόσωπο του στην κορυφή της λίστας Για να έχουμε τη δυνατότητα να βρούμε τον αντιπρόσωπο γρήγορα, προσθέτουμε στη δομή node ένα ακόμα πεδίο rep που είναι δείκτης στον κόμβο-αντιπρόσωπο Επιστρέφει το δείκτη x->rep Χρόνος bdah x

Δομή Εύρεσης-Ένωσης με Λίστες Κάθε σύνολο μπορεί να αποθηκευτεί σε μια συνδεδεμένη λίστα με τον αντιπρόσωπο του στην κορυφή της λίστας Για να έχουμε τη δυνατότητα να βρούμε τον αντιπρόσωπο γρήγορα, προσθέτουμε στη δομή node ένα ακόμα πεδίο rep που είναι δείκτης στον κόμβο-αντιπρόσωπο Έστω p=x->rep και q=y->rep. Διατρέχει τη λίστα του q και για κάθε κόμβο v αυτής της λίστας θέτει v->rep = p. Τέλος συνενώνει τις δύο λίστες σε μία λίστα με αρχικό κόμβο το p. Χρόνος όπου ο αριθμός των στοιχείων στo σύνολο που περιέχει το bdac x h y

Δομή Εύρεσης-Ένωσης με Λίστες Κάθε σύνολο μπορεί να αποθηκευτεί σε μια συνδεδεμένη λίστα με τον αντιπρόσωπο του στην κορυφή της λίστας Για να έχουμε τη δυνατότητα να βρούμε τον αντιπρόσωπο γρήγορα, προσθέτουμε στη δομή node ένα ακόμα πεδίο rep που είναι δείκτης στον κόμβο-αντιπρόσωπο Έστω p=x->rep και q=y->rep. Διατρέχει τη λίστα του q και για κάθε κόμβο v αυτής της λίστας θέτει v->rep = p. Τέλος συνενώνει τις δύο λίστες σε μία λίστα με αρχικό κόμβο το p. Χρόνος όπου ο αριθμός των στοιχείων στo σύνολο που περιέχει το bdac p h q

Δομή Εύρεσης-Ένωσης με Λίστες Κάθε σύνολο μπορεί να αποθηκευτεί σε μια συνδεδεμένη λίστα με τον αντιπρόσωπο του στην κορυφή της λίστας Για να έχουμε τη δυνατότητα να βρούμε τον αντιπρόσωπο γρήγορα, προσθέτουμε στη δομή node ένα ακόμα πεδίο rep που είναι δείκτης στον κόμβο-αντιπρόσωπο Έστω p=x->rep και q=y->rep. Διατρέχει τη λίστα του q και για κάθε κόμβο v αυτής της λίστας θέτει v->rep = p. Τέλος συνενώνει τις δύο λίστες σε μία λίστα με αρχικό κόμβο το p. Χρόνος όπου ο αριθμός των στοιχείων στo σύνολο που περιέχει το bdac p h qv

Δομή Εύρεσης-Ένωσης με Λίστες Κάθε σύνολο μπορεί να αποθηκευτεί σε μια συνδεδεμένη λίστα με τον αντιπρόσωπο του στην κορυφή της λίστας Για να έχουμε τη δυνατότητα να βρούμε τον αντιπρόσωπο γρήγορα, προσθέτουμε στη δομή node ένα ακόμα πεδίο rep που είναι δείκτης στον κόμβο-αντιπρόσωπο Έστω p=x->rep και q=y->rep. Διατρέχει τη λίστα του q και για κάθε κόμβο v αυτής της λίστας θέτει v->rep = p. Τέλος συνενώνει τις δύο λίστες σε μία λίστα με αρχικό κόμβο το p. Χρόνος όπου ο αριθμός των στοιχείων στo σύνολο που περιέχει το bdac p h qv

Δομή Εύρεσης-Ένωσης με Λίστες Κάθε σύνολο μπορεί να αποθηκευτεί σε μια συνδεδεμένη λίστα με τον αντιπρόσωπο του στην κορυφή της λίστας Για να έχουμε τη δυνατότητα να βρούμε τον αντιπρόσωπο γρήγορα, προσθέτουμε στη δομή node ένα ακόμα πεδίο rep που είναι δείκτης στον κόμβο-αντιπρόσωπο Έστω p=x->rep και q=y->rep. Διατρέχει τη λίστα του q και για κάθε κόμβο v αυτής της λίστας θέτει v->rep = p. Τέλος συνενώνει τις δύο λίστες σε μία λίστα με αρχικό κόμβο το p. Με λίγη περισσότερη προσπάθεια ο χρόνος της ένωσης γίνεται όπου και ο αριθμός των στοιχείων του συνόλου που περιέχει το και το αντίστοιχα

Δομή Εύρεσης-Ένωσης με Λίστες Με λίγη περισσότερη προσπάθεια ο χρόνος της ένωσης γίνεται όπου και ο αριθμός των στοιχείων του συνόλου που περιέχει το και το αντίστοιχα bdah 4 Τώρα πρέπει να αποθηκεύουμε και τον αριθμό των στοιχείων του κάθε συνόλου, π.χ. σε ξεχωριστό κόμβο-κεφαλή που παίζει το ρόλο του αντιπρόσωπου Άσκηση: Δώστε τις λεπτομέρειες αυτής της δομής, ειδικά το πως υλοποιείται η

Δομή Εύρεσης-Ένωσης με Λίστες Με λίγη περισσότερη προσπάθεια ο χρόνος της ένωσης γίνεται όπου και ο αριθμός των στοιχείων του συνόλου που περιέχει το και το αντίστοιχα Απόδειξη Αν ισχύει ο παραπάνω χρόνος για μια ένωση, τότε ενώσεις γίνονται σε χρόνο όπου ο συνολικός αριθμός των στοιχείων

Δομή Εύρεσης-Ένωσης με Λίστες Με λίγη περισσότερη προσπάθεια ο χρόνος της ένωσης γίνεται όπου και ο αριθμός των στοιχείων του συνόλου που περιέχει το και το αντίστοιχα Απόδειξη Έστω. Τότε η εκτελείται σε χρόνο και το νέο σύνολο που προκύπτει έχει στοιχεία. Το κόστος επιμερίζεται σε κόστος ανά στοιχείο που αλλάζει δείκτη σε αντιπρόσωπο. Επομένως αν το συμμετέχει στο μικρότερο σύνολο σε ενώσεις τότε το νέο σύνολο που περιέχει το θα έχει στοιχεία. Όμως οπότε. Άρα το συνολικό κόστος ανά στοιχείο είναι. Αφού έχουμε στοιχεία το συνολικό κόστος είναι Αν ισχύει ο παραπάνω χρόνος για μια ένωση, τότε ενώσεις γίνονται σε χρόνο όπου ο συνολικός αριθμός των στοιχείων

Δομή Εύρεσης-Ένωσης με Λίστες Με λίγη περισσότερη προσπάθεια ο χρόνος της ένωσης γίνεται όπου και ο αριθμός των στοιχείων του συνόλου που περιέχει το και το αντίστοιχα Αν ισχύει ο παραπάνω χρόνος για μια ένωση, τότε ενώσεις γίνονται σε χρόνο όπου ο συνολικός αριθμός των στοιχείων Ο παράγοντας στο χρόνο αντιστοιχεί στο κόστος εύρεσης των αντιπροσώπων των συνόλων που ενώνονται Παρατήρηση Με βάση τα παραπάνω καταλήγουμε στο συμπέρασμα ότι οποιαδήποτε ακολουθία από λειτουργίες και λειτουργίες και απαιτεί συνολικό χρόνο

Δομή Εύρεσης-Ένωσης με Λίστες bdah4 Ερώτημα : Πως μπορούμε να βρούμε τον κόμβο που περιέχει ένα στοιχείο ; Αν τα στοιχεία είναι μικροί ακέραιοι (π.χ. ) τότε μπορούμε να αποθηκεύσουμε ένα πίνακα δεικτών όπου η θέση δείχνει στον κόμβο που αντιστοιχεί στο στοιχείο Π.χ.

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

Σύνθετες Δομές Δεδομένων Πίνακες (μήτρες) στη γραμμική άλγεβρα Υλοποίηση στη C με στατική κατανομή μνήμης double Α[20][10]; Γενικά για πίνακα με d διαστάσεις double Α[k1][k2]...[kd]; όπου k1,..., kd θετικοί ακέραιοι

Σύνθετες Δομές Δεδομένων Πίνακες (μήτρες) στη γραμμική άλγεβρα double **Α = malloc2d(m,n); double **malloc2d(int r, int c){ int i; double **Α = malloc(r * sizeof(double *)); for (i = 0; i < r; i++) Α[i] = malloc(c * sizeof(double)); return Α; } Υλοποίηση στη C με δυναμική κατανομή μνήμης

Σύνθετες Δομές Δεδομένων Υλοποίηση στη C με δυναμική κατανομή μνήμης double **Α = malloc2d(m,n); double **malloc2d(int r, int c){ int i; double **A = malloc(r * sizeof(double *)); for (i = 0; i < r; i++) A[i] = malloc(c * sizeof(double)); return A; } A A[i] A[i][j] Στη C, ένας d -διάστατος πίνακας ορίζεται ως ένας μονοδιάστατος πίνακας με στοιχεία που είναι (d-1) -διάστατοι πίνακες

Σύνθετες Δομές Δεδομένων Πολλαπλασιασμός πινάκων

Σύνθετες Δομές Δεδομένων Πολλαπλασιασμός πινάκων for (i = 0; i < p; i++) for (j = 0; j < r; j++) { C[i][j]=0; for (k = 0; k < q; k++) { C[i][j] += A[i][k]*B[k][j]; } Εκτελεί πράξεις

Σύνθετες Δομές Δεδομένων Αποθήκευση διδιάστατου πίνακα ως μονοδιάστατου Αποθήκευση κατά γραμμές Το στοιχείο Α[i,j] βρίσκεται στη θέση X + (i*q+j)*L, όπου Χ η θέση του πρώτου στοιχείου Α[0,0] και L το μέγεθος του κάθε στοιχείου

Σύνθετες Δομές Δεδομένων Αποθήκευση διδιάστατου πίνακα ως μονοδιάστατου Αποθήκευση κατά στήλες Το στοιχείο Α[i,j] βρίσκεται στη θέση X + (i+j*p)*L, όπου Χ η θέση του πρώτου στοιχείου Α[0,0] και L το μέγεθος του κάθε στοιχείου

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

Σύνθετες Δομές Δεδομένων Αποθήκευση διδιάστατου πίνακα ως μονοδιάστατου Σε πολλές εφαρμογές προκύπτουν πίνακες με ειδική μορφή. Μπορούμε να αποθηκεύσουμε τα στοιχεία ενός τέτοιοι πίνακα σε ένα μονοδιάστατο πίνακα για εξοικονόμηση χώρου. Συμμετρικοί πίνακες Συμπιεσμένη αποθήκευση κατά γραμμές Αριθμός στοιχείων =

Σύνθετες Δομές Δεδομένων Αποθήκευση διδιάστατου πίνακα ως μονοδιάστατου Σε πολλές εφαρμογές προκύπτουν πίνακες με ειδική μορφή. Μπορούμε να αποθηκεύσουμε τα στοιχεία ενός τέτοιοι πίνακα σε ένα μονοδιάστατο πίνακα για εξοικονόμηση χώρου. Άνω τριγωνικοί πίνακες Συμπιεσμένη αποθήκευση κατά γραμμές Αριθμός στοιχείων = αν

Σύνθετες Δομές Δεδομένων Αποθήκευση διδιάστατου πίνακα ως μονοδιάστατου Σε πολλές εφαρμογές προκύπτουν πίνακες με ειδική μορφή. Μπορούμε να αποθηκεύσουμε τα στοιχεία ενός τέτοιοι πίνακα σε ένα μονοδιάστατο πίνακα για εξοικονόμηση χώρου. Κάτω τριγωνικοί πίνακες Συμπιεσμένη αποθήκευση κατά γραμμές Αριθμός στοιχείων = αν

Σύνθετες Δομές Δεδομένων Αποθηκεύουμε τα μη μηδενικά στοιχεία διαδοχικά ανά γραμμές σε μονοδιάστατο πίνακα V Επιπλέον αποθηκεύουμε τη στήλη και γραμμή που αντιστοιχεί σε κάθε μη μηδενικό στοιχείο σε μονοδιάστατους πίνακες col και row Αραιοί πίνακες με μη μηδενικά στοιχεία

Σύνθετες Δομές Δεδομένων Αραιοί πίνακες Αποθηκεύουμε τα μη μηδενικά στοιχεία διαδοχικά ανά γραμμές σε μονοδιάστατο πίνακα V με μη μηδενικά στοιχεία Επιπλέον αποθηκεύουμε τη στήλη και γραμμή που αντιστοιχεί σε κάθε μη μηδενικό στοιχείο σε μονοδιάστατους πίνακες col και row Χώρος =

Σύνθετες Δομές Δεδομένων Αραιοί πίνακες με μη μηδενικά στοιχεία Χώρος = Αποθηκεύουμε τα μη μηδενικά στοιχεία διαδοχικά ανά γραμμές σε μονοδιάστατο πίνακα V Εναλλακτικά, αντί για τον πίνακα γραμμών row, αποθηκεύουμε έναν άλλο μονοδιάστατο πίνακα rowptr που δίνει τη θέση που ξεκινά στον V η κάθε γραμμή του Α

Γράφημα TexPoint fonts used in EMF. Read the TexPoint manual before you delete this box.: AA A A A Συνδυαστικό αντικείμενο που αποτελείται από 2 σύνολα: Σύνολο κορυφών (vertex set) Σύνολο ακμών (edge set) πλήθος κορυφών πλήθος ακμών

Γράφημα Συνδυαστικό αντικείμενο που αποτελείται από 2 σύνολα: Σύνολο κορυφών (vertex set) Σύνολο ακμών (edge set) TexPoint fonts used in EMF. Read the TexPoint manual before you delete this box.: AA A Μερικά είδη γραφημάτων: Κατεύθυνση ακμών - μη κατευθυνόμενα - κατευθυνόμενα Βάρος ακμών - μη σταθμισμένα - σταθμισμένα

Αναπαράσταση Γραφήματος Μήτρα γειτνίασης (adjacency matrix): TexPoint fonts used in EMF. Read the TexPoint manual before you delete this box.: AA A Χρησιμοποιούμε έναν πίνακα Α, όπου συμμετρικός πίνακας Ελέγχουμε αν σε χρόνο Επεξεργαζόμαστε όλες τις ακμές σε χρόνο Χώρος: bits

Αναπαράσταση Γραφήματος Μήτρα γειτνίασης (adjacency matrix): TexPoint fonts used in EMF. Read the TexPoint manual before you delete this box.: AA A Χρησιμοποιούμε έναν πίνακα Α, όπου Ελέγχουμε αν σε χρόνο Επεξεργαζόμαστε όλες τις ακμές σε χρόνο Χώρος: bits

Αναπαράσταση Γραφήματος Λίστες γειτνίασης (adjacency lists): TexPoint fonts used in EMF. Read the TexPoint manual before you delete this box.: AA A Χρησιμοποιούμε έναν πίνακα Α, όπου είναι δείκτης σε λίστα Χώρος: λέξεις Ελέγχουμε αν σε χρόνο Επεξεργαζόμαστε όλες τις ακμές σε χρόνο των κόμβων που γειτονεύουν με τον κόμβο i Κάθε ακμή εμφανίζεται 2 φορές A

Αναπαράσταση Γραφήματος Λίστες γειτνίασης (adjacency lists): TexPoint fonts used in EMF. Read the TexPoint manual before you delete this box.: AA A Χώρος: λέξεις Ελέγχουμε αν σε χρόνο Επεξεργαζόμαστε όλες τις ακμές σε χρόνο Χρησιμοποιούμε έναν πίνακα Α, όπου είναι δείκτης σε λίστα των κόμβων που γειτονεύουν με τον κόμβο i A

Αναπαράσταση Γραφήματος Λίστες γειτνίασης (adjacency lists): TexPoint fonts used in EMF. Read the TexPoint manual before you delete this box.: AA A #define N 6 typedef struct node *link; struct node { int v; link next; } link NEW(int v, link next) {link x = malloc(sizeof *x); x->v = v; x->next = next; return x;} main() {int i,j; link adj[N]; for (i = 0; i < N; i++) adj[i] = NULL; while (scanf(“%d %d\n”, &i, &j) == 2) { adj[j] = NEW(i, adj[j]); adj[i] = NEW(j, adj[i]); } Διαβάζει μη κατευθυνόμενο γράφημα adj

Τυχαία Γραφήματα TexPoint fonts used in EMF. Read the TexPoint manual before you delete this box.: AA A Επιλέγουμε ακμές τυχαία (από κάποια κατανομή) σε γράφημα με κόμβους

Τυχαία Γραφήματα TexPoint fonts used in EMF. Read the TexPoint manual before you delete this box.: AA A Επιλέγουμε ακμές τυχαία (από κάποια κατανομή) σε γράφημα με κόμβους

Τυχαία Γραφήματα TexPoint fonts used in EMF. Read the TexPoint manual before you delete this box.: AA A Ομοιόμορφα τυχαία επιλογή κόμβων srand(seed); for(i=0; i<m; i++) { j = (rand() % n) + 1; k = (rand() % n) + 1; addEdge(j,k); } Eπιλέγουμε ομοιόμορφα τυχαία τους δύο κόμβους της κάθε ακμής από τους κόμβους του γραφήματος Κατασκευάζει γράφημα με κόμβους και ακμές αλλά μπορεί να περιέχει βρόχους και πολλαπλές (επαναλαμβανόμενες) ακμές βρόχος διπλή ακμή

Τυχαία Γραφήματα TexPoint fonts used in EMF. Read the TexPoint manual before you delete this box.: AA A srand(seed); double p = (double) 2*m/(n*(n-1)); for (k=1; k<=n; k++) for (j=1; j<k; j++) if ( rand() < p*RAND_MAX ) addEdge(j,k); Το παρακάτω πρόγραμμα επιλέγει κάθε μια από τις δυνατές ακμές με πιθανότητα Ομοιόμορφη δειγματοληψία Κατασκευάζει γράφημα με κόμβους και αναμενόμενο αριθμό ακμών