następnie szukać

Transkrypt

następnie szukać
• 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.
• Algorytm znajdywania największego elementu w zbiorze
Dane: Zbiór na 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.
• 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.
Luty 2001
Algorytmy (4) 2000/2001
[email protected]
1
• Algorytm znajdywania najmniejszego elementu w zbiorze
Dane: Zbiór na liczb
Wynik: 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.
• 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ń?
NIE
• Przedstawiony algorytm jest optymalny pod względem złożoności.
Luty 2001
Algorytmy (4) 2000/2001
[email protected]
2
• Problem Hugo Steinhausa: jaka jest najmniejsza liczba meczów tenisowych
do rozegrania w grupie zawodników, niezbędna do tego, aby wyłonić wśród
nich najlepszego i drugiego najlepszego zawodnika.
• Czy pokonany w finale jest rzeczywiście drugim najlepszym zawodnikiem
turnieju, a co za tym idzie lepszy od wszystkich pozostałych zawodników?
• Nic nie wiadomo bowiem, jak grałby zawodnik, który przegrał w finale z
zawodnikami z poddrzewa, z którego został wyłoniony jego przeciwnik.
• Istnieje prosty sposób znalezienia drugiego najlepszego zawodnika: rozegrać
pełen turniej z pominięciem zwycięzcy. Łączny koszt takiego rozwiązania to
2n-3 meczy.
• Na pytanie, jaka jest najmniejsza liczba meczów, potrzebnych do wyłonienia
drugiego najlepszego zawodnika udzielił odpowiedzi Schreier w 1932.
• Aby wykorzystać w tym celu uzyskane dotychczas wyniki wstawiamy w
miejsce zwycięzcy turnieju „najsłabszego” zawodnika X, który przegra swój
pierwszy mecz.
• W przypadku 8 zawodników trzeba będzie rozegrać dodatkowo jedynie 2
mecze!
Luty 2001
Algorytmy (4) 2000/2001
[email protected]
3
• Złożoność tego algorytmu:
– najlepszy zawodnik wyłaniany jest w n-1 meczach, gdzie n jest liczbą wszystkich
zawodników w turnieju;
– aby wyłonić drugiego najlepszego zawodnika trzeba rozegrać tyle meczów, ile
jest poziomów w drzewie turnieju głównego minus jeden.
– Jaka jest wysokość drzewa turnieju?
– Przyjmijmy, że drzewo turnieju jest pełne, tzn. każdy z zawodników ma parę
(liczba zawodników jest parzysta).
• W tej sytuacji mamy: n=2k, gdzie k jest liczbą poziomów drzewa.
k=log2n
• Liczba porównań wyniesie: (n-1)+(log2n-1)=n+log2n-2
• Jeśli n nie jest potęgą 2 podana liczba jest oszacowaniem z góry liczby
rozgrywanych meczów.
• Prezentowana metoda nosi nazwę porządkowania na drzewie i może być
stosowana do szeregowania liczb.
Luty 2001
Algorytmy (4) 2000/2001
[email protected]
4
• Aby znaleźć rozpiętość zbioru n liczb wystarczy odszukać wśród nich nich
maksimum i minimum a następnie obliczyć ich różnicę.
• Możemy zastosować w tym celu algorytmy Min i Max optymalne pod
względem złożoności.
• Rozpiętość zbioru n liczb można wyznaczyć kosztem 2n-3 porównań.
• Nie jest to jednak metoda jednoczesnego wyznaczania minimum i
maksimum!!!
– najpierw wyznaczamy jedną z wielkości, potem dopiero drugą.
• Idea: z każdego wykonanego sprawdzenia, czy x>y wyciągamy wniosek:
– x jest kandydatem na maksimum w algorytmie Max,
– y jest kandydatem na minimum w algorytmie Min.
• Realizując oba algorytmy niezależnie, jeden po drugim, sprawdzamy te
nierówności dwukrotnie!!!
• Pomysł: porównajmy najpierw pary elementów (n/2 operacji), tworząc dwa
podzbiory, w których będziemy następnie szukać kandydatów na minimum i
maksimum.
Luty 2001
Algorytmy (4) 2000/2001
[email protected]
5
Algorytm Max-i-Min - jednoczesne poszukiwanie minimum i maksimum
Dane: Zbiór n liczb
Wyniki: min i max - najmniejszy i największy element w zbiorze
• Krok 1:
{podział na podzbiory}. Jeśli n jest nieparzyste to jeden z
elementów pozostanie wolny - oznaczamy go przez z.
Porównujemy elementy w parach: jeśli x>y to:
– x dołączamy do zbioru kandydatów na maksimum M
– y dołączamy do zbioru kandydatów na minimum N
• Krok 2:
• Krok 3:
• Krok 4:
Znajdujemy max w zbiorze M
Znajdujemy min w zbiorze N
Jeśli n jest nieparzyste, to:
– jeśli z<min to za min przyjmujemy z
– jeśli z>max to za max przyjmujemy z.
Luty 2001
Algorytmy (4) 2000/2001
[email protected]
6
• Algorytm Max-i-Min jest prostym przykładem postępowania zgodnie z
zasadą dziel i zwyciężaj.
– W pierwszym kroku algorytmu zbiór danych dzielony jest na dwa prawie
równoliczne podzbiory danych.
– Dla tych podzbiorów w następnych krokach rozwiązywane są podobne problemy.
• Problem Max-i-Min rozpada się na dwa problemy Max i Min na rozłącznych
podzbiorach o takiej samej liczbie elementów. (Podobne postępowanie
realizowane jest w MES - podział na superelementy.)
• Złożoność obliczeniowa algorytmu: n parzyste:
– w 1 kroku n/2 porównań
– w krokach 2, 3 n/2-1 takich samych działań w każdym
– w sumie liczba porównań wynosi: 3n/2-2
• Złożoność obliczeniowa algorytmu: n nieparzyste:
– liczba porównań wynosi: 3n/2-2
• Powała x to najmniejsza liczba całkowita nie mniejsza niż x
• Podłoga x to największa liczba całkowita nie większa niż x.
Luty 2001
Algorytmy (4) 2000/2001
[email protected]
7
• Liderem w zbiorze nazywamy element, który występuje w zbiorze więcej niż
połowę razy, czyli więcej, niż n/2 razy, gdy n jest mocą zbioru.
• Problem ten występuje w wyborach, w których zwycięzca musi uzyskać
więcej niż połowę głosów.
• Znalezienie lidera w zbiorze można zastąpić określeniem innych miar
centralności.
– Znalezienie modalnej (najczęściej występującej wielkości w zbiorze) i
sprawdzenie, czy jej częstość w zbiorze jest większa niż wartość n/2. (Jest to
pracochłonne, bo dla znalezienia modalnej trzeba najpierw uporządkować zbiór.)
– Znalezienie mediany, czyli elementu znajdującego się na pozycji n/2 i
sprawdzenie, czy jest on liderem - jeśli zbiór ma lidera, to musi on być jego
medianą!!! (Istnieje algorytm znajdywania mediany, który nie korzysta z
porządkowania zbioru, ale jest on niezwykle złożony.)
Luty 2001
Algorytmy (4) 2000/2001
[email protected]
8
Twierdzenie:
• Jeśli zbiór X zawiera lidera, a x i y są jego dwoma różnymi elementami, to
zbiór Y=X-{x, y}, który powstał przez usunięcie elementów x i y ze zbioru X
również zawiera lidera.
• Odwrotne twierdzenie nie jest prawdziwe. Zredukowany zbiór Y może
zawierać lidera, choć go nie było w zbiorze X.
– X={1, 2, 2, 3, 4} nie ma lidera
– Y=X-{1, 3}={2, 2, 4} zawiera już lidera, którym jest liczba 2.
• Dowód (uzasadnienie)
–
–
–
–
–
l -element X, który jest liderem,
jeśli x i y są dwoma różnymi elementami X to co najwyżej jeden z nich = l,
w zredukowanym zbiorze liczba elementów jest mniejsza o 2,
częstość występowania l jest mniejsza co najwyżej o jeden,
l pozostanie więc liderem w zbiorze Y.
• Musimy jedynie sprawdzić, czy lider Y jest liderem początkowego zbioru X.
Luty 2001
Algorytmy (4) 2000/2001
[email protected]
9
Algorytm znajdywania lidera w zbiorze
Dane: Zbiór X złożony z n elementów {x1, x2, …, xn}
Wynik: Lider l w zbiorze X lub informacja, że X nie zawiera lidera.
• Krok 1:
Przyjmij x1 za lidera l oraz niech c:=1
{Kroki 2-5 stanowią etap wykrywania kandydata na lidera w X}
• Krok 2:
Dla kolejnych wartości i=2, 3, …, n wykonaj kroki 3-5 a
następnie przejdź do kroku 5.
• Krok 3:
Jeśli c=0, to wykonujemy krok 4, a w przeciwnym wypadku
wykonujemy krok 5.
• Krok 4:
{Obieramy nowego kandydata na lidera} Przyjmujemy xi za
lidera l i niech c:=1.
• Krok 5:
{Porównujemy kolejny element zbioru X z kandydatem na
lidera}
– Jeśli xi=l to zwiększamy c o 1 (c:=c+1) {kolejny element jest
równy liderowi}
– W przeciwnym wypadku zmniejszamy c o 1 (c:=c-1) {kolejny
element nie jest równy liderowi - usuwamy go wraz z jedną
krotnością lidera}
Luty 2001
Algorytmy (4) 2000/2001
[email protected]
10
{W krokach 6-8 sprawdzamy, czy l jest rzeczywiście liderem w zbiorze X}
• Krok 6:
Jeśli c=0, to przejdź do kroku 7, a w przeciwnym wypadku
przejdź do kroku 8.
• Krok 7:
Zbiór X nie ma lidera. Zakończ algorytm.
• Krok 8:
Wyznacz, ile razy kandydat na lidera występuje w zbiorze X.
– Jeśli ta liczba jest większa od n/2 to l jest liderem
– W przeciwnym razie ten zbiór nie zawiera lidera.
Złożoność obliczeniowa algorytmu:
• W pierwszym etapie dla każdego elementu zbioru X (za wyjątkiem
pierwszego) jest wykonywane jedno takie działanie jak w kroku 3 lub 5
• W drugim etapie porównywania są wykonywane w kroku 6 (jedno) i w kroku
8 (n+1: n porównań, by obliczyć wielokrotność l w zbiorze X i jedno
porównanie, by sprawdzić, czy ta wielokrotność jest większa od n/2).
• W sumie liczba porównań wynosi (n-1)+(1+n+1)=2n+1
Luty 2001
Algorytmy (4) 2000/2001
[email protected]
11
Luty 2001
Algorytmy (4) 2000/2001
[email protected]
12