Αν μπορεί να μου δώσει κάποιος μια λύση με επεξηγήσεις για το παράδειγμα που αναφέρεται στη σελίδα 56. Δομή Δεδομένων: "Χρησιμοποιείται και πάλι η ακολουθία.........πουαρχίζει από το γράμμα αυτό.
Αυτό που εννοεί είναι το εξής:
Έχεις την πρώτη ακολουθία (όνομα, τηλέφωνο) ταξινομημένη με βάση το όνομα. Σε κάθε καταχώρηση δίνεται ένας αύξων αριθμός.
Για παράδειγμα:
Παράθεση
1.(Αβερης,2101234567)
2.(Αμβροσιος,2111234567)
... όλα τα ονόματα από Α...
2020.(Βαβακος,2111234567)
... όλα τα ονόματα από Β...
3543.(Γαβαλας,21....)
...
112312. (Παπαδόπουλος,21..)
...
Αν θες το τηλέφωνο, κάποιου του οποίου το όνομα αρχίζει από Π για παράδειγμα, πρέπει να ελέγξεις ένα ένα τα χιλιάδες ονόματα μέχρι το Π, κάτι που είναι χρονοβόρο. Για να κερδίσεις χρόνο φτιάχνεις μια δεύτερη ακολουθία που περιέχει κάθε γράμμα (Α,Β,Γ,Δ...) και τον αριθμό του πρώτου ονόματος που ξεκινάει από το γράμμα αυτό. Δηλαδή στο παραπάνω παράδειγμα:
Παράθεση
(Α,1)
(Β,2020)
(Γ,3543)
(Π,112312)
Οπότε όταν θες ένα τηλέφωνο για ένα όνομα που ξεκινάει από Π για παράδειγμα, σαρώνεις την δεύτερη ακολουθία. Βρίσκεις την θέση του πρώτου Π (στο παράδειγμα 112312) και σαρώνεις την πρώτη ακολουθία με τα ονόματα και τα τηλέφωνα από εκεί και κάτω. Με αυτόν κάνεις πολύ λιγότερες σαρώσεις στην πρώτη ακολουθία η οποία έχει μεγάλο μέγεθος.
Σαν τα απλά μπλοκάκια που είναι τηλεφωνικοί κατάλογοι και δεξιά έχουν τα γράμματα για να μπορείς να επιλέγεις κατευθείαν το γράμμα που βρίσκεται το επίθετο που ψάχνεις
Ευρετήρια
Μήπως μπορεί κάποιος να μου αναφέρει και καποιο τμημα αλγορίθμου για αυτό που ζητάς γιατί και παλι δεν μπορώ να το βγάλω!
Δες εδώ
http://users.sch.gr/gnikola/test_pin8.doc
Παράθεση από: vkol32 στις 10 Απρ 2010, 10:01:12 ΜΜ
Μήπως μπορεί κάποιος να μου αναφέρει και καποιο τμημα αλγορίθμου για αυτό που ζητάς γιατί και παλι δεν μπορώ να το βγάλω!
Βασικά δεν μπορείς να το κάνεις 100% όπως το λέει το βιβλίο γιατί δεν υπάρχει κάποιος τρόπος να αναπαρασταθούν τα ζευγαράκια (Οi, Τi). Αναγκαστικά λοιπόν θα πας σε παράλληλους πίνακες.
Για να φτιάξεις το ευρετήριο, αν υποθέσουμε λοιπόν ότι τα ονόματα των συνδρομητών είναι σε έναν πίνακα ΟΝΟΜΑΤΑ και τηλέφωνα σε έναν παράλληλο πίνακα ΤΗΛΕΦΩΝΑ αρχικά πρέπει να τους ταξινομήσεις. Στην συνέχεια ας υποθέσουμε ότι τα γράμματα βρίσκονται σε έναν πίνακα 24 θέσεων ΓΡΑΜΜΑΤΑ και θες να φτιάξεις το ευρετήριο σε έναν πίνακα ΘΕΣΕΙΣ. Κάνεις κάτι τέτοιο:
ΑΛΓΟΡΙΘΜΟΣ ΕΥΡΕΤΗΡΙΟ
ΔΕΔΟΜΕΝΑ //ΟΝΟΜΑΤΑ,ΤΗΛΕΦΩΝΑ,ΓΡΑΜΜΑΤΑ//
ΘΕΣΕΙΣ[1]← 1
Θ← 2
ΓΡ← 2
ΟΝ← 1
ΟΣΟ Θ<=24 ΕΠΑΝΑΛΑΒΕ
ΟΣΟ ΟΝΟΜΑΤΑ[ΟΝ]>=ΓΡΑΜΜΑΤΑ[ΓΡ-1] ΚΑΙ ΟΝΟΜΑΤΑ[ΟΝ]<ΓΡΑΜΜΑΤΑ[ΓΡ] ΕΠΑΝΑΛΑΒΕ
ΟΝ← ΟΝ+1
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
ΘΕΣΕΙΣ[Θ]← ΟΝ
Θ← Θ+1
ΓΡ← ΓΡ+1
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
ΑΠΟΤΕΛΕΣΜΑΤΑ //ΘΕΣΕΙΣ//
ΤΕΛΟΣ ΕΥΡΕΤΗΡΙΟ
Για την αναζήτηση την βασική ιδέα την βλέπεις στον αλγόριθμο που σου υπέδειξε ο Γιώργος νωρίτερα.
eyxaristw poly