Laboratorium 11

Wyszukiwanie

Oznaczenia:

Wyszukiwanie liniowe

linear_search(a, value, left, right)
    for i=left to right
      if a[i]==value 
         return i
    return nie_znaleziono

Tablice uporządkowane

Wyszukiwanie binarne

binary_search(a, value, left, right)
    while left <= right
        mid = (left+right)/2
        if a[mid] == value
            return mid
        else if value < a[mid]
            right = mid-1
        else if value > a[mid]
            left = mid+1
    return nie_znaleziono

Wyszukiwanie interpolacyjne


  interpolation_search(a, value, left, right)  
  while left<=right
    mid=(value-a[left])/(a[right].k-a[left])*(right-left))+left; 
        if mid<left or mid>right return nie_znaleziono
        if a[mid] = value
            return mid
        else if value < a[mid]
            right = mid-1
        else if value > a[mid]
            left = mid+1
    return nie_znaleziono

Przykładowa implementacja dla tablicy liczb całkowitych

lin.cpp

Przykładowe zadania

Dla uporządkowanej tablicy: zastosuj algorytm szukania liniowego, szukania binarnego, szukania interpolacyjnego. Zastanów się (sprawdź w literaturze) jaka jest minimalna, maksymalna i średnia liczba porównań potrzebna do znalezienia elementu w każdym z tych algorytmów.