A bináris keresés az egyik legegyszerűbb módja annak, hogy elemet találjon egy tömbben
Gyakran, a programozók, még a kezdők is,hogy vannak olyan számok, amelyekben meg kell találni egy bizonyos számot. Ezt a gyűjteményt tömbnek hívják. És megtalálni a megfelelő elemet, sokféleképpen lehet. De a legegyszerűbb köztük jobbra bináris keresésnek tekinthető. Mi a módszer? És hogyan lehet bináris keresést végrehajtani? A Pascal a legegyszerűbb eszköz egy ilyen program megszervezéséhez, ezért tanulni fogjuk.
Először is elemezzük, hogy mi a módszer előnyei, végül is, így megérthetjük,
Tehát mi ennek a működési elvemódszer? Érdemes megemlíteni, hogy a bináris keresés nem működik semmilyen tömbben, hanem csak egy rendezett számsorban. Minden egyes következő lépésnél a tömb középső elemét (az elemszámra hivatkozva) veszi. Ha a kívánt szám nagyobb az átlagnál, akkor mindent, ami a bal oldalon van, vagyis az átlag elemnél kisebb, eldobható és nem kereshető ott. Ezzel ellentétben, ha az átlag alatti, a jobb oldali számok között nem keresheti őket. Ezután kiválaszunk egy új keresési területet, ahol az egész tömb középső eleme lesz az első elem, az utolsó pedig az utolsó lesz. Az új terület átlagos száma az egész szegmens ¼-e lesz, azaz (az utolsó elem + az egész tömb átlagos eleme) / 2. Ismét ugyanazt a műveletet végezzük el - összehasonlítjuk a tömb átlagos számával. Ha a kívánt érték kisebb, mint az átlag, dobja el a jobb oldalt, és addig addig végezze el, amíg meg nem találja ezt a középső elemet.
Természetesen a legjobb, ha megnézzük a bináris keresés megírásának példáját. A Pascal itt bárki számára alkalmas - a verzió nem fontos. Írjunk egy egyszerű programot.
Ez egy tömb lesz 1-től h-igA "massiv", az alsó keresési határt jelző változó, a "niz", a "verh" nevű felső határ, a keresés középső eleme "sredn"; és a szükséges szám "isk".
Tehát először adja meg a keresési intervallum felső és alsó határait:
niz: = 1;
verh: = h + 1;
Aztán megszervezzük a ciklust ", míg az alsó kisebb, mint a felső határ":
Míg niz <verh - 1 nem
kezdődik
Minden lépésben oszd meg a szegmenst 2:
sredn: = (niz + verh) div 2; {használja a div függvényt, mert megosztjuk a maradékot}
Minden alkalommal, amikor ellenőrzünk. Ha az átlag egyenlő a kívánt értékkel, megszakítjuk a ciklust, mivel a kívánt elem már megtalálható:
ha sredn = isk akkor megszakad;
Ha a tömb átlagos eleme nagyobb, mint amit keresünk, dobjuk el a bal oldalt, vagyis a középső elemet hozzárendeljük a felső határhoz:
ha massiv [sredn]> isk akkor verh: = sredn;
És ha éppen ellenkezőleg, akkor az alsó határt teszik:
egyéb niz: = sredn;
végén;
Ez minden, ami a programban lesz.
Elemezzük, hogy a bináris módszer hogyan fog kinézni a gyakorlatban. Vegyünk egy ilyen tömböt: 1, 3, 5, 7, 10, 12, 18, és keresd meg a 12-es számot.
Összesen 7 elem van, így az átlag a negyedik, értéke 7.
1 | 3 | 5 | 7 | 10 | 12 | 18 |
Mivel a 12 nagyobb, mint 7, az 1,3 és 5 elemek eldobhatók. Ezután 4 szám maradt, 4/2 maradék nélkül 2. Tehát az új középső elem 10 lesz.
7 | 10 | 12 | 18 |
Itt a középső elem már 12, ez a szükséges szám. A feladat befejeződött - a 12-es szám megtalálható.