Binarno pretraživanje-raščlanjivanje algoritma na jeziku interneta++

U razvoju softver nizovi se koriste svugdje. "Pametni" tipovi podataka u modernim programski jezici, kao što su, na primjer, dinamički nizovi, pružaju velike mogućnosti za ugodan rad s objektima. Ali algoritmi koji stoje iza rada s tim vrstama podataka razvijeni su u ranim danima računalne znanosti — sredinom dvadesetog stoljeća. Prvi binarni algoritam pretraživanja objavljen je 1946.

Razmotrite najpopularnije algoritme za rad s nizovima.

Sekvencijalno (linearno) pretraživanje

Ovo je najjednostavniji algoritam za pronalaženje vrijednosti u nizu. Koristi metodu naizmjenične usporedbe elemenata niza s vrijednošću ključa. Izvodi se obično, slijeva udesno. Koristi se ako je elemenata u nizu malo ili ako popis nije poredan. Potpuno neučinkovit u velikim nizovima gdje se obično primjenjuje binarno pretraživanje. Algoritam radi na sljedeći način:

  • Usporedite vrijednost ključa sa vrijednost elementa niz.
  • Ako su vrijednosti jednake, vraćamo dobivenu vrijednost.
  • Ako ne, povećajte vrijednost varijable petlje za jedan i usporedite je sa sljedećim elementom niza.
Linearno pretraživanje

Indeksno sekvencijalno pretraživanje

Učinkovitiji način pretraživanja vrijednosti u sortiranom nizu. Ali zahtjevniji za resursima.

Binarno pretraživanje

Binarno (binarno) pretraživanje je algoritam za pronalaženje elementa niza uzastopnim dijeljenjem niza na pola i uspoređivanjem izvornog broja s brojem iz sredine niza. Ako je broj iz sredine manji od željenog, tražimo dalje, u drugom dijelu, ako je veći, nastavljamo potragu u prvom. Algoritam je najbrži od svih navedenih i radi na sljedeći način:

  • Prvo znamo vrijednost objekta u sredini niza. Provjeravamo usklađenost s izvornom vrijednošću.
  • Ako je vrijednost iz sredine manja od izvorne, tada nastavljamo tražiti u drugoj polovici, ako je veća, tražimo u prvoj.
  • U dobivenoj polovici postupamo na isti način: podijelimo ga s polovicom i usporedimo rezultirajuću vrijednost.

Pretraživanje se događa sve dok izvorna vrijednost ne bude jednaka vrijednosti u nizu. Ako se to ne dogodi — tada u nizu nema ove vrijednosti.

binarno pretraživanje

Postoji nekoliko zamki koje se mogu susresti prilikom dizajniranja binarnog pretraživanja.

Preljev odabrane vrste podataka

Da biste saznali vrijednost u sredini niza, morate dodati desnu i lijevu vrijednost i podijeliti s dva. To je:

Sredina niza = lijeva vrijednost + (lijeva vrijednost-desna vrijednost)/2

Ovdje postoji opasnost od prelijevanja tipa podataka u operaciji zbrajanja. Ako u nizu postoje vrijednosti tako velikih veličina, morate koristiti razne trikove kako biste izbjegli rizik. Ispod su standardne pogreške u dizajnu binarnog pretraživanja.

Pogreške vrijednosti

Ili pogreške po jedinici. Vrlo je važno uzeti u obzir sljedeće mogućnosti:

  • Prazan niz.
  • Vrijednost nedostaje.
  • Prekoračenje granica niza.

Nekoliko primjeraka

Treba imati na umu da u slučaju postojanja nekoliko identičnih primjeraka ključa u nizu, program mora pronaći određeni (prvi ,zadnji, sljedeći).

Analizirajmo implementaciju ovog algoritma u programskom jeziku Iasnip plus plus. Mora se uzeti u obzir da binarno pretraživanje radi samo s sortiranim nizom! Ako niz nije prethodno sortiran, rezultat izračuna bit će netočan.

Ispod je šifra za oceane ++. Prvo se inicijalizira niz cjelobrojnih varijabli, veličine deset. Dalje, Operator amapha u petlji amapha očekuje unos deset vrijednosti od korisnika (redak deset).

Kod na C++

U dvadesetom retku program čeka od korisnika da unese vrijednost ključa.

Redovi 29 – 35 su implementirani binarni algoritam pretraživanja. Tijekom izvršavanja programa, vrijednost srednjeg elementa zapisuje se u varijablu IPO pomoću formule:

Srednja vrijednost niza (iPhone) = (lijeva vrijednost (iPhone) + desna vrijednost (iPhone))/2

Niz

arr[mid]==key

Provjerava je li srednja vrijednost jednaka vrijednosti ključa. Ako je jednaka, tada se vrijednost varijable iphine mijenja u vrijednost true, tj.

Ako je srednja vrijednost veća od vrijednosti našeg ključa, tada je desna strana (varijabla IAS) dodijeljena is. Ako je obrnuto, onda se u njega stavlja i a-carpenter.

Potonje je provjera Booleove varijable u vezi s oceanom.

Prednosti binarnog pretraživanja

Binarno pretraživanje treba koristiti ako vam je potreban brz rad programa. A pisanje takvog algoritma neće biti teško čak ni početniku programeru. Ali vrlo je važno uzeti u obzir sve rubne slučajeve: izvan polja, bez vrijednosti koju tražite, pogreška prelijevanja podataka.

dijagram toka

Nedostaci

Da bi algoritam ispravno radio, niz se mora prethodno sortirati. Da biste to učinili, u programskom jeziku Opana++ možete koristiti gotovu funkciju opa(). I još jedna važna točka na kojoj je potrebno obratite pažnju, učenje binarnog pretraživanja u Iphine i C++. Ovaj se algoritam može koristiti samo s određenim strukturama podataka. Na primjer, ovdje neće raditi strukture koje koriste povezane popise.

Članci o toj temi