Wyszukiwanie binarne - algorytm parsowania w c++

W trakcie opracowywania oprogramowanie tablice są używane wszędzie. "Inteligentne" typy danych w nowoczesnym języki programowania, takie jak tablice dynamiczne dają duże możliwości wygodnej pracy z obiektami. Ale algorytmy stojące za pracą z tymi typami danych zostały opracowane u zarania informatyki - w połowie XX wieku. Pierwszy algorytm wyszukiwania binarnego został opublikowany w 1946 roku.

Rozważmy najpopularniejsze algorytmy do pracy z tablicami.

Wyszukiwanie indeksowo-liniowe

Jest to najprostszy algorytm wyszukiwania wartości w tablicy. Wykorzystuje metodę porównania tablicy element po elemencie z wartością kluczową. Generalnie szukamy od lewej do prawej. Stosuje się go, gdy w tablicy jest mało elementów lub gdy lista nie jest uporządkowana. Całkowicie nieefektywne w dużych tablicach, gdzie wyszukiwanie binarne jest powszechnie stosowane. Algorytm działa w następujący sposób:

  • Porównaj wartość klucza z wartość elementu tablicy.
  • Jeśli wartości są równe, zwracamy otrzymaną wartość.
  • Jeśli nie, zwiększamy zmienną pętli o jeden i porównujemy ją z kolejnym elementem tablicy.
Wyszukiwanie liniowe

Indeks Wyszukiwanie sekwencyjne

Bardziej wydajny sposób na znalezienie wartości w posortowanej tablicy. Ale bardziej wymagający pod względem zasobów.

Wyszukiwanie binarne

Wyszukiwanie binarne to algorytm znajdowania elementu tablicy przez kolejne dzielenie tablicy na pół i porównywanie liczby początkowej z liczbą w środku tablicy. Jeśli wartość ze środka jest mniejsza od wymaganej, przechodzimy do szukania w drugiej części; jeśli jest większa, przechodzimy do szukania w pierwszej części. Ten algorytm jest najszybszy ze wszystkich i działa w następujący sposób:

  • Znajdź najpierw wartość obiektu w środku tablicy. Sprawdzenie zgodności z wartością oryginalną.
  • Jeśli wartość w środku jest mniejsza od początkowej, kontynuujemy poszukiwania w drugiej połowie, jeśli jest większa, szukamy w pierwszej połowie.
  • Jeśli otrzymamy połowę, postępujemy w ten sam sposób: dzielimy przez połowę i porównujemy otrzymaną wartość.

Wyszukiwanie odbywa się tak długo, aż wartość początkowa będzie równa wartości w tablicy. Jeśli tak się nie stanie - wartość ta nie istnieje w tablicy.

wyszukiwanie binarne

Istnieje kilka pułapek, które można napotkać podczas projektowania wyszukiwania binarnego.

Przepełnienie wybranego typu danych

Aby znaleźć wartość w środku tablicy, dodaj wartości z prawej i lewej strony, a następnie podziel przez dwa. To jest:

Środek tablicy = Wartość lewa + (Wartość lewa - Wartość prawa)/2

Istnieje niebezpieczeństwo przepełnienia typu danych podczas wykonywania operacji dodawania. Jeśli tablica zawiera wartości o tak dużym rozmiarze, musimy zastosować różne techniki, aby uniknąć ryzyka. Oto kilka standardowych błędów w rozwoju wyszukiwania binarnego.

Błędy wartości

Lub błąd jednego z nich. Bardzo ważne jest, aby rozważyć następujące opcje:

  • Pusta tablica.
  • Brak wartości.
  • Przekroczenie tablicy.

Wiele instancji

Zauważ, że jeśli w tablicy znajduje się wiele instancji tego samego klucza, program musi znaleźć konkretny (pierwszy, ostatni, obok).

Zbadajmy implementację tego algorytmu w języku programowania C plus. Zauważ, że wyszukiwanie binarne działa tylko z posortowaną tablicą! Jeśli tablica nie jest wstępnie posortowana, wynik obliczeń nie będzie poprawny.

Poniżej znajduje się kod w języku C ++. Najpierw inicjalizowana jest tablica zmiennych całkowitych arr, o rozmiarze dziesięć. Następnie operator cin w pętli for czeka, aż użytkownik wprowadzi dziesięć wartości (ciąg dziesięć).

Kod C++

W linii 20 program czeka na podanie przez użytkownika wartości klucza.

Linie od 29 do 35 są implementacją algorytmu wyszukiwania binarnego. Podczas wykonywania programu do zmiennej mid zapisywana jest wartość elementu środkowego według wzoru:

Środek tablicy (mid) = (wartość lewa (l) + wartość prawa (r))/2

Ciąg

arr[mid]==klucz

Sprawdza, czy wartość środkowa jest równa wartości klucza. Jeśli jest równa, to wartość zmiennej flagowej zmienia się na TRUE, więc problem jest rozwiązany.

Jeśli wartość środkowa jest większa od naszej wartości kluczowej, to prawej stronie (zmiennej r) przypisujemy wartość mid. Jeśli jest odwrotnie, to mid jest przypisany do r.

Ostatni z nich to sprawdzenie flagi zmiennej typu boolean.

Zalety wyszukiwania binarnego

Wyszukiwanie binarne powinno być stosowane, jeśli wymagane jest szybkie działanie programu. A napisanie takiego algorytmu nie będzie trudne nawet dla początkującego programisty. Ale bardzo ważne jest, aby rozważyć wszystkie skrajne przypadki: przekroczenie tablicy, brak poszukiwanej wartości, błąd przepełnienia danych.

schemat blokowy

Wady

Do poprawnej pracy algorytmu tablica musi być wstępnie posortowana. W języku programowania C++ można skorzystać z gotowej funkcji sort(). I jest jeszcze jedna ważna kwestia, którą należy poruszyć uwaga, nauka wyszukiwania binarnego w C i C++. Ten algorytm może być używany tylko z pewnymi strukturami danych. Na przykład struktury wykorzystujące listy połączone nie będą tutaj działać.

Artykuły na ten temat