Junior
Ποιος αλγόριθμος έχει λογαριθμική πολυπλοκότητα O(log n);
sobes.tech AI
Απάντηση από AI
Ο αλγόριθμος δυαδικής αναζήτησης (ή διχοτομική αναζήτηση) έχει λογαριθμική χρονική πολυπλοκότητα O(log n).
Αρχή λειτουργίας της δυαδικής αναζήτησης:
- Απαιτεί έναν ταξινομημένο πίνακα (ή λίστα).
- Σε κάθε βήμα, συγκρίνει το ζητούμενο στοιχείο με το στοιχείο στο μέσο του τρέχοντος εύρους αναζήτησης.
- Αν τα στοιχεία ταιριάζουν, η αναζήτηση ολοκληρώνεται.
- Αν το ζητούμενο στοιχείο είναι μικρότερο από το μέσο, η αναζήτηση συνεχίζεται στο αριστερό μισό του εύρους.
- Αν το ζητούμενο στοιχείο είναι μεγαλύτερο από το μέσο, η αναζήτηση συνεχίζεται στο δεξί μισό του εύρους.
- Το εύρος αναζήτησης μειώνεται στο μισό σε κάθε βήμα.
Παράδειγμα υλοποίησης σε Python:
# Συνάρτηση δυαδικής αναζήτησης
def binary_search(arr, target):
low = 0
high = len(arr) - 1
while low <= high:
mid = (low + high) // 2
mid_val = arr[mid]
if mid_val == target:
return mid # Βρέθηκε το στοιχείο, επιστρέφει το δείκτη
elif mid_val < target:
low = mid + 1 # Αγνοεί το αριστερό μισό
else:
high = mid - 1 # Αγνοεί το δεξί μισό
return -1 # Το στοιχείο δεν βρέθηκε
# Παράδειγμα χρήσης
# ταξινομημένη_λίστα = [2, 5, 8, 12, 16, 23, 38, 56, 72, 91]
# στόχος = 23
# αποτέλεσμα = binary_search(ταξινομημένη_λίστα, στόχος)
# if αποτέλεσμα != -1:
# print(f"Βρέθηκε το στοιχείο στη θέση: {αποτέλεσμα}")
# else:
# print("Δεν βρέθηκε το στοιχείο")
Η λογαριθμική πολυπλοκότητα οφείλεται στο γεγονός ότι ο αριθμός των ενεργειών είναι ανάλογος με το λογάριθμο του μεγέθους των εισερχόμενων δεδομένων (n), καθώς σε κάθε βήμα, ο χώρος αναζήτησης μειώνεται στο μισό.