Δομζσ Δεδομζνων Πίνακεσ Διάλεξθ 2
Περιεχόμενα Πίνακεσ: Οριςμοί, Γενικζσ ζννοιεσ Αποκικευςθ πινάκων Ειδικζσ μορφζσ πινάκων Αλγόρικμοι Αναηιτθςθσ Σειριακι Αναηιτθςθ Δυαδικι Αναηιτθςθ
Οριςμοί, Γενικζσ ζννοιεσ Οι πίνακεσ είναι οι πιο απλζσ μορφζσ δομϊν δεδομζνων Υποςτθρίηονται από όλεσ ςχεδόν τισ γλϊςςεσ Αποτελοφνται από ζνα ςφνολο απλϊν ςτοιχείων (ακζραιοι, χαρακτιρεσ κτλ) Το μζγεκοσ ενόσ πίνακα είναι ςτακερό και προκακοριςμζνο Η αναφορά ςε ζνα ςτοιχείο του πίνακα γίνεται με τθ χριςθ ενόσ ονόματοσ για τον πίνακα κακϊσ και με ζνα ςφνολο ςτοιχείων που ονομάηονται δείκτεσ (indexes)
Οριςμοί, Γενικζσ ζννοιεσ Οι αγγλικοί όροι index και pointer μεταφράηονται ςτα ελλθνικά ωσ δείκτθσ, ωςτόςο θ ςθμαςία και θ χριςθ τουσ είναι διαφορετικι Παράδειγμα: το δεφτερο ςτοιχείου του πίνακα Α ςυμβολίηεται με Α*2+ ι Α(5) ι Α 5.
Οριςμοί, Γενικζσ Ζννοιεσ 45 32 1 34 2 5 7 21 Εποπτικι Αναπαράςταςθ Πινάκων ςε 1Δ, 2Δ και 3Δ
Αποκικευςθ Πινάκων Τα ςτοιχεία των πινάκων αποκθκεφονται ςε γειτονικζσ κζςεισ μνιμθσ Ζςτω ότι ζχουμε ζνα διάνυςμα Νx1 ςτοιχείων όπου το κάκε ςτοιχείο καταλαμβάνει c κζςεισ μνιμθσ. Πόςθ μνιμθ καταλαμβάνει όλο το διάνυςμα; Αν K είναι θ διεφκυνςθ του πρϊτου ςτοιχείου τότε θ διεφκυνςθ του i-οςτοφ ςτοιχείου δίνεται από τθν ςυνάρτθςθ: loc(a[i]) = K + c*(i-1)
Αποκικευςθ Πινάκων Ζςτω Α διςδιάςτατοσ πίνακασ ΜxΝ Για τθν εφρεςθ τθσ κζςθσ των ςτοιχείων πρζπει να λθφκεί υπόψιν ο τρόποσ αποκικευςθσ των ςτοιχείων Συνθκιςμζνοι τρόποι: κατά ςτιλεσ, κατά γραμμζσ Πιο ςυνθκιςμζνθ είναι θ αποκικευςθ κατά γραμμζσ Συνάρτθςθ: loc(a[i][j]) = K + c*(j-1)*m + c*(i-1)
Ειδικζσ Μορφζσ Πινάκων Συμμετρικοί πίνακες λζγονται οι διςδιάςτατοι πίνακεσ μεγζκουσ NxN όπου ιςχφει A[i][j]=A[j][i] για κάκε i και j.
Ειδικζσ Μορφζσ Πινάκων Τριγωνικοί πίνακες είναι οι διςδιάςτατοι πίνακεσ όπου ιςχφει Α*i][j] = 0 για i>j (κάτω τριγωνικοί) ι Α*i][j] = 0 για i<j (άνω τριγωνικοί)
Ειδικζσ Μορφζσ Πινάκων Τριδιαγώνιοι πίνακες λζγονται οι διςδιάςτατοι πίνακεσ μεγζκουσ NxN για τουσ οποίουσ τα μόνα μθ μθδενικά ςτοιχεία A[i][j] είναι αυτά για τα οποία ιςχφει i=j, i-j=1 και j-i=1. Δθλαδι μθ μθδενικά είναι τα ςτοιχεία τθσ κυρίασ διαγωνίου και τα γειτονικά τθσ.
Λειτουργίεσ πάνω ςε Πίνακεσ 1. Προςπζλαςθ 2. Ανάκτθςθ 3. Αναηιτθςθ 4. Ειςαγωγι 5. Διαγραφι 6. Τροποποίθςθ 7. Ταξινόμθςθ 8. Συγχϊνευςθ 9. Διαχωριςμόσ 10.Προςάρτθςθ 11.Αντιγραφι
Αναηιτθςθ Προβλιματα αναηιτθςθσ εμφανίηονται παντοφ, από τθν κακθμερινι μασ ηωι μζχρι τισ ποιο εξειδικευμζνεσ εφαρμογζσ. Πχ.: ψάξιμο ςτον τθλεφωνικό κατάλογο, εφρεςθ ενόσ ςτοιχείου του πίνακα ςε ζνα πρόγραμμα λογιςμικοφ Η αναηιτθςθ ενόσ δεδομζνου γίνεται είτε ςτθν κφρια μνιμθ είτε ςτθν βοθκθτικι Η απόδοςθ ενόσ αλγορίκμου επθρρεάηεται από το είδοσ τθσ μνιμθσ που χρθςιμοποιείται. Ωςτόςο, ςτο μάκθμα μασ δε κα μασ αποςχολιςουν προβλιματα αυτοφ του είδουσ.
Σειριακι Αναηιτθςθ Η πιο απλι και άμεςθ μζκοδοσ αναηιτθςθσ Ο αλγόρικμοσ εξετάηει διαδοχικά τα ςτοιχεία του πίνακα μζχρι να βρεί το ηθτοφμενο. Παρακάτω κα περιγραφεί ο αλγόρικμοσ Sequential-Search. Στον αλγόρικμο αυτό τα δεδομζνα είναι: ο πίνακασ Ε, ςτον οποίο αναηθτείται ζνα ςτοιχείο Το μζγεκοσ του πίνακα Ν και K το ςτοιχείο προσ αναηιτθςθ
Σειριακι Αναηιτθςθ Αλγόριθμοσ Sequential-Search Δεδομζνα // Ε[],N,K // i=1, ex=false, index=0 Όςο i N επανάλαβε Αν K == Ε[i] τότε index = i i = N+1 ex = true αλλιώσ i = i+1 Τζλοσ_αν Τζλοσ_επανάληψησ Αποτελζςματα // ex,index// Τζλοσ Sequential - Search
Σειριακι Αναηιτθςθ Απόδοςθ αλγορίκμου; Ο μζςοσ αρικμόσ ςυγκρίςεων με τθ μζκοδο τθσ ςειριακισ αναηιτθςθσ είναι Ν/2 για επιτυχι αναηιτθςθ και Ν για ανεπιτυχι αναηιτθςθ Αν ο πίνακασ είναι ταξινομθμζνοσ ο μζςοσ αρικμόσ ςυγκρίςεων είναι Ν/2, είτε για επιτυχι είτε για ανεπιτυχι αναηιτθςθ
Δυαδικι Αναηιτθςθ Απαιτεί τα ςτοιχεία του πίνακα να είναι ταξινομθμζνα Κάκε ζλεγχοσ ςτον πίνακα ι βρίςκει το ηθτοφμενο ςτοιχείο ι περιορίηει ςτο μιςό το πλικοσ των ςτοιχείων μζςα ςτα οποία βρίςκεται αυτό που ψάχνουμε.
Δυαδικι Αναηιτθςθ Αλγόριθμοσ Binary-Search Δεδομζνα // Ε[],N,K // L=1,U=N,ex=false,index=0 Όςο L U και ex == false επανάλαβε i= (L+U)/2 Αν K = Ε[i] τότε ex = true index = i αλλιώσ_αν K < Ε[i] τότε U = i-1 αλλιώσ L = i+1 Τζλοσ_αν Τζλοσ_επανάληψησ Αποτελζςματα // ex,index// Τζλοσ Binary - Search
Δυαδικι Αναηιτθςθ Απόδοςθ αλγορίκμου: Για ανεπιτυχι αναηιτθςθ : [log N] + 1 Για επιτυχι αναηιτθςθ : *log N]
Παραδείγματα ςε C++ 1. Προςπζλαςθ 2. Ανάκτθςθ 3. Αναηιτθςθ 4. Ειςαγωγι 5. Διαγραφι 6. Τροποποίθςθ 7. Ταξινόμθςθ 8. Συγχϊνευςθ 9. Διαχωριςμόσ 10.Προςάρτθςθ 11.Αντιγραφι