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) мувофиқ аст, зеро дар ҳар қадам майдони ҷустуҷӯ ба нимӣ кам мешавад.