1
Κλάδος ΠΕ86 Πληροφορικής / Απ: ΠΕ19-ΠΕ20 - ασεπ 2009-γνωστικο
« στις: Φεβρουαρίου 18, 2009, 03:09:47 pm »
Αυτό που λες για το k δεν ισχύει. Τουλάχιστον η ανάλυση του Hashing (με αλυσίδες) είναι ανεξάρτητη του k και να στο εξηγήσω. Αν υποθέσουμε ότι καθένα από τα n στοιχεία έχει την ίδια πιθανότητα να καταλήξει σε μια θέση του πίνακα, αυτή η πιθανότητα είναι 1/k. Άρα μετά από n προσθήκες (insert) στοιχείων στον πίνακα, το μέσο μήκος της αλυσίδας είναι O(n/k). Άρα το μέσο κόστος αναζήτησης είναι O(n/k). Αν k = O(1) τότε αυτό το κόστος είναι O(n). Λογικό... Όταν όμως k = n/2 τότε το μέσο κόστος αναζήτησης είναι O(1). Γιατί σε προβληματίζει αυτό; Δηλαδή αν έχεις 1δις μπάλλες και 500 εκατ. κουτιά δεν περιμένεις με ισοπίθανη ρίψη σε κάθε κουτί να υπάρχει μικρός αριθμός από μπάλλες; Δεν σου εγγυάται όμως και κανένας ότι δεν μπορεί κάποιο κουτί να έχει 10 εκατ. μπάλλες!!! Άρα στη χειρότερη περίπτωση μπορεί ο χρόνος αναζήτησης να είναι O(n). Αν δεν πείθεσαι δες την ανάλυση του Leiserson στο MIT
http://ocw.mit.edu/NR/rdonlyres/Electrical-Engineering-and-Computer-Science/6-046JFall-2005/LectureNotes/lec7.pdf
Άμα ξέρεις ότι έχεις στοιχεία ισοπίθανα δέσμευσε εξαρχής χώρο! Και πάλι hashing έχεις (π.χ associative array) αλλά στατικό. Δεν μου έρχεται ένα καλό πρακτικό παράδειγμα που μπορεί να είναι σχεδόν ισοπίθανα τα στοιχεία στην είσοδο. Δυναμικο σύνολο εισόδου όμως, δηλαδή μεταβαλλόμενο n, μπορείς να έχεις όμως σε πολλές περιπτώσεις, και στις
http://ocw.mit.edu/NR/rdonlyres/Electrical-Engineering-and-Computer-Science/6-046JFall-2005/LectureNotes/lec7.pdf
Καλημέρα! Να ρωτήσω..με βάση την άποψη ότι το O(n/k) είναι απλοϊκή απάντηση, τότε αυτό δεν περιλαμβάνει και το εξής΄ ναι μεν για k=1, το n/k=n αλλά αυτό θυμίζει τις πιθανότητες Λυκείου: Δηλαδή αν ρίξουμε ένα ζάρι πάρα πολλές φορές (n) τότε "ξέρουμε"-αναμένουμε να έρθουν τις ίδιες φορές τα k αποτελέσματα(n/k). Προσωπικά όμως το πρώτο που απέκλησα ήταν το n/k, γιατί για μεγάλο n αν θεωρήσουμε ότι "στο ζάρι" μας προστείθενται παραπάνω πλευρές(μεγαλύτερο k) για τις ίδιες n ρίψεις και το k πλησιάζει το n τότε παύει να ισχύει το πιθανοτικά ισοδύναμο μεταξύ των αποτελεσμάτων των ρίψεων, αφού είναι σαν να ρίχνουμε ένα κοινό ζάρι π.χ. 8 φορές και αναμένουμε να φέρουμε σίγουρα τα 1,2,3,4,5,6 (ή αλλιώς ρίχνω 100 φορές ζάρι με πλευρές 1-40 και τα 1-40 θα έρθουν σίγουρα από 2 φορές) Δηλαδή, για να ισχύει το n/k πρέπει πιθανοτικά να ισχύει ότι το n πάρα πολύ μεγάλο και το k πάρα πολύ μικρό,πάντα με τη λογική ότι τα n στοιχεία έχουν την ίδια πιθανότητα εισόδου.
Παράθεση
Ωστόσο, αν είχαν την ίδια πιθανότητα εισόδου τότε ποιός ο λόγος να χρησιμοποιήσουμε hashing και δεν δεσμεύουμε εξαρχής n/k χώρο για κάθε ομάδα στοιχείων με το χαρακτηριστικό k; Eπίσης είναι αυτό δυνατό να συμβεί σε προβλήματα πρακτικά-υπολογιστικά-καθημερινά;
Άμα ξέρεις ότι έχεις στοιχεία ισοπίθανα δέσμευσε εξαρχής χώρο! Και πάλι hashing έχεις (π.χ associative array) αλλά στατικό. Δεν μου έρχεται ένα καλό πρακτικό παράδειγμα που μπορεί να είναι σχεδόν ισοπίθανα τα στοιχεία στην είσοδο. Δυναμικο σύνολο εισόδου όμως, δηλαδή μεταβαλλόμενο n, μπορείς να έχεις όμως σε πολλές περιπτώσεις, και στις