Ο αλγόριθμος Binary Search είναι ένας δημοφιλής, αποτελεσματικός και γρήγορος αλγόριθμος αναζήτησης.
Ο αλγόριθμος είναι σχετικά απλός αλλά προαπαιτεί ο πίνακας στον οποίον εφαρμόζεται να είναι ταξινομημένος.
Εφόσον έχουμε δώσει το στοιχείο που ψάχνουμε ξεκινάει ο αλγόριθμος :
1. Επιλέγουμε το μεσαίο στοιχείο του πίνακα και ελέγχουμε αν είναι το στοιχείο που ψάχνουμε.
2.1. Αν είναι το στοιχείο που ψάχνουμε η αναζήτηση τελειώνει.
2.2 Αν το στοιχείο που ψάχνουμε είναι μικρότερο από το μεσαίο στοιχείο του πίνακα τότε επαναπροσδιορίζουμε τον πίνακα ώστε η επόμενη αναζήτηση να γίνει στο μισό του πίνακα με τις μικρότερες τιμές.
2.3 Το αντίστοιχο γίνεται και αν το στοιχείο που ψάχνουμε είναι μεγαλύτερο από το μεσαίο στοιχείο του πίνακα.
3. Επαναλαμβάνουμε την ίδια διαδικασία ξεκινώντας από το βήμα 1. Μετά από λίγες μόνο επαναλήψεις και εφόσον το στοιχείο υπάρχει στο πίνακα, θα βρεθεί.
Θα υλοποιήσουμε ένα παράδειγμα με ένα πίνακα ακεραίων 1024 θέσεων.
Για να γίνει αυτό χρειάζονται μερικές βοηθητικές μεταβλητές :
Saturday, September 18, 2010
Αλγόριθμοι - Binary Search
Friday, September 17, 2010
Προβολή/απόκρυψη στοιχείων βάσει γράμματος με τη Javascript
Επειδή ο τίτλος δεν βοηθάει και ιδιαίτερα, τι εννοώ:
Πολλές φορές όταν είστε σε κάποιο site με lyrics ας πούμε, θα έχετε προσέξει ότι υπάρχει μια γραμμή για να διαλέξεις καλλιτέχνη αλφαβητικά.
Σε πολλά έχει γίνει με Ajax πλέον όλο αυτό, οπότε κάνοντας κλικ φορτώνει εκείνη την ώρα τη λίστα με τους καλλιτέχνες που ξεκινάνε με αυτό το γράμμα χωρίς να χρειαστεί να κάνει reload όλη η σελίδα.
To είδα λοιπόν, μου άρεσε, το χρησιμοποίησα σε ένα project και εδώ είναι ένα παράδειγμα για το πώς να το χρησιμοποιήσετε κι εσείς.
Κάπου εδώ να επισημάνω ότι όπως και με το live search, έτσι κι εδώ, πρώτα φορτώνω όλα τα στοιχεία που με ενδιαφέρουν και μετά κάνω την όποια επιλογή. ΔΕΝ γίνεται χρήση Ajax.
Sunday, September 12, 2010
Αυτόματη (και μη) εναλλαγή εικόνων με τη JavaScript
Εκεί που καθόμασταν και μιλούσαμε, πρότεινε ένας φίλος μου να κάνω ένα script-άκι για εναλλαγές εικόνων γιατί ήθελε να το χρησιμοποιήσει.
Μιας που έχουμε εξεταστική, δεν είχα τι να κάνω, οπότε είπα "wtf, ας το κάνω...", άνοιξα μια μπύρα (beer programming ντε! ) και ξεκίνησα....
Πώς λειτουργεί το όλο πράμα:
Έχουμε ένα img και 3 κουμπιά: previous, auto, next.
Tuesday, September 7, 2010
Java Common Mistakes - == String Comparison
Ένα από τα κλασσικά λάθη των αρχάριων στη Java.
Η σύγκριση Strings με τον τελεστή ==.
Τα Java Strings είναι αντικείμενα της κλάσης java.lang.String. Ο τελεστής == όταν χρησιμοποιείται σε αντικείμενα δε κάνει τίποτα παραπάνω από το να ελέγχει εαν τα δύο αντικείμενα "δείχνουνε" στην ουσία στην ίδια θέση μνήμης.
Οπότε με αυτό το τρόπο δεν συγκρίνουμε τα περιεχόμενα των δύο Strings, άρα παίρνουμε πιθανώς και λάθος αποτελέσματα.
Η σύγκριση Strings με τον τελεστή ==.
Τα Java Strings είναι αντικείμενα της κλάσης java.lang.String. Ο τελεστής == όταν χρησιμοποιείται σε αντικείμενα δε κάνει τίποτα παραπάνω από το να ελέγχει εαν τα δύο αντικείμενα "δείχνουνε" στην ουσία στην ίδια θέση μνήμης.
Οπότε με αυτό το τρόπο δεν συγκρίνουμε τα περιεχόμενα των δύο Strings, άρα παίρνουμε πιθανώς και λάθος αποτελέσματα.
Wednesday, September 1, 2010
Breadcrumbs με την PHP
Τι είναι τα breadcrumbs;
Κλασσικά, ακολουθεί η γενική ιδέα, και μετά μια συνάρτηση που την υλοποιεί.
Στην προκειμένη περίπτωση, η συνάρτηση μπορεί να γραφτεί και (αρκετά) καλύτερα, αλλά έτσι είναι αρκετά αναλυτικά και κατανοητά.
Anyways, η βασική ιδέα έχει ως εξής:
Παίρνουμε το id της κατηγορίας που είμαστε
Βάσει αυτού, πηγαίνουμε προς τα πίσω στην parent category και την κρατάμε και αυτή.
Το παραπάνω το κάνουμε μέχρι να φτάσουμε σε root category.
Μετά απλώς τα εμφανίζουμε με αντίστροφη σειρά τα αποτελέσματα.
Ιδού και η συνάρτηση:
Well, είναι τα... "ψίχουλα" που δείχνουν πιο "μονοπάτι" από κατηγορίες και υποκατηγορίες ακολούθησες για να βρεθείς εκεί που βρέθηκες μέσα σε ένα site.
Μιας λοιπόν που στο προηγούμενο post ασχολήθηκα με τις κατηγορίες και τις υποκατηγορίες είπα να το συνεχίσω και να ασχοληθώ και με αυτό που το αναρωτιόμουν περισσότερο καιρό απ' ό,τι αυτό με τις υποκατηγορίες.
Κλασσικά, ακολουθεί η γενική ιδέα, και μετά μια συνάρτηση που την υλοποιεί.
Στην προκειμένη περίπτωση, η συνάρτηση μπορεί να γραφτεί και (αρκετά) καλύτερα, αλλά έτσι είναι αρκετά αναλυτικά και κατανοητά.
Anyways, η βασική ιδέα έχει ως εξής:
Παίρνουμε το id της κατηγορίας που είμαστε
Βάσει αυτού, πηγαίνουμε προς τα πίσω στην parent category και την κρατάμε και αυτή.
Το παραπάνω το κάνουμε μέχρι να φτάσουμε σε root category.
Μετά απλώς τα εμφανίζουμε με αντίστροφη σειρά τα αποτελέσματα.
Ιδού και η συνάρτηση:
Monday, August 30, 2010
Ιεραρχική προβολή κατηγοριών με την PHP
Σίγουρα έχετε προσέξει στα διάφορα eshops ή σε διάφορα fora που έχουν τις κατηγορίες και μέσα σε αυτές κι άλλες κατηγορίες κ.ο.κ.. και εμφανίζονται όλα με κάποια ιεραρχία, οι υποκατηγορίες λίγο πιο μέσα από τις... "γονικές" κατηγορίες κλπ.
Καιρό λοιπόν αναρωτιόμουν πώς γίνεται αυτό με το να εμφανίζονται πιο μέσα οι υποκατηγορίες, αλλά πάντα βαριόμουν να το ψάξω.
Οπότε μιας που πλησιάζει η εξεταστική σκέφτηκα "να η ευκαιρία":
Καιρό λοιπόν αναρωτιόμουν πώς γίνεται αυτό με το να εμφανίζονται πιο μέσα οι υποκατηγορίες, αλλά πάντα βαριόμουν να το ψάξω.
Οπότε μιας που πλησιάζει η εξεταστική σκέφτηκα "να η ευκαιρία":
Sunday, August 22, 2010
PHP 100: Σχεδόν εισαγωγή
Ο καιρός που οι σελίδες ήταν ένα συνονθύλευμα από αρχεία HTML, έχει περάσει ανεπιστρεπτί.
Σε αυτό οφείλεται η τεράστια διείσδυση του Internet στις ζωές μας η οποία οφείλεται στις τεράστιες ευκολίες που μας έχει προσφέρει, όπως π.χ. e-shops
Φανταστείτε να γραφόταν ένα e-shop ή ένας οποιοσδήποτε κατάλογος χρησιμοποιώντας σκέτη HTML.
Αρχικά θα ήθελε για κάθε νέο προϊόν να δημιουργείς ένα (τουλάχιστον) νέο αρχείο. Όταν σκοπεύεις να έχεις 2-3 τέτοια είναι καλά, δεν υπάρχει καν λόγος να μπλέξεις με PHP και βάσεις δεδομένων κλπ.
Όταν όμως σκοπεύεις να έχεις 2-3 χιλιάδες τέτοια προϊόντα, και να προσθέτεις, ανανεώνεις, διαγράφεις καθημερινά, αντιλαμβάνεται κανείς ότι κάτι τέτοιο ξεπερνάει τα όρια του κουραστικού, και αγγίζει τα όρια του μαζοχισμού και της ηλιθιότητας.
Subscribe to:
Posts (Atom)