Μία Μελέτη Περίπτωσης: Διήθηση

Σχετικά έγγραφα
Γράφημα. Συνδυαστικό αντικείμενο που αποτελείται από 2 σύνολα: Σύνολο κορυφών (vertex set) Σύνολο ακμών (edge set) 4 5 πλήθος κορυφών πλήθος ακμών

Μελέτη Περίπτωσης: Random Surfer

ΠΛΗΡΟΦΟΡΙΚΗ Ι JAVA Τμήμα θεωρίας με Α.Μ. σε 3, 7, 8 & 9 6/12/07

ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ. Στοιχειώδεις Δοµές Δεδοµένων Δοµικά Στοιχεία και Πίνακες Κεφάλαιο 3 (3.1 και 3.2) Ε. Μαρκάκης Επικ. Καθηγητής

I (JAVA) Ονοματεπώνυμο: Α. Μ.: Δώστε τις απαντήσεις σας ΕΔΩ: Απαντήσεις στις σελίδες των ερωτήσεων ΔΕΝ θα ληφθούν υπ όψην.

I (JAVA) Ονοματεπώνυμο: Α. Μ.: Δώστε τις απαντήσεις σας ΕΔΩ: Απαντήσεις στις σελίδες των ερωτήσεων ΔΕΝ θα ληφθούν υπ όψην.

ΕΠΛ 131 Φροντιστήριο 2

Mεταβλητές (variables) και Σταθερές (constants)

Δοκιμή και Αποσφαλμάτωση Testing and Debugging

Συλλογές, Στοίβες και Ουρές

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Κλάσεις και Αντικείμενα Μέθοδοι

Δοµές Δεδοµένων. 3η Διάλεξη Στοιχειώδεις Δοµές Δεδοµένων: Πίνακες. Ε. Μαρκάκης

Διδάσκων: Παναγιώτης Ανδρέου

ΠΛΗΡΟΦΟΡΙΚΗ Ι JAVA Τμήμα θεωρίας με Α.Μ. σε 3, 7, 8 & 9 22/11/07

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Κλάσεις και Αντικείμενα Μέθοδοι

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Δημιουργία Κλάσεων και Αντικειμένων

Κατασκευαστές. Μέθοδοι Κατασκευής (Constructors).

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Κλάσεις και Αντικείμενα

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Αντικείμενα με πίνακες. Constructors. Υλοποίηση Στοίβας

Είσοδος και Έξοδος. (Input and Output) Διαφάνειες από τους Robert Sedgewick και Kevin Wayne. Τι θα δούµε σήµερα

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Κλάσεις και Αντικείμενα Αναφορές

Τύποι Δεδομένων και Απλές Δομές Δεδομένων. Παύλος Εφραιμίδης V1.0 ( )

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Αντικείμενα με πίνακες. Constructors. Υλοποίηση Στοίβας

Δομές ελέγχου ροής προγράμματος

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Δημιουργώντας δικές μας Κλάσεις και Αντικείμενα

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Πίνακες Κλάσεις και Αντικείμενα

Αντικειμενοστραφής Προγραμματισμός I(5 ο εξ) Εργαστήριο #4 ο : Αποσφαλμάτωση (debugging), μετατροπές

Διάλεξη 12: Δέντρα ΙΙ Δυαδικά Δέντρα

Βασικές Έννοιες Δοµών Δεδοµένων

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Κλάσεις και Αντικείμενα Μέθοδοι

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Κλάσεις και Αντικείμενα Μέθοδοι

Διάλεξη 15: Αναδρομή (Recursion) Διδάσκων: Παναγιώτης Ανδρέου

Αντικειμενοστραφής Προγραμματισμός I (5 ο εξ) Εργαστήριο #4 ο : Αποσφαλμάτωση (debugging), μετατροπές

ΕΠΛ Φροντιστήριο 3

Κεφάλαιο 10 Ψηφιακά Λεξικά

Δοµές Δεδοµένων. 2η Διάλεξη Αλγόριθµοι Ένωσης-Εύρεσης (Union-Find) Ε. Μαρκάκης. Βασίζεται στις διαφάνειες των R. Sedgewick K.

Μ.Π.Σ. «ΠΡΟΗΓΜΕΝΕΣ ΜΕΘΟΔΟΙ ΚΑΤΑΣΚΕΥΗΣ ΠΡΟΙΟΝΤΩΝ ΑΠΟ ΞΥΛΟ» Μάθημα: Σχεδίαση και Εφαρμογές Διαδραστικών Συστημάτων. Διδάσκοντας: Α.

ΕΠΛ131 Αρχές Προγραμματισμού

Πίνακες Πολλαπλών Διαστάσεων (Multidimensional arrays)

Μονοδιάστατοι πίνακες Πολυδιάστατοι πίνακες Μέθοδοι Μέθοδοι Recursive Overloading

Διδάσκων: Κωνσταντίνος Κώστα

Διάλεξη 20: Αναδρομή (Recursion) Διδάσκων: Παναγιώτης Ανδρέου

Εισαγωγή στη γλώσσα προγραμματισμού JAVA. Δομές Δεδομένων Διδάσκων: Π.Α. Μήτκας Τομέας Ηλεκτρονικής και Υπολογιστών

ΠΛΗΡΟΦΟΡΙΚΗ Ι JAVA Τμήμα θεωρίας με Α.Μ. σε 3, 7, 8 & 9 29/11/07

Στοιχειώδεις Δομές Δεδομένων

Διδάσκων: Κωνσταντίνος Κώστα Διαφάνειες: Δημήτρης Ζεϊναλιπούρ

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Κλάσεις και Αντικείμενα Constructors, equals, tostring

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Δημιουργώντας δικές μας Κλάσεις και Αντικείμενα

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Αντικείμενα μέσα σε αντικείμενα Αντικείμενα ως επιστρεφόμενες τιμές Αντικείμενα με πίνακες

Αναδρομή (Recursion) Η Δίδυμη Αδελφή της Επανάληψης. Διαφάνειες από τους Robert Sedgewick και Kevin Wayne Ι-1

Εισαγωγή στον Προγραμματισμό

ΕΡΓΑΣΙΑ 4 - Αντικειμενοστραφής Υλοποίηση του Συστήματος Κατανομής Θέσεων σε Προγράμματα Σπουδών

Δοµές Δεδοµένων. 8η Διάλεξη: Ταξινόµηση. Ε. Μαρκάκης

Διάλεξη 06: Συνδεδεμένες Λίστες & Εφαρμογές Στοιβών και Ουρών

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Μαθήματα από τα εργαστήρια

ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ. Αλγόριθµοι Ένωσης-Εύρεσης (Union-Find) Κεφάλαιο 1. Ε. Μαρκάκης Επικ. Καθηγητής

Αντικειμενοστρεφής Προγραμματισμός Διάλεξη 6 : ΠΙΝΑΚΕΣ

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Εισαγωγή στη Java

Δομές Δεδομένων. Δημήτρης Μιχαήλ. Υλοποίηση Δυαδικού Σωρού σε γλώσσα Java. Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο

Δένδρα. Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα:

ΠΛΗΡΟΦΟΡΙΚΗ Ι JAVA Τμήμα θεωρίας με Α.Μ. σε 3, 7, 8 & 9 25/10/07

Αντικειμενοστρεφής Προγραμματισμός Διάλεξη 2 : ΜΕΤΑΒΛΗΤΕΣ ΤΕΛΕΣΤΕΣ & ΕΚΦΡΑΣΕΙΣ ΕΛΕΓΧΟΣ ΡΟΗΣ

ΠΛΗΡΟΦΟΡΙΚΗ ΙΙ (JAVA) 18/3/2008

Αντικειμενοστρεφής Προγραμματισμός Διάλεξη 4 : CLASSES

Διάλεξη 3: Προγραμματισμός σε JAVA I. Διδάσκων: Παναγιώτης Ανδρέου

Αντικείµενα. ηµιουργία και χρησιµοποίηση αντικειµένων. ηµιουργία αντικειµένων

Αλγόριθμοι και Δομές Δεδομένων (IΙ) (γράφοι και δένδρα)

Δομές Δεδομένων & Αλγόριθμοι

ΠΛΗΡΟΦΟΡΙΚΗ ΙΙ (JAVA) 11/3/2008

Απλές Δοµές Δεδοµένων Στην ενότητα αυτή θα γνωρίσουµε ορισµένες απλές Δοµές Δεδοµένων και θα τις χρησιµοποιήσουµε για την αποδοτική επίλυση του προβλή

Διάλεξη 08: Λίστες ΙΙ Κυκλικές Λίστες

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Στατικές μέθοδοι και μεταβλητές Εσωτερικές κλάσεις

Δυαδικά Δένδρα Αναζήτησης, Δένδρα AVL

ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΥΠΡΟΥ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ. ΘΕΩΡΗΤΙΚΗ ΑΣΚΗΣΗ 2 ΛΥΣΕΙΣ Γραμμικές Δομές Δεδομένων, Ταξινόμηση

Αντικειμενοστραφής Προγραμματισμός I (5 ο εξ) Εργαστήριο #2 ο : Ανατομία προγραμμάτων εφαρμογών, η

HY-252 Αντικειμενοστραφής Προγραμματισμός. Χειμερινό Εξάμηνο 2012 Διδάσκων: Χριστοφίδης Βασίλης. Ημερομηνία Παράδοσης: 16/11/2012

Εισαγωγή στον Προγραμματισμό

Κεφάλαιο 1 Εισαγωγή. Περιεχόμενα. 1.1 Αλγόριθμοι και Δομές Δεδομένων

API: Applications Programming Interface

ΠΛΗΡΟΦΟΡΙΚΗ ΙI Ενότητα 3: Έλεγχος ροής προγράμματος

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Αντικείμενα ως ορίσματα

Δομές Δεδομένων. Λουκάς Γεωργιάδης.

1 ΕΙΣΑΓΩΓΗ. Πρωταρχικοί Τύποι

Αντικειμενοστραφής Προγραμματισμός I(5 ο εξ) Εργαστήριο #2 ο : Ανατομία προγραμμάτων εφαρμογών, η

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Υπερφόρτωση Αντικείμενα σαν ορίσματα

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Πίνακες Κλάσεις και Αντικείμενα

Δοµές Δεδοµένων. 6η Διάλεξη Αναδροµικές Εξισώσεις και Αφηρηµένοι Τύποι Δεδοµένων. Ε. Μαρκάκης

ΕΠΛ233 Βασικά στοιχεία προγραµµατισµού στη JAVA

Εισαγωγή στον Προγραμματισμό

Γ7.5 Αλγόριθμοι Αναζήτησης. Γ Λυκείου Κατεύθυνσης

Αναζήτηση στους γράφους. - Αναζήτηση η κατά βάθος Συνεκτικές Συνιστώσες - Αλγόριθμος εύρεσης συνεκτικών συνιστωσών

Δοµές Δεδοµένων. 5η Διάλεξη Λίστες και αρχές ανάλυσης αλγορίθµων. Ε. Μαρκάκης

ΠΑΝΕΠΙΣΤΗΜΙΟ AΙΓΑIΟΥ & ΑΕΙ ΠΕΙΡΑΙΑ Τ.Τ. Τμήματα Ναυτιλίας και Επιχειρηματικών Υπηρεσιών & Μηχ. Αυτοματισμού ΤΕ. Εισαγωγή στη Python

Στοιχεία εξεταζόµενου Αριθµός Απάντησης Βαθµολογία. Σύνολο (Θέµα 4 ο )

Δομές Δεδομένων. Ενότητα 2: Στοίβες Εισαγωγή-Υλοποίηση ΑΤΔ Στοίβα με Πίνακα-Εφαρμογή Στοίβας: Αντίστροφη Πολωνική Γραφή. Καθηγήτρια Μαρία Σατρατζέμη

ΠΛΗΡΟΦΟΡΙΚΗ Ι JAVA Τμήμα θεωρίας με Α.Μ. σε 3, 7, 8 & 9 10/1/08

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Αναφορές Στοίβα και Σωρός Μνήμης Αντικείμενα ως ορίσματα

Δοµές Δεδοµένων. 11η Διάλεξη Ταξινόµηση Quicksort και Ιδιότητες Δέντρων. Ε. Μαρκάκης

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Εισαγωγή στη Java III

Βασικά Στοιχεία της Java

Transcript:

Μία Μελέτη Περίπτωσης: Διήθηση Ι-1

Μία Μελέτη Περίπτωσης: Διήθηση

Μία Μελέτη Περίπτωσης: Διήθηση Διήθηση. Ρίψη υγρού πάνω σε κάποιο πορώδες υλικό Θα φτάσει το υγρό στον πυθμένα; Εφαρμογές. [ χημεία, γεωλογία, ] Χρωματογραφία. Εξάπλωση των πυρκαγιών σε δάση. Φυσικό αέριο μέσω ημι-πορώδη πετρωμάτων. Ροή ηλεκτρισμού μέσω δικτύου αντιστάσεων. Διαπέραση του φυσικού αερίου σε ορυχείο άνθρακα μέσα από μια μάσκα αερίων φίλτρου. 3

Μία Μελέτη Περίπτωσης: Διήθηση Διήθηση. Ρίψη υγρού πάνω σε κάποιο πορώδες υλικό. Θα φτάσει το υγρό στον πυθμένα; Αφαιρετικό Μοντέλο. NxN πλέγμα από χώρους. Κάθε χώρος είναι είτε μπλοκαρισμένος είτε ανοικτός. Μπλοκαρισμένος χώρος Ανοιχτός χώρος 4

Μία Μελέτη Περίπτωσης: Διήθηση Διήθηση. Ρίψη υγρού πάνω σε κάποιο πορώδες υλικό Θα φτάσει το υγρό στον πυθμένα; Αφαιρετικό Μοντέλο. NxN πλέγμα από χώρους. Κάθε χώρος είναι είτε μπλοκαρισμένος είτε ανοικτός. Ένας ανοικτός χώρος είναι πλήρης εάν συνδέεται με την κορυφή μέσω ανοικτών τόπων. Μπλοκαρισμένος τόπος Πλήρες τόπος Ανοικτός τόπος Θα διηθεί Δε θα διηθεί (πλήρης τόπος συνδεδεμένος στην κορυφή) (μη πλήρεις τόποι στην κάτω γραμμή) 5

Ένα επιστημονικό ερώτημα Τυχαία διήθηση. Δοθέντος ενός NxN συστήματος όπου κάθε τόπος είναι κενός με πιθανότητα p, ποια είναι η πιθανότητα ότι το σύστημα θα διηθήσει; p = 0.3 (Δε θα διηθήσει) p = 0.4 (Δε θα διηθήσει) p = 0.5 (Δε θα διηθήσει) p = 0.6 (Θα διηθήσει) p = 0.7 (Θα διηθήσει) Παρατήρηση. Πασίγνωστο ανοικτό ερώτημα στη στατιστική φυσική. Μη γνωστή μαθηματική λύση Πόρος. Πάρτε μία υπολογιστική προσέγγιση: Monte Carlo προσομοίωση. 6

Αναπαράσταση Δεδομένων Αναπαράσταση δεδομένων. Χρησιμοποιήστε ένα NxN μπούλειο πίνακα για να αποθηκεύσετε ποιοι τόποι είναι ανοικτοί. Χρησιμοποιήστε έναν άλλο για να υπολογίσετε ποιοι τόποι είναι πλήρεις. Κανονικής συστοιχίας Ε/E βιβλιοθήκη. Βιβλιοθήκη για να αναγνωρίζει ανάγνωση και εκτύπωση 1- και 2-διαστάσεων συστοιχιών. Μπλοκαρισμένος τόπος Ανοικτός τόπος 8 8 0 0 1 1 1 0 0 0 1 0 0 1 1 1 1 1 1 1 1 0 0 1 1 0 0 0 1 1 0 1 1 1 0 1 1 1 0 1 1 0 0 1 0 0 0 0 1 1 1 0 1 0 1 1 1 1 1 1 1 1 0 1 0 0 στενογραφία: 0 για μπλοκαρισμένα, 1 για ανοικτά open[][] 7

Αναπαράσταση Δεδομένων Αναπαράσταση δεδομένων. Χρησιμοποιήστε ένα NxN μπούλειο πίνακα για να αποθηκεύσετε ποιοι τόποι είναι ανοικτοί. Χρησιμοποιήστε έναν άλλο για να υπολογίσετε ποιοι τόποι είναι πλήρη. Κανονικής συστοιχίας Ε/E βιβλιοθήκη. Βιβλιοθήκη για να αναγνωρίζει ανάγνωσξ και εκτύπωση 1- και 2-διαστάσεων συστοιχιών. 8 8 0 0 1 1 1 0 0 0 0 0 0 1 1 1 1 1 0 0 0 0 0 1 1 0 0 0 0 0 0 1 1 1 0 0 0 0 0 1 1 0 0 0 0 0 0 0 1 1 0 0 0 0 1 1 1 1 0 0 0 0 0 1 0 0 στενογραφία: 0 για μπλοκαρισμένα, 1 για ανοικτά Πλήρες τόπος full[][] 8

Κανονικής Συστοιχίας Ε/E βιβλιοθήκη (Πρόγραμμα 2.2.2) public class StdArrayIO {... // read M-by-N boolean matrix from standard input public static boolean[][] readboolean2d() { int M = StdIn.readInt(); int N = StdIn.readInt(); boolean[][] a = new boolean[m][n]; for (int i = 0; i < M; i++) for (int j = 0; j < N; j++) if (StdIn.readInt()!= 0) a[i][j] = true; return a; // print boolean matrix to standard output public static void print(boolean[][] a) { for (int i = 0; i < a.length; i++) { for (int j = 0; j < a[i].length; j++) { if (a[i][j]) StdOut.print("1 "); else StdOut.print("0 "); StdOut.println(); 9

Σκαλωσιά Προσέγγιση. Γράψτε τον εύκολο κώδικα πρώτα. Συμπληρώστε τις λεπτομέρειες αργότερα. public class Percolation { // return boolean matrix representing full sites public static boolean[][] flow(boolean[][] open) // does the system percolate? public static boolean percolates(boolean[][] open) { int N = open.length; boolean[][] full = flow(open); for (int j = 0; j < N; j++) if (full[n-1][j]) return true; return false; system percolates if any full site in bottom row // test client public static void main(string[] args) { boolean[][] open = StdArrayIO.readBoolean2D(); StdArrayIO.print(flow(open)); StdOut.println(percolates(open)); 10

Κάθετη Διήθηση

Κάθετη Διήθηση Επόμενο Βήμα. Ξεκινά με την επίλυση μίας ευκολότερης έκδοσης του προβλήματος. Κάθετη Διήθηση. Υπάρχει ένα μονοπάτι με ανοικτούς τόπους από την κορυφή προς το κάτω μέρος το οποίο πηγαίνει ευθεία προς τα κάτω; 12

Κάθετη Διήθηση Ερώτηση. Πώς να καθοριστεί εάν ένας τόπος (i, j) είναι πλήρης; Απάντηση. Είναι πλήρης εάν (i, j) είναι ανοικτός και (i-1, j) είναι πλήρης. Αλγόριθμος. Σαρώστε τις γραμμές από την κορυφή προς τα κάτω. γραμμή i-1 γραμμή i 13

Κάθετη Διήθηση Ερώτηση. Πώς να καθοριστεί εάν ένας τόπος (i, j) είναι πλήρης; Απάντηση. Είναι πλήρης εάν (i, j) είναι ανοικτός και (i-1, j) είναι πλήρης. Αλγόριθμος. Σαρώστε τις γραμμές από την κορυφή προς τα κάτω. public static boolean[][] flow(boolean[][] open) { int N = open.length; boolean[][] full = new boolean[n][n]; for (int j = 0; j < N; j++) full[0][j] = open[0][j]; for (int i = 1; i < N; i++) for (int j = 0; j < N; j++) full[i][j] = open[i][j] && full[i-1][j]; αρχικοποιεί Βρίσκει τους πλήρεις τόπους return full; 14

Κάθετη Διήθηση: Έλεγχος Έλεγχος. Χρησιμοποιήστε τη σταθερή είσοδο και έξοδο για να ελέγξετε μικρές εισόδους. % more testt.txt 5 0 1 1 0 1 0 0 1 1 1 1 1 0 1 1 1 0 0 0 1 0 1 1 1 1 % more testf.txt 5 1 0 1 0 0 1 0 1 1 1 1 1 1 0 1 1 0 0 0 1 0 0 0 1 1 % java VerticalPercolation < testt.txt 5 0 1 1 0 1 0 0 1 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 true % java VerticalPercolation < testf.txt 5 1 0 1 0 0 1 0 1 0 0 1 0 1 0 0 1 0 0 0 0 0 0 0 0 0 false 15

Κάθετη Διήθηση: Έλεγχος Έλεγχος. Προσθήκη βοηθητικών μεθόδων για να παραχθούν τυχαίες είσοδοι και να απεικονιστούν χρησιμοποιώντας πρότυπα σχεδίασης. public class Percolation {... // return a random N-by-N matrix; each cell true with prob p public static boolean[][] random(int N, double p) { boolean[][] a = new boolean[n][n]; for (int i = 0; i < N; i++) for (int j = 0; j < N; j++) a[i][j] = StdRandom.bernoulli(p); return a; // plot matrix to standard drawing public static void show(boolean[][] a, boolean foreground) 16

Απεικόνιση δεδομένων Απεικόνιση. Χρήση πρότυπων σχεδίασης για να απεικονιστούν μεγαλύτερες εισόδοι. public class Visualize { public static void main(string[] args) { int N = Integer.parseInt(args[0]); double p = Double.parseDouble(args[1]); boolean[][] open = Percolation.random(N, p); boolean[][] full = Percolation.flow(open); StdDraw.setPenColor(StdDraw.BLACK); Percolation.show(open, false); StdDraw.setPenColor(StdDraw.CYAN); Percolation.show(full, true); 17

Κάθετη Διήθηση: Εκτίμιση πιθανότητας Ανάλυση. Δοθέντος των N και p, τρέξτε την προσομοίωση T φορές και αναφέρατε το μέσο όρο. public class Estimate { public static double eval(int N, double p, int T) { int cnt = 0; for (int t = 0; t < T; t++) { boolean[][] open = Percolation.random(N, p); if (VerticalPercolation.percolates(open)) cnt++; return (double) cnt / M; public static void main(string[] args) { int N = Integer.parseInt(args[0]); double p = Double.parseDouble(args[1]); int T = Integer.parseInt(args[2]); StdOut.println(eval(N, p, T)); test client 18

Κάθετη Διήθηση: Εκτίμιση πιθανότητας Ανάλυση. Δοθέντος των N και p, τρέξτε την προσομοίωση T φορές και αναφέρατε το μέσο όρο. % java Estimate 20.7 100000 0.015768 Συμφωνεί με τη θεωρία p N N % java Estimate 20.8 100000 0.206757 % java Estimate 20.9 100000 0.925191 % java Estimate 40.9 100000 0.448536 παίρνει περίπου 1 λεπτό παίρνει περίπου 4 λεπτά Πολύ υπολογισμό! Χρόνος εκτέλεσης. Ανάλογος του T N 2. Κατανάλωση μνήμης. Ανάλογος του N 2. 19

Γενική Διήθηση

Γενική Διήθηση: Αναδρομική Λύση Διήθηση. Δοθέντος ενός NxN συστήματος, υπάρχει ένα οποιοδήποτε μονοπάτι από ανοικτούς τόπους από την κορυφή στη βάση. Δεν είναι μόνο ευθεία προς τα κάτω Αναζήτηση Πρώτα σε Βάθος (Depth first search). Για να επισκεφθεί όλους τους προσβάσιμους τόπους από i-j: Εάν i-j έχουν ήδη σημειωθεί ως προσβάσιμοι, επιστροφή. Εάν i-j δεν είναι ανοικτοί, επιστροφή. Σημειώνονται οι i-j ως προσβάσιμοι. Επίσκεψη στους 4 γείτονες i-j αναδρομικά. Λύση διήθησης. Τρέξτε το DFS από κάθε τόπο στην πάνω γραμμή. Ελέγξτε εάν ένα τόπος στην κάτω γραμμή είναι επισημασμένος ως προσβάσιμος. 21

Αναζήτηση Πρώτα σε Βάθος : Java Υλοποίηση public static boolean[][] flow(boolean[][] open) { int N = open.length; boolean[][] full = new boolean[n][n]; for (int j = 0; j < N; j++) if (open[0][j]) flow(open, full, 0, j); return full; public static void flow(boolean[][] open, boolean[][] full, int i, int j) { int N = full.length; if (i < 0 i >= N j < 0 j >= N) return; if (!open[i][j]) return; if ( full[i][j]) return; full[i][j] = true; flow(open, full, i+1, j); flow(open, full, i, j+1); flow(open, full, i, j-1); flow(open, full, i-1, j); // mark // down // right // left // up 22

Γενική Διήθηση: Εκτίμηση πιθανότητας Ανάλυση. Δοθέντος των N και p, τρέξτε την προσομοίωση T φορές και αναφέρατε το μέσο όρο. % java Estimate 20.5 100000 0.050953 % java Estimate 20.6 100000 0.568869 % java Estimate 20.7 100000 0.980804 % java Estimate 40.6 100000 0.595995 Χρόνος εκτέλεσης. Ακόμα ανάλογος του T N 2. Κατανάλωση μνήμης. Ακόμα ανάλογος του N 2. 23

Διδάγματα Να αναμένετε σφάλματα. Εκτέλεση κώδικα σε μικρές περιπτώσεις ελέγχου. Να κρατάτε τις ενότητες μικρές. Δίνει τη δυνατότητα για έλεγχο και απασφαλμάτωση. Στοιχειώδης ανάπτυξη. Εκτέλεση και έλεγχος της εκτέλεσης του προγράμματος σε κάθε ενότητα όπως γράφεται. Να επιλύετε ένα ευκολότερο πρόβλημα. Παρέχει ένα πρώτο βήμα. Να εξετάζετε μία αναδρομική λύση. Απαραίτητο εργαλείο. Να δημιουργείτε επαναχρησιμοποιήσιμες βιβλιοθήκες. StdArrayIO, StdRandom, StdIn, StdDraw 24