Wartownik: przeszukiwanie liniowe

Transkrypt

Wartownik: przeszukiwanie liniowe
(C) 2005 RoG@j
Wartownik:
przeszukiwanie liniowe
2005-03-16
Poszukiwanie w zbiorze
!
W zbiorze poszukiwać możemy
!
!
Poszukiwania w zbiorze
Przeszukiwanie z wartownikiem
Średnia
Minimum i maksimum
Idea wartownika
!
Należy jedynie sprawdzić, czy znajduje się on
w ciągu danych czy tez może na dołączonej
pozycji.
!
!
!
W pierwszym wypadku przeszukiwany zbiór
zawiera element y,
a w drugim y nie należy do tego zbioru.
Dołączony do zbioru element odgrywa rolę
wartownika - nie musimy sprawdzać, czy
przeglądanie objęło cały zbiór czy nie,
zatrzyma się ono bowiem zawsze na
szukanym elemencie.
Kolejne kroki…
!
!
!
Alg 13
Krok 2
Dla kolejnego element z w danym ciągu jeśli
z=y to przejdź do następnego kroku, w
przeciwnym razie powtórz ten krok.
Krok 3
Jeżeli z jest wartownikiem, to zbiór nie
zawiera y, w przeciwnym wypadku z
wskazuje pierwsze wystąpienie y w ciągu.
Znalezienie czegokolwiek trwa na ogół
krócej, niż stwierdzenie jego braku.
!
W przeszukiwaniu wykorzystamy
wartownika w następujący sposób:
!
!
elementu o danej wartości,
elementu o wyróżnionej właściwości (np.
największego).
jeżeli y jest poszukiwanym elementem zbioru, to
dołączamy na jego końcu ten element.
Przeszukiwanie zawsze zakończy się
odnalezieniem elementu równego y!
Przeszukiwanie liniowe z
wartownikiem
!
Dane:
!
!
Wyniki:
!
!
Zbiór elementów w postaci ciągu; y - poszukiwany
element
Jeśli y należy do zbioru podaj jego pozycję, jeśli
nie zasygnalizuj jego brak w zbiorze danych.
Krok 1
{Utworzenie wartownika na końcu ciągu}
Utwórz na końcu ciągu wartownika i umieść
w nim y.
Wersja z tablicą
!
!
!
Dane:
Zbiór elementów dany w tablicy a[k..l], gdzie
k<=l; y – poszukiwany element.
Wynik:
Takie s (k<=s<=l), że as=y lub s=-1 jeśli y<>ai
dla każdego i
(k<=i<=l)
1
(C) 2005 RoG@j
Kolejne kroki…
!
!
!
Krok 1 al+1:=y {utworzenie wartownika na
końcu ciągu}
Krok 2 Dla s=k, …, l, l+1, jeśli as=y to
wykonaj następny krok.
Krok 3 Jeśli s=l+1 to zbiór nie zawiera
elementu y i przyjmujemy
!
2005-03-16
Średnia
!
!
!
s=-1; w przeciwnym wypadku as=y.
!
!
Opis problemu
!
!
Mając dany zbiór elementów, chcemy
znaleźć w nim element największy
(maksimum), bądź najmniejszy (minimum).
We wszystkich „naturalnych metodach”
znajdywania najmniejszego i największego
elementu obecne jest przeglądanie
wszystkich elementów zbioru, bezpośrednie
bądź pośrednie.
Złożoność algorytmu
!
!
!
Alg 13
Liczba porównań w tym algorytmie jest równa
n-1.
Czy istnieje algorytm, który pozwala na
znalezienie największego elementu kosztem
mniejszej liczby działań?
Przedstawiony algorytm jest optymalny pod
względem złożoności.
Średnia ze zbioru liczb jest równa liczbie
elementów podzielonej przez ich liczbę.
Algorytm obliczania średniej z liczb dodatnich
wprowadzanych z klawiatury będzie zależeć
od sposobu czytania danych:
zbiór danych jest poprzedzony ich liczbą w
zbiorze,
zbiór danych jest zakończony wartownikiem.
Przyjmujemy, że suma elementów zbioru,
który jest pusty, wynosi zero.
Znajdywanie największego
elementu w zbiorze
!
!
!
!
Dane: Zbiór n liczb
Wynik: Największy element max w danym
zbiorze.
Krok 1:
Przyjmij za max dowolny element ze zbioru
Krok 2:
Dla każdego innego elementu x zbioru
wykonuj: jeśli x jest większe niż max to za
max przyjmij x.
Znajdywanie najmniejszego
elementu w zbiorze
!
!
!
!
Dane:
Wynik:
Zbiór n liczb
Najmniejszy element min w
danym zbiorze.
Krok 1:
Przyjmij za min dowolny element ze zbioru
Krok 2:
Dla każdego innego elementu x zbioru
wykonuj: jeśli x jest mniejsze niż min to za
min przyjmij x.
2