A Binary Search az egyik leggyakrabban alkalmazott listában való keresésre alkalmas algoritmus.
A kódja kétszer lett lefuttatva, mint a képen látszik, van benne hibakezelés, azaz az 52-es elemet megtalálja a kódban lévő listából, mint az a Visual Studio-ban készült kódról készült kép parancssorában látszik, a 61-es elemre pedig kiírja, hogy nem a lista része, mint ahogy az igaz is.
Binary Search működése: (lenyíló tartalom - kattints a jobb szélső + ikonra)
A Binary Search (Bináris Keresés) egy hatékony algoritmus rendezett listákban való keresésre, amely az oszd meg és uralkodj (divide and conquer) elvet alkalmazza. A működési elve a következő:
1. Feltételek:
A bináris keresés működéséhez elengedhetetlen, hogy a keresett adatokat tartalmazó lista rendezett legyen, tehát a lista elemei növekvő (vagy csökkenő) sorrendben legyenek rendezve.
2. Kezdő feltételezés:
A keresést a lista középső elemével kezdjük. A lista eleje (left) és vége (right) mutatja, hogy a keresés melyik részén dolgozunk.
3. Középső elem vizsgálata:
Ha a középső elem a keresett elem, akkor a keresés sikeres, és a keresett elem pozícióját adjuk vissza.
Ha a középső elem kisebb, mint a keresett elem, akkor a keresés a jobb oldalra (a középső elem utáni részre) folytatódik.
Ha a középső elem nagyobb, mint a keresett elem, akkor a keresés a bal oldalra (a középső elem előtti részre) folytatódik.
4. Szűkítés:
A keresési tartományt minden egyes lépésnél a középső elem alapján felére csökkentjük. Ezáltal a keresési tartomány egyre kisebb lesz, és gyorsabban elérhetjük a keresett elemet.
5. Befejezés:
A keresés akkor fejeződik be, ha a keresett elem meg lesz találva vagy ha a bal oldali mutató (left) nagyobb, mint a jobb oldali mutató (right), ami azt jelenti, hogy az elem nincs a listában.
Példa:
Tegyük fel, hogy egy rendezett listában szeretnénk megtalálni a 40-et:
[10, 20, 30, 40, 50, 60, 70, 80]
Első lépés:
Bal oldali mutató: left = 0
Jobb oldali mutató: right = 7
A középső elem: arr[3] = 40
Mivel a középső elem megegyezik a keresett elemmel (40), a keresés sikeres.
Időbonyolultság:
A bináris keresés minden lépésben a keresési tartomány felére csökkenti a vizsgálandó elemek számát, így az algoritmus logaritmikus időbonyolultságú, azaz O(log n), ahol n a lista elemeinek száma. A legrosszabb esetben is csupán logaritmikus számú lépést kell végrehajtani.
Előnyök:
Nagy rendezett listákban is gyors keresést tesz lehetővé.
Mivel minden lépésben a felére csökkenti a vizsgált tartományt, nagyon gyorsan megtalálhatjuk a keresett elemet.
Hátrányok:
A lista rendezett kell, hogy legyen. Ha a lista nem rendezett, előbb rendezni kell, ami plusz időt és költséget jelenthet.
Kódmag: (lenyíló tartalom - kattints a jobb szélső + ikonra)
def binary_search(list, target):
left, right = 0, len(list) - 1
while left <= right:
mid = (left + right) // 2
# Ha a középső elem az, amit keresünk
if list[mid] == target:
return mid
# Ha a középső elem nagyobb, akkor a bal oldalra keresünk tovább
elif list[mid] > target:
right = mid - 1
# Ha a középső elem kisebb, akkor a jobb oldalra keresünk tovább
else:
left = mid + 1
# Ha nem található az elem
return -1
list = [11, 34, 52, 76, 93, 110, 67, 47,98, 75]
target = 52
index = binary_search(list, target)
if index != -1:
print(f"Az elem ({target}) megtalálható az {index} indexen.")
else:
print(f"Az elem ({target}) nem található a listában.")


