Binární vyhledávací algoritmus s PŘÍKLADEM

⚡ Chytré shrnutí

Binární vyhledávací algoritmus vyhledá položku v seřazeném seznamu opakovaným rozdělením rozsahu vyhledávání na polovinu a porovnáním cíle s prostředním prvkem. Nazývá se také vyhledávání v polovičním intervalu nebo logaritmické vyhledávání a je mnohem rychlejší než prohledávání každého prvku.

  • 📖 Seřazená data: Binární vyhledávání funguje pouze na seřazeném seznamu položek.
  • Rozpůlení: Každý krok porovnává cíl se středem a zahazuje polovinu dosahu.
  • Logaritmický: Vyhledávání probíhá v čase O(log n), což je mnohem rychleji než lineární vyhledávání.
  • 🎯 Prostřední index: Střed se nachází jako podlaha (levá + pravá) dělená dvěma.
  • 🔁 Iterativní: Proces se opakuje, dokud není prvek nalezen nebo dokud není rozsah prázdný.

Algoritmus binárního vyhledávání s příkladem

Než se naučíme binární vyhledávání, pojďme si vysvětlit, co vyhledávání vlastně je.

Co je vyhledávání?

Search je nástroj, který umožňuje svému uživateli najít dokumenty, soubory, média nebo jakýkoli jiný typ dat uložených v databázi. Vyhledávání funguje na jednoduchém principu přiřazování kritérií k záznamům a jejich zobrazení uživateli. Tímto způsobem funguje nejzákladnější vyhledávací funkce.

Co je binární vyhledávání?

Binární vyhledávání je pokročilý typ vyhledávacího algoritmu, který vyhledává a načítá data ze seřazeného seznamu položek. Jeho základní princip fungování spočívá v rozdělení dat v seznamu na poloviny, dokud není nalezena požadovaná hodnota a nezobrazena uživateli ve výsledku vyhledávání. Binární vyhledávání je obecně známé jako půlintervalové vyhledávání nebo logaritmické vyhledávání.

Jak funguje binární vyhledávání?

Binární vyhledávání funguje následujícím způsobem:

  • Proces vyhledávání začíná nalezením prostředního prvku seřazeného pole dat.
  • Poté se klíčová hodnota porovná s elementem.
  • Pokud je hodnota klíče menší než prostřední prvek, pak vyhledávání analyzuje horní hodnoty prostředního prvku pro porovnání a nalezení shody.
  • V případě, že je hodnota klíče větší než hodnota prostředního prvku, pak vyhledávání analyzuje nižší hodnoty prostředního prvku pro porovnání a nalezení shody.

Binární vyhledávací algoritmus (pseudokód)

Binární vyhledávání lze zapsat jako krátkou iterační rutinu. Uchovává dva ukazatele, nízký a vysoký, a zužuje rozsah, dokud není nalezen cíl nebo dokud se rozsah nevyprázdní.

binarySearch(array, target)
    low = 0
    high = length(array) - 1
    while low <= high
        mid = (low + high) / 2      // floor value
        if array[mid] == target
            return mid
        else if array[mid] < target
            low = mid + 1
        else
            high = mid - 1
    return -1              // target not found

Rutina vrací index cíle v případě úspěchu a -1, pokud hodnota není přítomna. Protože se rozsah při každém průchodu zmenší na polovinu, smyčka proběhne maximálně log₂(n)krát.

Příklad binárního vyhledávání

Podívejme se na příklad slovníku. Pokud potřebujete najít určité slovo, nikdo neprochází každé slovo sekvenčně, ale náhodně najde nejbližší slova a vyhledá požadované slovo.

Příklad binárního vyhledávání

Výše uvedený obrázek ilustruje následující:

  1. Máte pole 10 číslic a je třeba najít prvek 59.
  2. Všechny prvky jsou označeny indexem od 0 do 9. Nyní se vypočítá střed pole. Vydělíte levou a pravou hodnotu indexu číslem 2. Výsledek je 4.5, ale bereme spodní hodnotu. Střed je tedy 4.
  3. Algoritmus odstraní všechny prvky od středu (4) až po nejnižší mez, protože 59 je větší než 24, a nyní v poli zbývá pouze 5 prvků.
  4. Nyní je 59 větší než 45 a menší než 63. Prostřední číslo je 7. Hodnota pravého indexu se tedy stává střední -1, což se rovná 6, a hodnota levého indexu zůstává stejná jako předtím, tedy 5.
  5. V tuto chvíli víte, že 59 následuje po 45. Proto se levý index, který je 5, také stane středem.
  6. Tyto iterace pokračují, dokud není pole zredukováno pouze na jeden prvek nebo dokud se nalezená položka nestane středem pole.

Příklad 2

Podívejme se na následující příklad, abychom pochopili fungování binárního vyhledávání.

Příklad binárního vyhledávání

  1. Máte pole seřazených hodnot v rozsahu od 2 do 20 a potřebujete najít 18.
  2. Průměr dolní a horní meze je (l + r) / 2 = 4. Hledaná hodnota je větší než střední hodnota, která je 4.
  3. Hodnoty pole menší než střední hodnota jsou z vyhledávání vyřazeny a prohledávají se hodnoty větší než střední hodnota 4.
  4. Toto je opakující se proces dělení, dokud není nalezena skutečná položka, která má být prohledána.

Proč potřebujeme binární vyhledávání?

Následující důvody dělají binární vyhledávání lepší volbou pro použití jako vyhledávací algoritmus:

  • Binární vyhledávání funguje efektivně na seřazených datech bez ohledu na jejich velikost.
  • Namísto vyhledávání procházením dat v sekvenci binární algoritmus náhodně přistupuje k datům, aby našel požadovaný prvek. Díky tomu jsou vyhledávací cykly kratší a přesnější.
  • Binární vyhledávání provádí porovnávání seřazených dat na základě principu uspořádání, spíše než použití porovnávání rovnosti, které je pomalejší a většinou nepřesné.
  • Po každém cyklu vyhledávání algoritmus rozdělí velikost pole na polovinu; v další iteraci tedy bude fungovat pouze ve zbývající polovině pole.

Naučte se náš další tutoriál na téma Lineární vyhledávání: Python, C++ Příklad.

Binární vyhledávání vs. lineární vyhledávání

Binární vyhledávání a lineární vyhledávání jsou dva nejběžnější způsoby, jak najít hodnotu v kolekci. Následující tabulka znázorňuje, jak se liší:

Vzhled Binární vyhledávání Lineární vyhledávání
Požadavek na údaje Vyžaduje seřazená data Funguje s seřazenými i neseřazenými daty
Metoda V každém kroku se rozsah vyhledávání zkrátí na polovinu Kontroluje každý prvek postupně
Časová složitost O (log n) O (n)
Nejlepší pro Velké, seřazené datové sady Malé nebo netříděné datové sady

Stručně řečeno, binární vyhledávání je mnohem rychlejší na velkých seřazených datech, zatímco lineární vyhledávání je jednodušší a je jedinou možností, když data nejsou seřazena.

Nejčastější dotazy

Binární vyhledávání umožňuje rychlé vyhledávání v seřazených strukturách systémů umělé inteligence, jako je hledání prahových hodnot, ladění hyperparametrů v rozsahu nebo vyhledávání hodnoty v seřazeném indexu vnoření. Jeho rychlost O(log n) udržuje toto vyhledávání efektivní.

Ano. Asistenti s umělou inteligencí mohou psát iterativní nebo rekurzivní binární vyhledávání v Python, Javanebo C++ z jednoduchého popisu. Při výpočtu prostředního indexu si dejte pozor na klasické chyby typu „off-by-one“ a „overflow“ a testujte s okrajovými případy.

Binární vyhledávání probíhá v čase O(log n), protože s každým porovnáním zmenšuje rozsah vyhledávání na polovinu. Jeho prostorová složitost je O(1) pro iterační verzi a O(log n) pro rekurzivní verzi kvůli zásobníku volání.

Ne. Binární vyhledávání se spoléhá na tříděná data, takže se může rozhodnout, kterou polovinu zahodit. U netříděných dat je nutné je nejprve seřadit nebo použít lineární vyhledávání, které kontroluje každý prvek v pořadí.

Shrňte tento příspěvek takto: