Luty 2001 Algorytmy (4) 2000/2001

Podobne dokumenty
operacje porównania, a jeśli jest to konieczne ze względu na złe uporządkowanie porównywanych liczb zmieniamy ich kolejność, czyli przestawiamy je.

Wstęp do Informatyki zadania ze złożoności obliczeniowej z rozwiązaniami

Jeszcze o algorytmach

znalezienia elementu w zbiorze, gdy w nim jest; dołączenia nowego elementu w odpowiednie miejsce, aby zbiór pozostał nadal uporządkowany.

Znajdowanie największego i najmniejszego elementu w zbiorze n liczb całkowitych

Jak rozgrywać turnieje tenisowe?

Uwaga: Funkcja zamień(a[j],a[j+s]) zamienia miejscami wartości A[j] oraz A[j+s].

Algorytmy i struktury danych. Wykład 4

Porządek wśród informacji kluczem do szybkiego wyszukiwania

Przykładowe zadania z teorii liczb

Struktury danych i złożoność obliczeniowa Wykład 7. Prof. dr hab. inż. Jan Magott

PROBLEM: SORTOWANIE PRZEZ ODWRÓCENIA METODA: ALGORYTMY ZACHŁANNE

Analiza algorytmów zadania podstawowe

Wszechnica Popołudniowa: Algorytmika i programowanie Porządek wśród informacji kluczem do szybkiego wyszukiwania. Maciej M Sysło

Indukcja matematyczna. Zasada minimum. Zastosowania.

2. FUNKCJE. jeden i tylko jeden element y ze zbioru, to takie przyporządkowanie nazwiemy FUNKCJĄ, lub

Funkcje dwóch zmiennych

Wszechnica Informatyczna: Algorytmika i programowanie Algorytmy poszukiwania i porządkowania. Elementy języka programowania.

1. Liczby wymierne. x dla x 0 (wartością bezwzględną liczby nieujemnej jest ta sama liczba)

Matematyka dyskretna. Andrzej Łachwa, UJ, /15

Jeśli czas działania algorytmu zależy nie tylko od rozmiaru danych wejściowych i przyjmuje różne wartości dla różnych danych o tym samym rozmiarze,

Zadanie 1. Oblicz prawdopodobieństwo, że rzucając dwiema kostkami do gry otrzymamy:

Wykład 1. Na początku zajmować się będziemy zbiorem liczb całkowitych

Zestaw C-11: Organizacja plików: Oddajemy tylko źródła programów (pliki o rozszerzeniach.cpp i.h)!!! Zad. 1: Zad. 2:

Zadania do samodzielnego rozwiązania

Wykład 4. Określimy teraz pewną ważną klasę pierścieni.

Zadanie 1 Przygotuj algorytm programu - sortowanie przez wstawianie.

Algorytmy i Struktury Danych

ALGORYTMY MATEMATYCZNE Ćwiczenie 1 Na podstawie schematu blokowego pewnego algorytmu (rys 1), napisz listę kroków tego algorytmu:

Algorytmy i struktury danych. Co dziś? Tytułem przypomnienia metoda dziel i zwyciężaj. Wykład VIII Elementarne techniki algorytmiczne

Każdy węzeł w drzewie posiada 3 pola: klucz, adres prawego potomka i adres lewego potomka. Pola zawierające adresy mogą być puste.

Wykład 2. Drzewa zbalansowane AVL i 2-3-4

Tadeusz Pankowski

Matematyka dyskretna. Andrzej Łachwa, UJ, /15

Podstawowe algorytmy i ich implementacje w C. Wykład 9

Drzewa spinające MST dla grafów ważonych Maksymalne drzewo spinające Drzewo Steinera. Wykład 6. Drzewa cz. II

Kompresja danych Streszczenie Studia Dzienne Wykład 10,

ALGORYTMY I STRUKTURY DANYCH

DZIAŁANIA NA UŁAMKACH DZIESIĘTNYCH.

Materiały dla finalistów

2 Arytmetyka. d r 2 r + d r 1 2 r 1...d d 0 2 0,

Zestaw zadań dotyczących liczb całkowitych

2. Liczby pierwsze i złożone, jednoznaczność rozkładu na czynniki pierwsze, największy wspólny dzielnik, najmniejsza wspólna wielokrotność.

Informatyka 1. Złożoność obliczeniowa

Wszechnica Popołudniowa: Algorytmika i programowanie Czy wszystko można policzyć na komputerze. Maciej M Sysło

Jarosław Wróblewski Matematyka Elementarna, zima 2012/13

Matematyka Dyskretna Zestaw 2

Matematyka dyskretna. Andrzej Łachwa, UJ, a/15

Złożoność obliczeniowa algorytmu ilość zasobów komputera jakiej potrzebuje dany algorytm. Pojęcie to

Matematyka dyskretna. Andrzej Łachwa, UJ, /14

B.VII USTALANIE KOLEJNOŚCI MIEJSC W TURNIEJACH PZSZACH. q Ustalanie kolejności miejsc (PZSzach) Część B.VII str. 1

Algorytmy i Struktury Danych, 2. ćwiczenia

4. Postęp arytmetyczny i geometryczny. Wartość bezwzględna, potęgowanie i pierwiastkowanie liczb rzeczywistych.

Algorytmy równoległe: ocena efektywności prostych algorytmów dla systemów wielokomputerowych

Luty 2001 Algorytmy (7) 2000/2001

SYSTEMY ROZGRYWEK SPORTOWYCH

Matematyka dyskretna. Andrzej Łachwa, UJ, /10

Uzupełnienia dotyczące zbiorów uporządkowanych (3 lutego 2011).

Algorytmy i Struktury Danych.

; B = Wykonaj poniższe obliczenia: Mnożenia, transpozycje etc wykonuję programem i przepisuję wyniki. Mam nadzieję, że umiesz mnożyć macierze...

D. Miszczyńska, M.Miszczyński KBO UŁ 1 GRY KONFLIKTOWE GRY 2-OSOBOWE O SUMIE WYPŁAT ZERO

TEORETYCZNE PODSTAWY INFORMATYKI

Algorytmy równoległe. Rafał Walkowiak Politechnika Poznańska Studia inżynierskie Informatyka 2010

Kolejka priorytetowa. Często rozważa się kolejki priorytetowe, w których poszukuje się elementu minimalnego zamiast maksymalnego.

Zad. 1 Zad. 2 Zad. 3 Zad. 4 Zad. 5 SUMA

Struktury danych i złożoność obliczeniowa Wykład 5. Prof. dr hab. inż. Jan Magott

Temat 7. Najlżejsze i najcięższe algorytmy sortowania

EGZAMIN - Wersja A. ALGORYTMY I STRUKTURY DANYCH Lisek89 opracowanie kartki od Pani dr E. Koszelew

Systemy rozgrywek sportowych OGÓLNE ZASADY ORGANIZOWANIA ROZGRYWEK SPORTOWYCH

Wrocław, Wstęp do informatyki i programowania: liczby pierwsze. Wydział Matematyki Politechniki Wrocławskiej.

WYŻSZA SZKOŁA INFORMATYKI STOSOWANEJ I ZARZĄDZANIA

Iteracje. Algorytm z iteracją to taki, w którym trzeba wielokrotnie powtarzać instrukcję, aby warunek został spełniony.

Definicja. Ciąg wejściowy: Funkcja uporządkowująca: Sortowanie polega na: a 1, a 2,, a n-1, a n. f(a 1 ) f(a 2 ) f(a n )

Dr inż. Robert Wójcik, p. 313, C-3, tel Katedra Informatyki Technicznej (K-9) Wydział Elektroniki (W-4) Politechnika Wrocławska

MISTRZOSTWA POLSKI MĘŻCZYZN

Jarosław Wróblewski Matematyka Elementarna, lato 2012/13. Czwartek 28 marca zaczynamy od omówienia zadań z kolokwium nr 1.

Jak odróżnić wariację z powtórzeniami od wariacji bez powtórzeń, kombinacji?

Struktury danych i złożoność obliczeniowa Wykład 2. Prof. dr hab. inż. Jan Magott

Algorytmy równoległe: prezentacja i ocena efektywności prostych algorytmów dla systemów równoległych

Zestaw A-1: Organizacja plików: Oddajemy tylko źródła programów (pliki o rozszerzeniach.adb i.ads)!!! Zad. 1: 4,3,3 2,2,1 Zad. 2: 3,3,3 Zad.

1. Liczby naturalne, podzielność, silnie, reszty z dzielenia

Największy wspólny dzielnik Algorytm Euklidesa (także rozszerzony) WZAiP1: Chińskie twierdzenie o resztach

Wysokość drzewa Głębokość węzła

Algebra Liniowa 2 (INF, TIN), MAP1152 Lista zadań

Strategia "dziel i zwyciężaj"

Mecz Matematyczny. Rozwiązania 11 marca 2016

2. Liczby pierwsze i złożone, jednoznaczność rozkładu na czynniki pierwsze, największy wspólny dzielnik, najmniejsza wspólna wielokrotność. (c.d.

Podstawą w systemie dwójkowym jest liczba 2 a w systemie dziesiętnym liczba 10.

Indukcja matematyczna. Matematyka dyskretna

Sortowanie przez wstawianie Insertion Sort

Wymagania na egzamin poprawkowy z matematyki z zakresu klasy pierwszej TECHNIKUM

Matematyczne Podstawy Informatyki

Indukcja. Materiały pomocnicze do wykładu. wykładowca: dr Magdalena Kacprzak

Zaawansowane algorytmy i struktury danych

Liczby rzeczywiste. Działania w zbiorze liczb rzeczywistych. Robert Malenkowski 1

WYSZUKIWANIE I PORZĄDKOWANIE INFORMACJI

Programowanie w VB Proste algorytmy sortowania

Ćwiczenie 3 z Podstaw programowania. Język C++, programy pisane w nieobiektowym stylu programowania. Zofia Kruczkiewicz

Nazwa rachunku: Polski Związek Golfa Al. Jerozolimskie 65/ Warszawa

Transkrypt:

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. 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. 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! 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=2 k, gdzie k jest liczbą poziomów drzewa. k=log 2 n Liczba porównań wyniesie: (n-1)+(log 2 n-1)=n+log 2 n-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. 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. 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: Znajdujemy max w zbiorze M Krok 3: Znajdujemy min w zbiorze N Krok 4: Jeśli n jest nieparzyste, to: jeśli z<min to za min przyjmujemy z jeśli z>max to za max przyjmujemy z. 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. 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.) 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. 9

Algorytm znajdywania lidera w zbiorze Dane: Zbiór X złożony z n elementów {x 1, x 2,, x n } Wynik: Lider l w zbiorze X lub informacja, że X nie zawiera lidera. Krok 1: Przyjmij x 1 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 x i za lidera l i niech c:=1. Krok 5: {Porównujemy kolejny element zbioru X z kandydatem na lidera} Jeśli x i =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} 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 11

12