Junior
Kuris algoritmas turi logaritminę sudėtingumą O(log n)?
sobes.tech AI
Atsakymas iš AI
Dvinarių paieškos algoritmas (arba dikotominis paieška) turi logaritminę laiko sudėtingumą O(log n).
Dvinarių paieškos principas:
- Reikalauja surūšiuoto masyvo (arba sąrašo).
- Kiekviename žingsnyje lygina ieškomą elementą su elemento viduryje esamu elementu.
- Jei elementai sutampa, paieška baigiama.
- Jei ieškomas elementas yra mažesnis už vidurį, tęsiasi kairėje pusėje.
- Jei didesnis, tęsiasi dešinėje pusėje.
- Paieškos diapazonas kiekviename žingsnyje sumažėja perpus.
Python pavyzdys:
# Dvinarių paieškos funkcija
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 # Elementas rastas, grąžina indeksą
elif mid_val < target:
low = mid + 1 # Ignoruoja kairę pusę
else:
high = mid - 1 # Ignoruoja dešinę pusę
return -1 # Elementas nerastas
# Pavyzdys naudojimo
# surūšiuotas_sarasas = [2, 5, 8, 12, 16, 23, 38, 56, 72, 91]
# tikslas = 23
# rezultatas = binary_search(surūšiuotas_sarasas, tikslas)
# if rezultatas != -1:
# print(f"Elementas rastas indeksu: {rezultatas}")
# else:
# print("Elementas nerastas")
Logaritminė sudėtingumas kyla dėl to, kad operacijų skaičius yra proporcingas logaritmui iš įvesties duomenų dydžio (n), nes kiekviename žingsnyje paieškos plotas sumažėja perpus.