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