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