Binary Search, δυαδική αναζήτηση


Ο ταχύτερος αλγόριθμος αναζήτησης σε πίνακα είναι της δυαδικής αναζήτησης, εδώ τον έχω "διατυπωμένο" σε μη δομημένη Basic των 8Bit υπολογιστών. Θα πρέπει βέβαια ο πίνακας να είναι ταξινομημένος.

Ξεκινά συγκρίνοντας το κλειδί (key) με την τιμή του στοιχείου που βρίσκεται στο μέσο του πίνακα. Αν είναι ίσα, τότε ο αλγόριθμος τερματίζει επιστρέφοντας τη θέση αυτή. 
Αν το κλειδί είναι μεγαλύτερο, τότε μειώνει το εύρος στο δεξί-μισό τμήμα του προηγούμενου τμήματος που εξέταζε και επαναλαμβάνει το πρώτο βήμα όχι για όλο το πίνακα, αλλά μόνο για το τμήμα του πίνακα που επέλεξε. 
Αν το κλειδί είναι μικρότερο, τότε μειώνει το εύρος στο αριστερό-μισό τμήμα του προηγούμενου τμήματος που εξέταζε και επαναλαμβάνει το πρώτο βήμα όχι για όλο το πίνακα, αλλά μόνο για το τμήμα του πίνακα που επέλεξε.
Μετά από έναν πεπερασμένο αριθμό βημάτων, ο αλγόριθμος είτε θα βρει τη ζητούμενη θέση, είτε θα μειώσει το εύρος της αναζήτησης στο μηδέν, που σημαίνει ότι το κλειδί δεν βρέθηκε στο πίνακα.

100 LET found=0: LET first=1: LET last=length(A)
110 LET mid = INT ((last + first)/2)
120 IF A[mid] = key THEN LET found=1
130 IF A[mid] < key THEN LET last=mid-1
140 IF A[mid] > key THEN LET first=mid+1
150 IF found=0 AND first<=last THEN GOTO 110

Οπου Α τ' όνομα του πίνακα που θέλουμε να εκτελέσουμε  την αναζήτηση, key η μεταβλητή που περιέχει το ζητούμενο και length(A) το μέγεθος του πίνακα Α. 

Αν μετά την εκτέλεση των παραπάνω εντολών η μεταβλητή found έχει την τιμή 1, τότε το περιεχόμενο της μεταβλητής key έχει βρεθεί στη θέση mid, αλλιώς θα έχει τη τιμή 0. 

Αν ο πίνακας είναι ταξινομημένος σε φθίνουσα σειρά, πρέπει να αντιστραφούν οι ανισώσεις στις γραμμές 130 και 140.

ZX_Jim Greece

e-mail: dcotsos2015@gmail.com