Issuu on Google+

Πρόσθετο Υλικό για μελέτη στο μάθημα ΑΕΠΠ

Περιεχόμενα

1. Βελτιωμένη φυσαλίδα 2. Ταξινόμηση δισδιάστατου πίνακα 3. Αραιός Πίνακας 3.1. Πρόγραμμα σε γλώσσα


Θέμα: βελτιωμένη έκδοση της φυσσαλίδας Στον αλγόριθμο ταξινόμησης με τη μέθοδο της φυσσαλίδας υπάρχει το εξής μειονέκτημα: οι επαναλήψεις συνεχίζονται ακόμη κι αν ο πίνακας έχει ταξινομηθεί από πολύ πιο πριν. Μία βελτιωμένη έκδοση της φυσσαλίδας είναι αυτή που ακολουθεί παρακάτω. Αν ο πίνακας «περαστεί» μία φορά και δεν προκύψει αντιμετάθεση, τότε ο αλγόριθμος τερματίζεται. Αλγόριθμος Φυσσαλίδα_2 Δεδομένα / / Ν, Α / / αντιμετάθεση ← αληθής ! για να περάσει στην πρώτη επανάληψη i←2 Όσο (i < = Ν) και (αντιμετάθεση = αληθής) επανάλαβε αντιμετάθεση ← ψευδής ! στην αρχή κάθε περάσματος ψευδής Για j από Ν μέχρι i με_βήμα –1 Αν Α[j – 1] > A[j] τότε temp ← Α[j – 1] A[j – 1] ← A[j] A[j] ← temp αντιμετάθεση ← αληθής ! μόλις παρατηρηθεί τουλάχιστον μια αντιμετάθεση Τέλος_αν Τέλος_επανάληψης i←i+1 Τέλος_επανάληψης Αποτελέσματα / / Α / / Τέλος Φυσσαλίδα_2 Μία άλλη παραλλαγή της φυσσαλίδας, παρόμοια με την παραπάνω, φαίνεται στη συνέχεια: Αλγόριθμος Φυσσαλίδα_3 Δεδομένα / / Ν, Α / / !Τετράδιο του μαθητή, σελ. 101 Αρχή_επανάληψης flag ← ψευδής Τ←0 Για i από 1 μέχρι Ν–1 Αν Α[i] > A[i + 1] τότε temp ← Α[i] A[i] ← A[i + 1] A[i + 1] ← temp T←i Τέλος_αν Τέλος_επανάληψης Ν←Τ Μέχρις_ότου Τ = 0 Αποτελέσματα / / Α / / Τέλος Φυσσαλίδα_3


ΠΡΟΓΡΑΜΜΑ ταξινόμηση_δισδιάστατου ΜΕΤΑΒΛΗΤΕΣ ΑΚΕΡΑΙΕΣ: i, j, k, a[3, 3], temp ΑΡΧΗ ΓΙΑ i ΑΠΟ 1 ΜΕΧΡΙ 3 ΜΕ_ΒΗΜΑ 1 ΓΙΑ j ΑΠΟ 1 ΜΕΧΡΙ 3 ΜΕ_ΒΗΜΑ 1 ΓΡΑΨΕ "dwse stoixeio: ", i, j ΔΙΑΒΑΣΕ a[i, j] ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ

Διάβασμα δισδιάστατου πίνακα

ΓΙΑ i ΑΠΟ 1 ΜΕΧΡΙ 3 ΜΕ_ΒΗΜΑ 1 ΓΙΑ j ΑΠΟ 2 ΜΕΧΡΙ 3 ΜΕ_ΒΗΜΑ 1 ΓΙΑ k ΑΠΟ 3 ΜΕΧΡΙ j ΜΕ_ΒΗΜΑ – ΑΝ a[i, k - 1] > a[i, k] ΤΟΤΕ temp <- a[i, k - 1] a[i, k - 1] <- a[i, k] a[i, k] <- temp ΤΕΛΟΣ_ΑΝ ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ ΓΙΑ i ΑΠΟ 1 ΜΕΧΡΙ 3 ΜΕ_ΒΗΜΑ ΓΙΑ j ΑΠΟ 1 ΜΕΧΡΙ 3 ΜΕ_ΒΗΜΑ ΓΡΑΨΕ a[i, j], " " ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ ΤΕΛΟΣ_ΠΡΟΓΡΑΜΜΑΤΟΣ

Ταξινόμηση δισδιάστατου πίνακα κατά γραμμές

1 1

Εκτύπωση δισδιάστατου πίνακα


ΠΕΡΙΓΡΑΦΗ ΑΣΚΗΣΗΣ Αραιοί πίνακες ονομάζονται αυτοί που ένα μεγάλο ποσοστό των στοιχείων τους έχουν μηδενική τιμή και βρίσκουν εφαρμογή σε μεγάλα επιστημονικά προβλήματα. Το πρόβλημα είναι ότι δαπανούν μεγάλο χώρο μνήμης για την αποθήκευση μηδενικών. Ένα οικονομικός τρόπος διαχείρισής τους είναι ο εξής :Αντί να αποθηκεύσουμε τον δισδιάστατο πίνακα, δημιουργούμε έναν μονοδιάστατο όπου τοποθετούμε μόνο τα μη μηδενικά στοιχεία καθώς και την αντίστοιχη γραμμή και στήλη όπου βρίσκονται. Έτσι για κάθε μη μηδενικό στοιχείο χρησιμοποιούμε μια τριάδα στοιχείων { γραμμή, στήλη, τιμή }που αποθηκεύεται στο μονοδιάστατο πίνακα. Για παράδειγμα, δίνεται ο παρακάτω δισδιάστατος πίνακας Β 0

7

0

0

0

1

2

0

0

-3

0

0

4

0

0

12

0

0

0

0

Και μετά τη συγκεκριμένη επεξεργασία προκύπτει και αποθηκεύεται ο παρακάτω μονοδιάστατος πίνακας Α 1

2

7

2

1

1

2

2

2

2

5

-3

3

3

4

4

1

12

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


ΛΥΣΗ Αλγόριθμος Αραιός_Πίνακας Κ 0 ΠΛ  0 Για i από 1 μέχρι Ν Για j από 1 μέχρι Μ Αν Π [ i , j ] <>0 τότε Α[3*Κ+1]  i Α[3*Κ+2]  j Α[3*Κ+3]  Π[ i , j ] K  K +1 Αλλιώς ΠΛ  ΠΛ +1 Τέλος_αν Tέλος_επανάληψης Tέλος_επανάληψης Για i από 1 μέχρι 3*K Εμφάνισε Α[i] Tέλος_επανάληψης Τέλος Αραιός_Πίνακας

ή K1 ΠΛ0 Για i απο 1 μεχρι Μ Για j απο 1 μεχρι Ν Αν Α[i, j]<>0 τοτε Β[K] i Β[K+1] j Β[K+2] A[i,j] KK+3 Αλλιώς ΠΛ  ΠΛ +1 Τέλος_αν Τέλος_επανάληψης Τέλος_επανάληψης


ΠΡΟΓΡΑΜΜΑ ARAIOS ΜΕΤΑΒΛΗΤΕΣ ΑΚΕΡΑΙΕΣ: I, J, Κ, INDEX, Α[12], Π[3, 4], DATA, GR, ST ΛΟΓΙΚΕΣ: FLAG ΧΑΡΑΚΤΗΡΕΣ: APAN ΑΡΧΗ ΓΡΑΨΕ ' ΔΙΑΒΑΣΜΑ ΔΙΣΔΙΑΣΤΑΤΟΥ ΑΡΑΙΟΥ ΠΙΝΑΚΑ ' ΓΙΑ I ΑΠΟ 1 ΜΕΧΡΙ 3 ΓΙΑ J ΑΠΟ 1 ΜΕΧΡΙ 4 ΔΙΑΒΑΣΕ Π[I, J] ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ ΓΡΑΨΕ ' ΑΠΟΘΗΚΕΥΣΗ ΜΗ ΜΗΔΕΝΙΚΩΝ ΣΤΟΙΧΕΙΩΝ ΣΕ ΜΟΝΟΔΙΑΣΤΑΤΟ ' Κ <- 1 ΓΙΑ I ΑΠΟ 1 ΜΕΧΡΙ 3 ΓΙΑ J ΑΠΟ 1 ΜΕΧΡΙ 4 ΑΝ Π[ I, J] <> 0 ΤΟΤΕ Α[Κ] <- I Α[Κ + 1] <- J Α[Κ + 2] <- Π[I, J] Κ <- Κ + 3 ΤΕΛΟΣ_ΑΝ ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ ΓΡΑΨΕ ' ΕΚΤΥΠΩΣΗ ΜΟΝΟΔΙΑΣΤΑΤΟΥ ΜΕ ΜΗ ΜΗΔΕΝΙΚΑ ΣΤΟΙΧΕΙΑ ' ΓΙΑ I ΑΠΟ 1 ΜΕΧΡΙ 6 ΓΡΑΨΕ Α[I] ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ ΓΡΑΨΕ 'ΑΝΑΚΤΗΣΗ ΜΗ ΜΗΔΕΝΙΚΩΝ ΣΤΟΙΧΕΙΩΝ ΓΝΩΡΙΖΟΝΤΑΣ ΤΗ ΘΕΣΗ ΤΟΥΣ' FLAG <- ΨΕΥΔΗΣ INDEX <- 1 Κ <- 2 ΔΙΑΒΑΣΕ GR, ST ! δείκτες δισδιάστατου πίνακα ΟΣΟ FLAG = ΨΕΥΔΗΣ ΚΑΙ INDEX <= 3*Κ - 2 ΕΠΑΝΑΛΑΒΕ I <- Α[INDEX] J <- Α[INDEX + 1] ΑΝ GR = I ΚΑΙ ST = J ΤΟΤΕ DATA <- Α[INDEX + 2] FLAG <- ΑΛΗΘΗΣ ΑΛΛΙΩΣ DATA <- 0 INDEX <- INDEX + 3 ΤΕΛΟΣ_ΑΝ ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ ΓΡΑΨΕ DATA ΤΕΛΟΣ_ΠΡΟΓΡΑΜΜΑΤΟΣ


ΑΕΠΠ