24.11.2012 Views

Algorytmy przeszukiwania Przeszukiwanie liniowe - UJK

Algorytmy przeszukiwania Przeszukiwanie liniowe - UJK

Algorytmy przeszukiwania Przeszukiwanie liniowe - UJK

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

<strong>Przeszukiwanie</strong> binarne<br />

Algorytm ten stosuje się w sytuacji, gdy elementy zbioru maja<br />

pewną strukturę, np. są uporządkowane. W takiej sytuacji<br />

wykorzystujemy tą dodatkowa informację.<br />

Przykład<br />

Chcemy odgadnąć liczbę naturalną z przedziału [1, N]. W każdej<br />

chwili dysponujemy podpowiedzią w postaci: „tak”, „za mało”,<br />

„za dużo”.<br />

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20<br />

↑<br />

11 12 13 14 15 16 17 18 19 20<br />

↑<br />

16 17 18 19 20<br />

_______ ↑<br />

⎢16 ⎢17 ⎢<br />

↑ ____<br />

⎜ 17 ⎜ !<br />

↑<br />

W pojedynczym wypadku algorytm liniowy może dać szybciej<br />

odpowiedź niż algorytm binarny, ale przy wielu próbach prawie zawsze<br />

algorytm binarny jest szybszy.<br />

Dane w tym przykładzie to uporządkowany ciąg liczb w tablicy<br />

a[k],...,a[l] , gdzie k ≤ l oraz element y spełniający równość a[k] ≤ y ≤<br />

a[l] . Trzeba znaleźć takie s (k≤ s ≤ l ), że a[s]=y (chyba, że taki element<br />

nie istnieje).<br />

Algorytm (język naturalny - punkty):<br />

1. Wprowadzenie tablicy a[k],a[k+1], ... , a[l]<br />

2. Przypisujemy końce przedziału lewy=k, prawy=l<br />

3. Jeśli lewy>prawy to „brak szukanej liczby” i koniec

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!