Θέλω βοήθεια για παράδειγμα του σχολικού βιβλίου....SOS!!!!!!!!!!!!

Ξεκίνησε από vkol32, 10 Απρ 2010, 01:47:56 ΠΜ

« προηγούμενο - επόμενο »

vkol32

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


pgrontas

Αυτό που εννοεί είναι το εξής:
Έχεις την πρώτη ακολουθία (όνομα, τηλέφωνο) ταξινομημένη με βάση το όνομα. Σε κάθε καταχώρηση δίνεται ένας αύξων αριθμός.
Για παράδειγμα:
Παράθεση
1.(Αβερης,2101234567)
2.(Αμβροσιος,2111234567)
... όλα τα ονόματα από Α...
2020.(Βαβακος,2111234567)
... όλα τα ονόματα από Β...
3543.(Γαβαλας,21....)
...
112312. (Παπαδόπουλος,21..)
...
Αν θες το τηλέφωνο, κάποιου του οποίου το όνομα αρχίζει από Π για παράδειγμα, πρέπει να ελέγξεις ένα ένα τα χιλιάδες ονόματα μέχρι το Π, κάτι που είναι χρονοβόρο. Για να κερδίσεις χρόνο φτιάχνεις μια δεύτερη ακολουθία που περιέχει κάθε γράμμα (Α,Β,Γ,Δ...) και τον αριθμό του πρώτου ονόματος που ξεκινάει από το γράμμα αυτό. Δηλαδή στο παραπάνω παράδειγμα:
Παράθεση
(Α,1)
(Β,2020)
(Γ,3543)
(Π,112312)
Οπότε όταν θες ένα τηλέφωνο για ένα όνομα που ξεκινάει από Π για παράδειγμα, σαρώνεις την δεύτερη ακολουθία. Βρίσκεις την θέση του πρώτου Π (στο παράδειγμα 112312) και σαρώνεις την πρώτη ακολουθία με τα ονόματα και τα τηλέφωνα από εκεί και κάτω. Με αυτόν κάνεις πολύ λιγότερες σαρώσεις στην πρώτη ακολουθία η οποία έχει μεγάλο μέγεθος.
Programs must be written for people to read, and only incidentally for machines to execute - Harold Abelson

petrosp13

Σαν τα απλά μπλοκάκια που είναι τηλεφωνικοί κατάλογοι και δεξιά έχουν τα γράμματα για να μπορείς να επιλέγεις κατευθείαν το γράμμα που βρίσκεται το επίθετο που ψάχνεις
Ευρετήρια
Παπαδόπουλος Πέτρος
Καθηγητής Πληροφορικής

vkol32

Μήπως μπορεί κάποιος να μου αναφέρει και καποιο τμημα  αλγορίθμου για αυτό που ζητάς γιατί και παλι δεν μπορώ να το βγάλω!

Laertis

Νικολακάκης Γιώργος
Μηχανικός Η/Υ Συστημάτων
Καθηγητής Πληροφορικής
http://users.sch.gr/gnikola

pgrontas

Παράθεση από: vkol32 στις 10 Απρ 2010, 10:01:12 ΜΜ
Μήπως μπορεί κάποιος να μου αναφέρει και καποιο τμημα  αλγορίθμου για αυτό που ζητάς γιατί και παλι δεν μπορώ να το βγάλω!
Βασικά δεν μπορείς να το κάνεις 100% όπως το λέει το βιβλίο γιατί δεν υπάρχει κάποιος τρόπος να αναπαρασταθούν τα ζευγαράκια (Οi, Τi). Αναγκαστικά λοιπόν θα πας σε παράλληλους πίνακες.
Για να φτιάξεις το ευρετήριο, αν υποθέσουμε λοιπόν ότι τα ονόματα των συνδρομητών είναι σε έναν πίνακα ΟΝΟΜΑΤΑ και τηλέφωνα σε έναν παράλληλο πίνακα ΤΗΛΕΦΩΝΑ αρχικά πρέπει να τους ταξινομήσεις. Στην συνέχεια ας υποθέσουμε ότι τα γράμματα βρίσκονται σε έναν πίνακα 24 θέσεων ΓΡΑΜΜΑΤΑ και θες να φτιάξεις το ευρετήριο σε έναν πίνακα ΘΕΣΕΙΣ. Κάνεις κάτι τέτοιο:
ΑΛΓΟΡΙΘΜΟΣ ΕΥΡΕΤΗΡΙΟ
ΔΕΔΟΜΕΝΑ //ΟΝΟΜΑΤΑ,ΤΗΛΕΦΩΝΑ,ΓΡΑΜΜΑΤΑ//
ΘΕΣΕΙΣ[1]← 1
Θ← 2
ΓΡ← 2
ΟΝ← 1 
ΟΣΟ Θ<=24 ΕΠΑΝΑΛΑΒΕ
	ΟΣΟ ΟΝΟΜΑΤΑ[ΟΝ]>=ΓΡΑΜΜΑΤΑ[ΓΡ-1] ΚΑΙ ΟΝΟΜΑΤΑ[ΟΝ]<ΓΡΑΜΜΑΤΑ[ΓΡ] ΕΠΑΝΑΛΑΒΕ
		ΟΝ← ΟΝ+1
	ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ	
	ΘΕΣΕΙΣ[Θ]← ΟΝ		
	Θ← Θ+1
	ΓΡ← ΓΡ+1	
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
ΑΠΟΤΕΛΕΣΜΑΤΑ //ΘΕΣΕΙΣ//
ΤΕΛΟΣ ΕΥΡΕΤΗΡΙΟ

Για την αναζήτηση την βασική ιδέα την βλέπεις στον αλγόριθμο που σου υπέδειξε ο Γιώργος νωρίτερα.
Programs must be written for people to read, and only incidentally for machines to execute - Harold Abelson