KOPCE KOLEJKI PRIORYTETOWE - PRZYPOMNIENIE KOPCE WYSOKOŚĆ KOPCA KOPCE I KOLEJKI PRIORYTETOWE PROJEKTOWANIE ALGORYTMÓW I METODY SZTUCZNEJ INTELIGENCJI
|
|
- Wiktoria Wieczorek
- 5 lat temu
- Przeglądów:
Transkrypt
1 PROJEKTOWANIE ALGORYTMÓW I METODY SZTUCZNEJ INTELIGENCJI KOPCE, ALGORYTMY SORTOWANIA KOPCE Wykład dr inż. Łukasz Jeleń Na podstawie wykładów dr. T. Fevensa KOLEJKI PRIORYTETOWE - PRZYPOMNIENIE Możemy wykorzystać kolejkę priorytetową do posortowania zbioru porównywalnych Algorytm PriorityQueueSort(S, P) Wejście: sekwencja S, kolejka elementów priorytetowa P wykorzystująca. Pojedynczo umieść elementy w metodę całkowitego uporządkowania kolejce kluczy. Usuń elementy z wykorzystaniem Output: posortowana sekwencja S z serii operacji removemin zastosowaniem metody całkowitego uporządkowania Nieposortowana lista prowadzi do while!s.isempty() do sortowania przez wybór: e S.removeFirst () czas O(n ) P.insert (e, null) Posortowana lista prowadzi do sortowania while!p.isempty() do przez wstawianie: e P.removeMin().getKey() czas O(n ) S.addLast(e) Czy możemy sortować szybciej? KOPCE Kopiec jest drzewem binarnym, które w węzłach przechowuje klucze i spełnia następujące właściwości: Ostatni węzeł kopca jest węzłem najbardziej po prawej na poziomie h Właściwość kopca: dla każdego węzła wewnętrznego v, różnego od korzenia klucz(v) klucz(ojciec(v)) Pełne drzewo binarne: niech h będzie wysokością kopca i dla i =,, h, istnieje węzłów o poziomie i na poziomie h, węzły wewnętrzne są na lewo od węzła zewnętrznego Ostatni węzeł WYSOKOŚĆ KOPCA KOPCE I KOLEJKI PRIORYTETOWE Twierdzenie: Kopiec przechowujący n kluczy ma wysokość O(log n) Dowód: (wykorzystamy właściwość kompletnego drzewa binarnego) Niech h będzie wysokością kopca przechowującego n kluczy i Ponieważ mamy kluczy na poziomie i =,, h- i przynajmniej jeden klucz na poziomie h, mamy h- n h zatem n, tj. h log n Możemy wykorzystać kopiec do zaimplementowania kolejki priorytetowej Będziemy przechowywać (klucz, wartość) element w każdym węźle wewnętrznym Będziemy śledzić pozycję ostatniego węzła Dla uproszczenia na schematach będziemy pokazywać tylko klucze poziom klucze h h h (, Alicja) (, Piotr) (, Jan) (, Marek) (, Anna)
2 WSTAWIANIE ELEMENTÓW DO KOPCA Metoda insert(k, x) w kolejce priorytetowej odnosi się do wstawienia klucza k do kopca Algorytm wstawiania składa się z trzech kroków: Znajdź pozycję dla nowego węzła z (nowy ostatni węzeł) Przenieś k do z Przywróć właściwość kopca (za chwilę ) z wstawiany węzeł z ALGORYTM UPHEAP Po umieszczeniu nowego klucza k właściwość kopca może nie być zachowana Algorytm upheap przywraca właściwość kopca poprzez zamianę k w górę kopca rozpoczynając od wstawianego węzła. Algorytm kończy działanie jeśli klucz k dojdzie do korzenia lub do węzła, którego ojciec posiada klucz mniejszy lub równy k Ponieważ kopiec posiada wysokość O(log n), upheap działa w czasie O(log n) z z USUWANIE ELEMENTU Z KOPCA Metoda kolejki priorytetowej removemin() odnosi się do usuwania klucza w korzeniu kopca. Algorytm usuwający składa się z trzech kroków: Zastąp klucz korzenia kluczem ostatniego węzła w Usuń w Przywróć właściwość kopca (za chwilę ) w w ostatni węzeł nowy ostatni węzeł ALGORYTM DOWNHEAP Po zamianie klucza w korzeniu z kluczem k ostatniego węzła właściwość kopca może nie być zachowana Algorytm downheap przywraca właściwość kopca poprzez zamianę k w dół kopca rozpoczynając od korzenia. Algorytm kończy działanie jeśli klucz k dojdzie do liścia lub do węzła, którego synowie posiadają klucze mniejsze lub równe k. Ponieważ kopiec posiada wysokość O(log n), downheap działa w czasie O(log n) w w UAKTUALNIANIE OSTATNIEGO WĘZŁA SORTOWANIE PRZEZ KOPCOWANIE Pozycja węzła wstawianego może zostać wyznaczona poprzez wyznaczenie ścieżki dla O(log n) węzłów Jeśli ostatni węzeł jest lewym synem, to wróć do ojca Dopóki bieżący węzeł jest prawym synem, idź do ojca Jeśli bieżący węzeł jest lewym synem, idź do prawego syna Dopóki bieżący węzeł jest wewnętrzny, idź do lewego syna Weźmy pod uwagę kolejkę priorytetową z n elementami zaimplementowaną za pomocą kopca Zajmowane miejsce to O(n) metody wstaw i removemin zabierają O(log n) czasu metody size, isempty i min zabierają O() czasu Zastosowanie kolejki bazującej na kopcu pozwala nam posortować listę n-elementową w czasie O(n log n) Otrzymany algorytm jest nazywany sortowaniem przez kopcowanie Sortowanie to jest znacznie szybsze niż algorytmy sortujące w czasie kwadratowym jak sortowanie przez wybór i przez wstawianie
3 KOPIEC BAZUJĄCY NA TABLICY ŁĄCZENIE DWÓCH KOPCÓW Możemy przedstawić kopiec za pomocą tablicy o długości n + Dla węzła o indeksie i lewy syn znajduje się na indeksie i prawy syn znajduje się na indeksie i + Linki między węzłami nie są przechowywane w sposób bezpośredni Komórka o indeksie nie jest wykorzystywana Operacje wstawiania odpowiada zapisowi na indeksie n + Operacja removemin odpowiada usunięciu elementu na indeksie n Może być stosowana do sortowania przez kopcowanie in-situ Mamy dane dwa kopce i klucz k Tworzymy nowy kopiec z korzeniem zawierającym k i z dwoma kopcami jako poddrzewa Stosujemy technikę downheap do przywrócenia właściwości kopca TWORZENIE KOPCA TECHNIKĄ OD DOŁU DO GÓRY (BOTTOM-UP) Możemy zbudować kopiec przechowujący n kluczy z zastosowaniem techniki bottomup składającej się z log n kroków W kroku i, para kopców z i kluczami jest łączona w jeden kopiec z i+ kluczami i i i+
4 - KONIEC ANALIZA Zobrazujemy najgorszy czas techniki downheap za pomocą zastępczej ścieżki, która na początku idzie na prawo, a następnie systematycznie idzie w lewo do momentu zejścia na dół kopca (może się różnić od typowej ścieżki downheap Ponieważ każdy węzeł jest odwiedzany maksymalnie razy, całkowita ilość węzłów w ścieżce zastępczej wynosi O(n). Zatem budowa kopca techniką bottom - up zajmuje czas O(n). Technika ta jest szybsza od wykonania n wstawień do kolejki i dlatego pozwala na przyspieszenie pierwszej fazy sortowania przez kopcowanie Mając daną tablicę integerów, A = {,,,,,,,,,,, }, stwórz kopiec H z zastosowaniem techniki bottom-up Rozpoczniemy od przedstawienia tablicy integerów jako kompletne drzewo ( zakładając, że pozycja o indeksie jest pusta): Należy zastosować algorytm downheap poziom po poziomie: Należy zastosować algorytm downheap poziom po poziomie: Należy zastosować algorytm downheap poziom po poziomie:
5 Należy zastosować algorytm downheap poziom po poziomie: Otrzymany kopiec: Wykorzystując kopiec z poprzedniego przykładu wywołaj H.removeMin(). Zamieniamy korzeń z ostatnim węzłem zewnętrznym: Rozpoczniemy od przedstawienia tablicy integerów jako kompletne drzewo zachowując właściwość kopca: przechowaj kopię klucza Teraz należy przeprowadzić downheap poziom po poziomie aby naprawić pozycję : Wykorzystując poprzedni kopiec wywołaj H.insert(). Rozpoczniemy od przedstawienia tablicy integerów jako kompletne drzewo
6 Należy umieścić w nowym węźle zewnętrznym: Teraz należy przeprowadzić operację upheap w celu naprawienia pozycji. Mając daną tablicę n integerów A, podaj algorytm wyznaczający k najmniejszych integerów w czasie mniejszym od O(n log n) dla k << n. Mając daną tablicę n integerów A, podaj algorytm wyznaczający k najmniejszych integerów w czasie mniejszym od O(n log n) dla k << n. int smalest(int A[], int k) { Stwórz kopiec H z zastosowaniem bottom-up // złożoność obliczeniowa O(n) for i to k do wyświetl H.removeMin(); // złożoność O(k log n) } SORTOWANIA SORTOWANIE PRZEZ SCALANIE
7 TECHNIKA DZIEL I ZWYCIĘŻAJ SORTOWANIE PRZEZ SCALANIE Dziel i zwyciężaj jest ogólnym paradygmatem projektowania algorytmów: Podział: podziel dane wejściowe S na dwa rozłączne podzbiory S i S Rekurencja: rozwiąż problem dla S i S Scalanie: połącz rozwiązania dla S i S w jedno rozwiązanie dla S Krokiem podstawowym rekurencji są podproblemy o rozmiarze lub Sortowanie przez scalanie jest algorytmem sortującym bazującym na technice dziel i zwyciężaj Podobnie jak dla sortowania kopcowego wykorzystuje komparator Posiada złożoność O(n log n) Inaczej niż dla sortowania kopcowego Nie wykorzystuje zewnętrznej kolejki priorytetowej Pobiera dane w sposób sekwencyjny (odpowiedni do sortowania danych na dysku zewnętrznym) Algorytm mergesort(s, C) Sortowanie przez scalanie listy S Wejście lista S z n elementami, zawierającej n elementów składa komparator C Wyjście lista S posortowana się z trzech kroków: zgodnie z komparatorem C Podział: podział S na dwie if S.size() > (S, S ) podziel(s, n/) sekwencje S i S zawierającymi mergesort(s, C) ok. n/ elementów każda mergesort(s, C) S pusta lista Rekurencja: posortuj połącz(s, S, S) rekurencyjnie S i S return S Scalanie: połącz S i S w jedną & n % # n! posortowaną listę S = and S = #! #! $ " ŁĄCZENIE DWÓCH POSORTOWANYCH SEKWENCJI Ostatni krok sortowania przez scalanie składa się ze scalania dwóch posortowanych sekwencji S i S zaimplementowanych jako lista w jedną posortowaną sekwencję S zawierającą połączenie elementów z S i S Scalanie dwóch posortowanych sekwencji zawierających po n/ elementów i zaimplementowane z zastosowaniem listy dwukierunkowej zabiera O(n) czasu Algorytm merge(s, S, S) Wejście sekwencje S i S zawierające po n/ elementów, pusta sekwencja S Wyjście posortowana sekwencja S: S S while ~S.isEmpty() ~S.isEmpty() if S.first().element() S.first().element() S.addLast(S.remove(S.first())) else S.addLast(S.remove(S.first())) while ~S.isEmpty() S.addLast(S.remove(S.first())) while ~S.isEmpty() S.addLast(S.remove(S.first())) DRZEWO SORTOWANIA PRZEZ SCALANIE Działanie sortowania przez scalanie jest zobrazowane przez drzewo binarne każdy węzeł reprezentuje wywołanie rekurencyjne sortownia i zawiera nieposortowaną sekwencję przez wywołaniem i podziałem posortowaną sekwencję po zakończeniu wywołania korzeń jest początkowym wywołaniem liście są wywołaniami podsekwencji o rozmiarze lub Podział Wywołanie rekurencyjne, podział
8 Wywołanie rekurencyjne, podział Wywołanie rekurencyjne, podział Wywołanie rekurencyjne, krok podstawowy Scalanie Wywołanie rekurencyjne,, krok podstawowy, scalanie Scalanie
9 Wywołanie rekurencyjne,, krok podstawowy, scalanie Scalanie ANALIZA SORTOWANIA PRZEZ SCALANIE PODSUMOWANIE ALGORYTMÓW SORTOWANIA Wysokość drzewa sortowania to O(log n) przy każdym wywołaniu rekurencyjnym dzielimy sekwencję na pół Ilość operacji wykonywanych na węzłach na poziomie i to O(n) dzielimy i scalmy i sekwencji o rozmiarze n/ i wykonujemy i+ wywołań rekurencyjnych Zatem, całkowita złożoność obliczeniowa sortownia przez scalanie wynosi O(n log n) poziom #sekw rozmiar n n/ i i n/i Algorytm Złożoność Uwagi przez wybór O(n ) przez wstawianie O(n ) przez kopcowanie O(n log n) przez scalanie O(n log n) wolne in-situ dla małych tablic (< K) wolne in-situ dla małych tablic (< K) szybkie in-situ (impl. na tablicy) dla średnich tablic (K M) szybkie sekwencyjny dostęp do danych dla b. dużych tablic (> M) SORTOWANIE SZYBKIE SORTOWANIE SZYBKIE Sortowanie szybkie jest (losowym) algorytmem sortującym bazującym na technice dziel i zwyciężaj: Podział: wybierz losowy element x (nazywany piwotem) i podziel S na L - elementy mniejsze od x E - elementy równe x G - elementy większe od x Rekurencja: posortuj L i G Scalanie: połącz L, E i G L E x x x G
10 PODZIAŁ DRZEWO SORTOWANIA Dzielimy sekwencję wejściową w następujący sposób: Usuwamy element y z S i Wstawiamy y do L, E lub G w zależności od porównania z piwotem x Wszystkie operacje wstawiania i usuwania wykonywane są na początku lub na końcu sekwencji, a zatem ich czas działania wynosi O() Zatem czas działania kroku dzielącego sortowania szybkiego wyniesie O(n) Algorytm partition(s, p) Wejście sekwencja S, pozycja p piwota Wyjście podsekwencje L, E, G z elementami z S mniejszymi, równymi, lub większymi od piwota L, E, G puste sekwencje x S.remove(p) while ~S.isEmpty() y S.remove(S.first()) if y < x L.addLast(y) else if y = x E.addLast(y) else { y > x } G.addLast(y) return L, E, G Działanie sortowania szybkiego może być zilustrowane za pomocą drzewa binarnego Każdy węzeł reprezentuje wywołanie rekurencyjne i przechowuje: Nieposortowaną sekwencję przed wywołaniem oraz piwot Posortowaną sekwencję po wywołaniu Korzeń jest wywołaniem pierwotnym Liście są wywołaniami podsekwencji o rozmiarze lub Wybór piwota Podział, wywołanie rekurencyjne, wybór piwota Podział, wywołanie rekurencyjne, wybór piwota Wywołanie rekurencyjne,, krok podstawowy, scalanie
11 Wywołanie rekurencyjne, wybór piwota Podział, wywołanie rekurencyjne, wybór piwota Scalanie, scalanie NAJGORSZA ZŁOŻONOŚĆ OBLICZENIOWA Z najgorszym czasem sortowania szybkiego mamy do czynienia, gdy piwot jest unikalnym minimalnym lub maksymalnym elementem Jedna z list L i G ma rozmiar n, a druga ma rozmiar Złożoność obliczeniowa jest proporcjonalna do sumy: n + (n ) Zatem najgorszy czas tego sortowania to O(n ) poziom czas n n n OCZEKIWANA ZŁOŻONOŚĆ OBLICZENIOWA Rozważmy wywołanie rekurencyjne sortowania szybkiego na sekwencji o rozmiarze s Dobre wywołanie: rozmiary L i G są mniejsze od s/ Złe wywołanie: jedna z sekwencji ma rozmiar większy niż s/ Wywołanie jest dobre z prawdopodobieństwem / / z możliwych piwotów skutkuje dobrym wywołaniem Dobre wywołanie Złe piwoty Złe wywołanie Dobre piwoty Złe piwoty OCZEKIWANA ZŁOŻONOŚĆ OBLICZENIOWA Fakt probabilistyczny: Oczekiwana ilość rzutów monetą wymagana do wyrzucenia k reszek wynosi k Dla węzła na poziomie i, możemy oczekiwać: i/ potomków będzie dobrym wywołaniem Rozmiar sekwencji wejściowej dla danego wywołania wynosi najwyżej (/) i/ n Mamy zatem: Dla węzła o poziomie log / n, oczekiwany rozmiar wejścia to jeden Oczekiwana wysokość drzewa sortowania to O(log n) Ilość obliczeń wykonywanych w węzłach o tym samym poziomie wynosi O(n) Zatem oczekiwana złożoność obliczeniowa sortowania szybkiego jest w O(n log n) expected height O(log n) s(a) s(r) s(b) s(c) s(d) s(e) s(f) time per level O(n) O(n) O(n) total expected time: O(n log n)
12 SORTOWANIE SZYBKIE IN-SITU Sortowanie szybkie może być zaimplementowane techniką in-situ. W kroku dzielącym zmodyfikujemy operacje tak, aby przeorganizować elementy w tablicy w taki sposób, że elementy <= piwot będą posiadały indeks < l piwot posiada indeks l elementy >= piwot będą posiadały indeks > l Wywołanie rekurencyjne będzie zawierać elementy z indeksami < l elementy z indeksami > l Algorytm inplacequicksort(s, a, b) Wejście lista S, indeksy a i b Wyjście lista S z elementami o indeksach między a i b przeorganizowana w sposób rosnący if a b return i losowy integer między a i b S.swapElements(i, b) {piwot na końcu} l inplacepartition(a, b) inplacequicksort(s, a, l ) inplacequicksort(s, l +, b) PODZIAŁ IN-SITU Najpierw należy wybrać piwot na indeksie i między a i b. a Zamień piwot z elementem na indeksie b. Umieść indeks startowy I na indeksie a, a indeks r na indeksie b-. l i r b (piwot = ) (piwot = ) PODZIAŁ IN-SITU PODZIAŁ IN-SITU Dokonaj podziału z zastosowaniem dwóch indeksów do rozdzielenia S na L i G (pozostałe wartości = piwot mogą się znajdować zarówno w L jak i w G). l r Powtarzaj dopóki l i r się nie przetną: Przeskanuj indeksy w prawo aż do odnalezienia elementu > x. Przeskanuj r w lewo aż do odnalezienia elementu < x. Jeśli l < r, zamień elementy na indeksach l i r l r (piwot = ) Kiedy l i r miną się w taki sposób, że l > r, możemy zamienić piwot z elementem na pozycji l r l a Wywołaj krok rekurencyjny dla podsekwencji od indeksu a do l- i podsekwencji dla indeksów l+ do b a l- l l+ b b PODSUMOWANIE ALGORYTMÓW SORTOWANIA Algorytm Czas Uwagi przez wybór O(n ) przez wstawianie O(n ) szybkie O(n log n) oczekiwany O(n ) najgorszy in-situ wolne (dobre dla małych wejść) in-situ wolne (dobre dla małych wejść) in-situ, losowe najszybsza (dobra dla dużych danych) SORTOWANIE KUBEŁKOWE I POZYCYJNE przez kopcownie O(n log n) przez scalanie O(n log n) in-situ szybka (dobra dla dużych danych) sekwencyjny dostęp do danych szybka (dobra dla b. dużych danych) B, c, a, b, d, g, e
13 SORTOWANIE KUBEŁKOWE Niech S będzie sekwencją n wpisów (klucz, wartość) z kluczami w przedziale [, N ] Sortowanie kubełkowe (Bucket-sort) wykorzystuje klucze jako indeksy w zewnętrznej tablicy B sekwencji (kubełki) Faza : Przenosimy wszystkie wpisy (k,o) S do kubła B[k] Faza : Dla i =,, N, przenieś wpisy kubła B[i] na koniec sekwencji S Analiza: Faza zabiera O(n) Faza zabiera O(n + N) Sortowanie kubełkowe zabiera czas O(n + N) Algorytm bucketsort(s, N) Wejście lista S z wpisami o kluczach w przedziale [, N ] Wyjście sekwencja S posortowana rosnąco względem kluczy B tablica z N pustymi sekwencjami for każda pozycja p w S do e S.remove(p) k e.getkey() B[k].addLast(e) for i to N for każdy wpis e w B[i] do p B[i].first() e B[i].remove(p) S.addLast(e) Zakres kluczy [, ] B, d, c, a, g, b, e Faza, c, a, b, d, g, e Faza, c, a, b, d, g, e WŁAŚCIWOŚCI I ROZSZERZENIA UPORZĄDKOWANIE LEKSYKOGRAFICZNE Właściwości typu kluczy Klucze są wykorzystywane jako indeksy tablicy i nie mogą być dowolnymi obiektami Brak zewnętrznego komparatora Właściwość stałości sortowania Relatywne uporządkowanie dowolnych dwóch wpisów o tym samym kluczu jest zachowane po zakończeniu działania algorytmu Rozszerzenia Klucze są integerami w przedziale [a, b] Umieść wpis (k, o) w kuble B[k a] Klucze z łańcuchami znakowymi ze zbioru D możliwych łańcuchów, gdzie D ma stały rozmiar (e.g., nazwy krajów członkowskich UE) Posortuj D i wyznacz indeks r(k) dla każdego łańcucha k w D w posortowanej sekwencji Umieść wpis (k,o) w kuble B[r(k)] d-krotka jest sekwencją d kluczy (k, k,, k d ), gdzie klucz k i będzie i-tym wymiarem krotki Przykład: Współrzędne Kartezjańskie punktu w przestrzeni są -krotką Uporządkowanie leksykograficzne dwóch d-krotek jest zdefiniowane rekurencyjnie w następujący sposób: (x, x,, xd) < (y, y,, yd) x < y x = y (x,, xd) < (y,, yd) Tzn., krotki są porównywane z przez pierwszy wymiar, potem przez drugi, itd. SORTOWANIE LEKSYKOGRAFICZNE SORTOWANIE POZYCYJNE Niech C i będzie komparatorem, który porównuje dwie krotki Niech stablesort(s, C) będzie stałym algorytmem sortowania wykorzystującym komparator C Sortowanie leksykograficzne sortuje sekwencję d-krotek w sposób leksykograficzny poprzez wywołanie d razy algorytmu stablesort. Raz dla każdego wymiaru. Sortowanie leksykograficzne działa w czasie O(dT(n)), gdzie T(n) jest czasem działania stablesort Algorytm lexicographicsort(s) Wejście sekwencja S z d-krotkami Wyjście sekwencja S posortowana leksykograficznie for i d downto stablesort(s, C i ) Przykład: (,,) (,,) (,,) (,, ) (,, ) (,, ) (,, ) (,,) (,,) (,,) (,, ) (,,) (,, ) (,,) (,,) (,, ) (,,) (,, ) (,,) (,,) Sortowanie pozycyjne jest specyficzną odmianą sortowania leksykograficznego, które wykorzystuje sortowanie kubełkowe jako algorytm sortowania stałego. Sortowanie pozycyjne ma zastosowanie do krotek, których klucze w każdym wymiarze są integerami w przedziale [, N ] Sortowanie pozycyjne działa w czasie O(d( n + N)) Algorytm radixsort(s, N) Wejście sekwencja S z d-krotkami takie, że (,, ) (x,, x d ) i (x,, x d ) (N,, N ) dla każdej krotki (x,, x d ) w S Wyjście sekwencja S posortowana leksykograficznie for i d downto bucketsort(s, N)
14 SORTOWANIE POZYCYJNE DLA LICZB BINARNYCH Posortuj podane wartości z zastosowaniem sortowania pozycyjnego: {,,,,, } Rozważ sekwencję n-bitowyh integerów x = x b x x Reprezentujemy każdy element jako b- krotkę integerów z przedziału [, ] i zastosujemy sortowanie pozycyjne z N = Ta modyfikacja algorytmu pozycyjnego działa w czasie O(bn) Dla przykładu, możemy posortować sekwencję -bitowych integerów w liniowym czasie Algorytm binaryradixsort(s) Wejście sekwencja S z b- bitowymi integerami Wyjście posortowana sekwencja S zamień każdy element x z S z elementem (, x) for i to b zamień klucz k każdego elementu (k, x) w S z bitem x i bucketsort(s, ) Sortowanie sekwencji -bitowych integerów
Algorytmy i Struktury Danych
Algorytmy i Struktury Danych Kopce Bożena Woźna-Szcześniak bwozna@gmail.com Jan Długosz University, Poland Wykład 11 Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych Wykład 11 1 / 69 Plan wykładu
Bardziej szczegółowoRekurencja. Dla rozwiązania danego problemu, algorytm wywołuje sam siebie przy rozwiązywaniu podobnych podproblemów. Przykład: silnia: n! = n(n-1)!
Rekurencja Dla rozwiązania danego problemu, algorytm wywołuje sam siebie przy rozwiązywaniu podobnych podproblemów. Przykład: silnia: n! = n(n-1)! Pseudokod: silnia(n): jeżeli n == 0 silnia = 1 w przeciwnym
Bardziej szczegółowoStrategia "dziel i zwyciężaj"
Strategia "dziel i zwyciężaj" W tej metodzie problem dzielony jest na kilka mniejszych podproblemów podobnych do początkowego problemu. Problemy te rozwiązywane są rekurencyjnie, a następnie rozwiązania
Bardziej szczegółowoZASADY PROGRAMOWANIA KOMPUTERÓW ZAP zima 2014/2015. Drzewa BST c.d., równoważenie drzew, kopce.
POLITECHNIKA WARSZAWSKA Instytut Automatyki i Robotyki ZASADY PROGRAMOWANIA KOMPUTERÓW ZAP zima 204/205 Język programowania: Środowisko programistyczne: C/C++ Qt Wykład 2 : Drzewa BST c.d., równoważenie
Bardziej szczegółowoSortowanie. Kolejki priorytetowe i algorytm Heapsort Dynamiczny problem sortowania:
Sortowanie Kolejki priorytetowe i algorytm Heapsort Dynamiczny problem sortowania: podać strukturę danych dla elementów dynamicznego skończonego multi-zbioru S, względem którego są wykonywane następujące
Bardziej szczegółowoWykład 2. Drzewa zbalansowane AVL i 2-3-4
Wykład Drzewa zbalansowane AVL i -3-4 Drzewa AVL Wprowadzenie Drzewa AVL Definicja drzewa AVL Operacje wstawiania i usuwania Złożoność obliczeniowa Drzewa -3-4 Definicja drzewa -3-4 Operacje wstawiania
Bardziej szczegółowoKolejka priorytetowa. Często rozważa się kolejki priorytetowe, w których poszukuje się elementu minimalnego zamiast maksymalnego.
Kolejki Kolejka priorytetowa Kolejka priorytetowa (ang. priority queue) to struktura danych pozwalająca efektywnie realizować następujące operacje na zbiorze dynamicznym, którego elementy pochodzą z określonego
Bardziej szczegółowoSortowanie bąbelkowe
1/98 Sortowanie bąbelkowe (Bubble sort) prosty i nieefektywny algorytm sortowania wielokrotnie przeglądamy listę elementów, porównując dwa sąsiadujące i zamieniając je miejscami, jeśli znajdują się w złym
Bardziej szczegółowoSortowanie. Bartman Jacek Algorytmy i struktury
Sortowanie Bartman Jacek jbartman@univ.rzeszow.pl Algorytmy i struktury danych Sortowanie przez proste wstawianie przykład 41 56 17 39 88 24 03 72 41 56 17 39 88 24 03 72 17 41 56 39 88 24 03 72 17 39
Bardziej szczegółowoSortowanie - wybrane algorytmy
Sortowanie - wybrane algorytmy Aleksandra Wilkowska Wydział Matematyki - Katedra Matematyki Stosowanej Politechika Wrocławska 2 maja 2018 1 / 39 Plan prezentacji Złożoność obliczeniowa Sortowanie bąbelkowe
Bardziej szczegółowoAlgorytmy sortujące i wyszukujące
Algorytmy sortujące i wyszukujące Zadaniem algorytmów sortujących jest ułożenie elementów danego zbioru w ściśle określonej kolejności. Najczęściej wykorzystywany jest porządek numeryczny lub leksykograficzny.
Bardziej szczegółowoAnaliza algorytmów zadania podstawowe
Analiza algorytmów zadania podstawowe Zadanie 1 Zliczanie Zliczaj(n) 1 r 0 2 for i 1 to n 1 3 do for j i + 1 to n 4 do for k 1 to j 5 do r r + 1 6 return r 0 Jaka wartość zostanie zwrócona przez powyższą
Bardziej szczegółowoAlgorytmy i Struktury Danych, 2. ćwiczenia
Algorytmy i Struktury Danych, 2. ćwiczenia 2017-10-13 Spis treści 1 Optymalne sortowanie 5 ciu elementów 1 2 Sortowanie metodą Shella 2 3 Przesunięcie cykliczne tablicy 3 4 Scalanie w miejscu dla ciągów
Bardziej szczegółowoWykład 8. Drzewa AVL i 2-3-4
Wykład 8 Drzewa AVL i 2-3-4 1 Drzewa AVL Ø Drzewa AVL Definicja drzewa AVL Operacje wstawiania i usuwania Złożoność obliczeniowa Ø Drzewa 2-3-4 Definicja drzewa 2-3-4 Operacje wstawiania i usuwania Złożoność
Bardziej szczegółowoWykład 5. Sortowanie w czasie liniowologarytmicznym
Wykład 5 Sortowanie w czasie liniowologarytmicznym 1 Sortowanie - zadanie Definicja (dla liczb): wejście: ciąg n liczb A = (a 1, a 2,, a n ) wyjście: permutacja (a 1,, a n ) taka, że a 1 a n 2 Zestawienie
Bardziej szczegółowoPodstawowe algorytmy i ich implementacje w C. Wykład 9
Wstęp do programowania 1 Podstawowe algorytmy i ich implementacje w C Bożena Woźna-Szcześniak bwozna@gmail.com Jan Długosz University, Poland Wykład 9 Element minimalny i maksymalny zbioru Element minimalny
Bardziej szczegółowoWykład 3. Złożoność i realizowalność algorytmów Elementarne struktury danych: stosy, kolejki, listy
Wykład 3 Złożoność i realizowalność algorytmów Elementarne struktury danych: stosy, kolejki, listy Dynamiczne struktury danych Lista jest to liniowo uporządkowany zbiór elementów, z których dowolny element
Bardziej szczegółowoAlgorytmy i struktury danych Sortowanie IS/IO, WIMiIP
Algorytmy i struktury danych Sortowanie IS/IO, WIMiIP Danuta Szeliga AGH Kraków Spis treści I 1 Wstęp 2 Metody proste 3 Szybkie metody sortowania 4 Algorytmy hybrydowe Sortowanie hybrydowe Sortowanie introspektywne
Bardziej szczegółowoPorządek symetryczny: right(x)
Porządek symetryczny: x lef t(x) right(x) Własność drzewa BST: W drzewach BST mamy porządek symetryczny. Dla każdego węzła x spełniony jest warunek: jeżeli węzeł y leży w lewym poddrzewie x, to key(y)
Bardziej szczegółowoZadanie 1 Przygotuj algorytm programu - sortowanie przez wstawianie.
Sortowanie Dane wejściowe: ciąg n-liczb (kluczy) (a 1, a 2, a 3,..., a n 1, a n ) Dane wyjściowe: permutacja ciągu wejściowego (a 1, a 2, a 3,..., a n 1, a n) taka, że a 1 a 2 a 3... a n 1 a n. Będziemy
Bardziej szczegółowoPodstawy programowania 2. Temat: Drzewa binarne. Przygotował: mgr inż. Tomasz Michno
Instrukcja laboratoryjna 5 Podstawy programowania 2 Temat: Drzewa binarne Przygotował: mgr inż. Tomasz Michno 1 Wstęp teoretyczny Drzewa są jedną z częściej wykorzystywanych struktur danych. Reprezentują
Bardziej szczegółowoDrzewa poszukiwań binarnych
1 Cel ćwiczenia Algorytmy i struktury danych Instytut Sterowania i Systemów Informatycznych Wydział Elektrotechniki, Informatyki i Telekomunikacji Uniwersytet ielonogórski Drzewa poszukiwań binarnych Ćwiczenie
Bardziej szczegółowoWSTĘP DO INFORMATYKI. Drzewa i struktury drzewiaste
Akademia Górniczo-Hutnicza Wydział Elektrotechniki, Automatyki, Informatyki i Inżynierii Biomedycznej WSTĘP DO INFORMATYKI Adrian Horzyk Drzewa i struktury drzewiaste www.agh.edu.pl DEFINICJA DRZEWA Drzewo
Bardziej szczegółowoWstęp do programowania
Wstęp do programowania Stosy, kolejki, drzewa Paweł Daniluk Wydział Fizyki Jesień 2013 P. Daniluk(Wydział Fizyki) WP w. VII Jesień 2013 1 / 25 Listy Lista jest uporządkowanym zbiorem elementów. W Pythonie
Bardziej szczegółowoAlgorytm selekcji Hoare a. Łukasz Miemus
Algorytm selekcji Hoare a Łukasz Miemus 1 lutego 2006 Rozdział 1 O algorytmie 1.1 Problem Mamy tablicę A[N] różnych elementów i zmienną int K, takie że 1 K N. Oczekiwane rozwiązanie to określenie K-tego
Bardziej szczegółowoPodstawy Informatyki. Metody dostępu do danych
Podstawy Informatyki c.d. alina.momot@polsl.pl http://zti.polsl.pl/amomot/pi Plan wykładu 1 Bazy danych Struktury danych Średni czas odszukania rekordu Drzewa binarne w pamięci dyskowej 2 Sformułowanie
Bardziej szczegółowoProgramowanie w VB Proste algorytmy sortowania
Programowanie w VB Proste algorytmy sortowania Sortowanie bąbelkowe Algorytm sortowania bąbelkowego polega na porównywaniu par elementów leżących obok siebie i, jeśli jest to potrzebne, zmienianiu ich
Bardziej szczegółowoAlgorytmy i Struktury Danych.
Algorytmy i Struktury Danych. Metoda Dziel i zwyciężaj. Problem Sortowania, cd. Bożena Woźna-Szcześniak bwozna@gmail.com Jan Długosz University, Poland Wykład 2 Bożena Woźna-Szcześniak (AJD) Algorytmy
Bardziej szczegółowoAlgorytmy i struktury danych
Algorytmy i struktury danych Zaawansowane algorytmy sortowania Witold Marańda maranda@dmcs.p.lodz.pl 1 Sortowanie za pomocą malejących przyrostów metoda Shella Metoda jest rozwinięciem metody sortowania
Bardziej szczegółowoWysokość drzewa Głębokość węzła
Drzewa Drzewa Drzewo (ang. tree) zbiór węzłów powiązanych wskaźnikami, spójny i bez cykli. Drzewo posiada wyróżniony węzeł początkowy nazywany korzeniem (ang. root). Drzewo ukorzenione jest strukturą hierarchiczną.
Bardziej szczegółowoDefinicja. 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 )
SORTOWANIE 1 SORTOWANIE Proces ustawiania zbioru elementów w określonym porządku. Stosuje się w celu ułatwienia późniejszego wyszukiwania elementów sortowanego zbioru. 2 Definicja Ciąg wejściowy: a 1,
Bardziej szczegółowoStruktury danych: stos, kolejka, lista, drzewo
Struktury danych: stos, kolejka, lista, drzewo Wykład: dane w strukturze, funkcje i rodzaje struktur, LIFO, last in first out, kolejka FIFO, first in first out, push, pop, size, empty, głowa, ogon, implementacja
Bardziej szczegółowoAlgorytmy i struktury danych. Co dziś? Tytułem przypomnienia metoda dziel i zwyciężaj. Wykład VIII Elementarne techniki algorytmiczne
Algorytmy i struktury danych Wykład VIII Elementarne techniki algorytmiczne Co dziś? Algorytmy zachłanne (greedyalgorithms) 2 Tytułem przypomnienia metoda dziel i zwyciężaj. Problem można podzielić na
Bardziej szczegółowoZadanie projektowe 1: Struktury danych i złożoność obliczeniowa
Łukasz Przywarty 171018 Data utworzenia: 24.03.2010r. Mariusz Kacała 171058 Prowadzący: prof. dr hab. inż. Adam Janiak oraz dr inż. Tomiasz Krysiak Zadanie projektowe 1: Struktury danych i złożoność obliczeniowa
Bardziej szczegółowoSortowanie przez scalanie
Sortowanie przez scalanie Wykład 2 12 marca 2019 (Wykład 2) Sortowanie przez scalanie 12 marca 2019 1 / 17 Outline 1 Metoda dziel i zwyciężaj 2 Scalanie Niezmiennik pętli - poprawność algorytmu 3 Sortowanie
Bardziej szczegółowoWykład 3. Metoda dziel i zwyciężaj
Wykład 3 Metoda dziel i zwyciężaj 1 Wprowadzenie Technika konstrukcji algorytmów dziel i zwyciężaj. przykładowe problemy: Wypełnianie planszy Poszukiwanie (binarne) Sortowanie (sortowanie przez łączenie
Bardziej szczegółowoUniwersytet Zielonogórski Instytut Sterowania i Systemów Informatycznych. Algorytmy i struktury danych Laboratorium 7. 2 Drzewa poszukiwań binarnych
Uniwersytet Zielonogórski Instytut Sterowania i Systemów Informatycznych Algorytmy i struktury danych Laboratorium Drzewa poszukiwań binarnych 1 Cel ćwiczenia Ćwiczenie ma na celu zapoznanie studentów
Bardziej szczegółowoDrzewa binarne. Drzewo binarne to dowolny obiekt powstały zgodnie z regułami: jest drzewem binarnym Jeśli T 0. jest drzewem binarnym Np.
Drzewa binarne Drzewo binarne to dowolny obiekt powstały zgodnie z regułami: jest drzewem binarnym Jeśli T 0 i T 1 są drzewami binarnymi to T 0 T 1 jest drzewem binarnym Np. ( ) ( ( )) Wielkość drzewa
Bardziej szczegółowoprowadzący dr ADRIAN HORZYK /~horzyk e-mail: horzyk@agh tel.: 012-617 Konsultacje paw. D-13/325
PODSTAWY INFORMATYKI WYKŁAD 8. prowadzący dr ADRIAN HORZYK http://home home.agh.edu.pl/~ /~horzyk e-mail: horzyk@agh agh.edu.pl tel.: 012-617 617-4319 Konsultacje paw. D-13/325 DRZEWA Drzewa to rodzaj
Bardziej szczegółowoSortowanie danych. Jolanta Bachan. Podstawy programowania
Sortowanie danych Podstawy programowania 2013-06-06 Sortowanie przez wybieranie 9 9 9 9 9 9 10 7 7 7 7 7 10 9 1 3 3 4 10 7 7 10 10 10 10 4 4 4 4 4 4 3 3 3 3 2 2 2 2 2 2 2 3 1 1 1 1 1 1 Gurbiel et al. 2000
Bardziej szczegółowoAlgorytmy i struktury danych. wykład 5
Plan wykładu: Wskaźniki. : listy, drzewa, kopce. Wskaźniki - wskaźniki Wskaźnik jest to liczba lub symbol który w ogólności wskazuje adres komórki pamięci. W językach wysokiego poziomu wskaźniki mogą również
Bardziej szczegółowoDrzewa czerwono-czarne.
Binboy at Sphere http://binboy.sphere.p l Drzewa czerwono-czarne. Autor: Jacek Zacharek Wstęp. Pojęcie drzewa czerwono-czarnego (red-black tree) zapoczątkował Rudolf Bayer w książce z 1972 r. pt. Symmetric
Bardziej szczegółowoALGORYTMY I STRUKTURY DANYCH
ALGORYTMY I STRUKTURY DANYCH Temat : Drzewa zrównoważone, sortowanie drzewiaste Wykładowca: dr inż. Zbigniew TARAPATA e-mail: Zbigniew.Tarapata@isi.wat.edu.pl http://www.tarapata.strefa.pl/p_algorytmy_i_struktury_danych/
Bardziej szczegółowoAlgorytmy i. Wykład 5: Drzewa. Dr inż. Paweł Kasprowski
Algorytmy i struktury danych Wykład 5: Drzewa Dr inż. Paweł Kasprowski pawel@kasprowski.pl Drzewa Struktury przechowywania danych podobne do list ale z innymi zasadami wskazywania następników Szczególny
Bardziej szczegółowoDrzewo. Drzewo uporządkowane ma ponumerowanych (oznaczonych) następników. Drzewo uporządkowane składa się z węzłów, które zawierają następujące pola:
Drzewa Drzewa Drzewo (ang. tree) zbiór węzłów powiązanych wskaźnikami, spójny i bez cykli. Drzewo posiada wyróżniony węzeł początkowy nazywany korzeniem (ang. root). Drzewo ukorzenione jest strukturą hierarchiczną.
Bardziej szczegółowoliniowa - elementy następują jeden za drugim. Graficznie możemy przedstawić to tak:
Sortowanie stogowe Drzewo binarne Binary Tree Dotychczas operowaliśmy na prostych strukturach danych, takich jak tablice. W tablicy elementy ułożone są zgodnie z ich numeracją, czyli indeksami. Jeśli za
Bardziej szczegółowoJeszcze o algorytmach
Jeszcze o algorytmach Przykłady różnych, podstawowych algorytmów 11.01.2018 M. Rad Plan Powtórka Znajdowanie najmniejszego elementu Segregowanie Poszukiwanie przez połowienie Wstawianie Inne algorytmy
Bardziej szczegółowoDefinicja pliku kratowego
Pliki kratowe Definicja pliku kratowego Plik kratowy (ang grid file) jest strukturą wspierająca realizację zapytań wielowymiarowych Uporządkowanie rekordów, zawierających dane wielowymiarowe w pliku kratowym,
Bardziej szczegółowoWstęp do programowania
Wstęp do programowania Algorytmy na tablicach Paweł Daniluk Wydział Fizyki Jesień 2013 P. Daniluk (Wydział Fizyki) WP w. III Jesień 2013 1 / 23 Dwadzieścia pytań Zasady 1 Osoba 1 wymyśla hasło z ustalonej
Bardziej szczegółowoWykład 6. Drzewa poszukiwań binarnych (BST)
Wykład 6 Drzewa poszukiwań binarnych (BST) 1 O czym będziemy mówić Definicja Operacje na drzewach BST: Search Minimum, Maximum Predecessor, Successor Insert, Delete Struktura losowo budowanych drzew BST
Bardziej szczegółowoEGZAMIN - Wersja A. ALGORYTMY I STRUKTURY DANYCH Lisek89 opracowanie kartki od Pani dr E. Koszelew
1. ( pkt) Dany jest algorytm, który dla dowolnej liczby naturalnej n, powinien wyznaczyd sumę kolejnych liczb naturalnych mniejszych od n. Wynik algorytmu jest zapisany w zmiennej suma. Algorytm i=1; suma=0;
Bardziej szczegółowoAnaliza algorytmów zadania podstawowe
Analiza algorytmów zadania podstawowe 15 stycznia 2019 Zadanie 1 Zliczanie Zliczaj(n) 1 r 0 2 for i 1 to n 1 3 do for j i + 1 to n 4 do for k 1 to j 5 do r r + 1 6 return r P Jaka wartość zostanie zwrócona
Bardziej szczegółowoAlgorytmy i Struktury Danych, 2. ćwiczenia
Algorytmy i Struktury Danych, 2. ćwiczenia 2015-10-09 Spis treści 1 Szybkie potęgowanie 1 2 Liczby Fibonacciego 2 3 Dowód, że n 1 porównań jest potrzebne do znajdowania minimum 2 4 Optymalny algorytm do
Bardziej szczegółowoINFORMATYKA SORTOWANIE DANYCH.
INFORMATYKA SORTOWANIE DANYCH http://www.infoceram.agh.edu.pl SORTOWANIE Jest to proces ustawiania zbioru obiektów w określonym porządku. Sortowanie stosowane jest w celu ułatwienia późniejszego wyszukania
Bardziej szczegółowoDrzewa BST i AVL. Drzewa poszukiwań binarnych (BST)
Drzewa ST i VL Drzewa poszukiwań binarnych (ST) Drzewo ST to dynamiczna struktura danych (w formie drzewa binarnego), która ma tą właściwość, że dla każdego elementu wszystkie elementy w jego prawym poddrzewie
Bardziej szczegółowoLaboratorium nr 7 Sortowanie
Laboratorium nr 7 Sortowanie 1. Sortowanie bąbelkowe (BbS) 2. Sortowanie przez wstawianie (IS) 3. Sortowanie przez wybieranie (SS) Materiały Wyróżniamy następujące metody sortowania: 1. Przez prostą zamianę
Bardziej szczegółowoSortowanie. LABORKA Piotr Ciskowski
Sortowanie LABORKA Piotr Ciskowski main Zaimplementuj metody sortowania przedstawione w następnych zadaniach Dla każdej metody osobna funkcja Nagłówek funkcji wg uznania ale wszystkie razem powinny być
Bardziej szczegółowoLista liniowa dwukierunkowa
53 Lista liniowa dwukierunkowa Jest to lista złożona z elementów, z których każdy posiada, oprócz wskaźnika na element następny, również wskaźnik na element poprzedni. Zdefiniujmy element listy dwukierunkowej
Bardziej szczegółowoBAZY DANYCH. Microsoft Access. Adrian Horzyk OPTYMALIZACJA BAZY DANYCH I TWORZENIE INDEKSÓW. Akademia Górniczo-Hutnicza
BAZY DANYCH Microsoft Access OPTYMALIZACJA BAZY DANYCH I TWORZENIE INDEKSÓW Adrian Horzyk Akademia Górniczo-Hutnicza Wydział Elektrotechniki, Automatyki, Informatyki i Inżynierii Biomedycznej Katedra Automatyki
Bardziej szczegółowoAlgorytmy i Struktury Danych, 9. ćwiczenia
Algorytmy i Struktury Danych, 9. ćwiczenia 206-2-09 Plan zajęć usuwanie z B-drzew join i split na 2-3-4 drzewach drzepce adresowanie otwarte w haszowaniu z analizą 2 B-drzewa definicja każdy węzeł ma następujące
Bardziej szczegółowoAlgorytmy i struktury danych
Algorytmy i struktury danych Proste algorytmy sortowania Witold Marańda maranda@dmcs.p.lodz.pl 1 Pojęcie sortowania Sortowaniem nazywa się proces ustawiania zbioru obiektów w określonym porządku Sortowanie
Bardziej szczegółowoZaawansowane algorytmy i struktury danych
Zaawansowane algorytmy i struktury danych u dr Barbary Marszał-Paszek Opracowanie pytań teoretycznych z egzaminów. Strona 1 z 12 Pytania teoretyczne z egzaminu pisemnego z 25 czerwca 2014 (studia dzienne)
Bardziej szczegółowoWykład 2. Drzewa poszukiwań binarnych (BST)
Wykład 2 Drzewa poszukiwań binarnych (BST) 1 O czym będziemy mówić Definicja Operacje na drzewach BST: Search Minimum, Maximum Predecessor, Successor Insert, Delete Struktura losowo budowanych drzew BST
Bardziej szczegółowoALGORYTMY I STRUKTURY DANYCH
LGORTM I STRUKTUR DNH Temat 6: Drzewa ST, VL Wykładowca: dr inż. bigniew TRPT e-mail: bigniew.tarapata@isi.wat.edu.pl http://www.tarapata.strefa.pl/p_algorytmy_i_struktury_danych/ Współautorami wykładu
Bardziej szczegółowoWyszukiwanie w BST Minimalny i maksymalny klucz. Wyszukiwanie w BST Minimalny klucz. Wyszukiwanie w BST - minimalny klucz Wersja rekurencyjna
Podstawy Programowania 2 Drzewa bst - część druga Arkadiusz Chrobot Zakład Informatyki 12 maja 2016 1 / 8 Plan Wstęp Wyszukiwanie w BST Minimalny i maksymalny klucz Wskazany klucz Zmiany w funkcji main()
Bardziej szczegółowoKażdy węzeł w drzewie posiada 3 pola: klucz, adres prawego potomka i adres lewego potomka. Pola zawierające adresy mogą być puste.
Drzewa binarne Każdy węzeł w drzewie posiada pola: klucz, adres prawego potomka i adres lewego potomka. Pola zawierające adresy mogą być puste. Uporządkowanie. Zakładamy, że klucze są różne. Klucze leżące
Bardziej szczegółowoStruktury Danych i Złożoność Obliczeniowa
Struktury Danych i Złożoność Obliczeniowa Zajęcia 3 Struktury drzewiaste drzewo binarne szczególny przypadek drzewa, które jest szczególnym przypadkiem grafu skierowanego, stopień każdego wierzchołka jest
Bardziej szczegółowoWstęp do programowania INP001213Wcl rok akademicki 2017/18 semestr zimowy. Wykład 9. Karol Tarnowski A-1 p.
Wstęp do programowania INP001213Wcl rok akademicki 2017/18 semestr zimowy Wykład 9 Karol Tarnowski karol.tarnowski@pwr.edu.pl A-1 p. 411B Plan prezentacji Zasada dziel i zwyciężaj Przykłady znajdowanie
Bardziej szczegółowoWstęp do programowania
Wstęp do programowania Rekurencja, metoda dziel i zwyciężaj Paweł Daniluk Wydział Fizyki Jesień 2014 P. Daniluk(Wydział Fizyki) WP w. VIII Jesień 2014 1 / 27 Rekurencja Recursion See Recursion. P. Daniluk(Wydział
Bardziej szczegółowoAlgorytmy i Struktury Danych. Co dziś? Drzewo decyzyjne. Wykład IV Sortowania cd. Elementarne struktury danych
Algorytmy i Struktury Danych Wykład IV Sortowania cd. Elementarne struktury danych 1 Co dziś? Dolna granica sortowań Mediany i statystyki pozycyjne Warstwa implementacji Warstwa abstrakcji #tablice #listy
Bardziej szczegółowoTeoretyczne podstawy informatyki
Teoretyczne podstawy informatyki Wykład 6b: Model danych oparty na drzewach http://hibiscus.if.uj.edu.pl/~erichter/dydaktyka2010/tpi-2010 Prof. dr hab. Elżbieta Richter-Wąs 1 Model danych oparty na drzewach
Bardziej szczegółowo. Podstawy Programowania 2. Drzewa bst - część druga. Arkadiusz Chrobot. 12 maja 2019
.. Podstawy Programowania 2 Drzewa bst - część druga Arkadiusz Chrobot Zakład Informatyki 12 maja 2019 1 / 39 Plan.1 Wstęp.2 Wyszukiwanie w BST Minimalny i maksymalny klucz Wskazany klucz.3.4 Zmiany w
Bardziej szczegółowoDrzewa poszukiwań binarnych
1 Drzewa poszukiwań binarnych Kacper Pawłowski Streszczenie W tej pracy przedstawię zagadnienia związane z drzewami poszukiwań binarnych. Przytoczę poszczególne operacje na tej strukturze danych oraz ich
Bardziej szczegółowoEfektywna metoda sortowania sortowanie przez scalanie
Efektywna metoda sortowania sortowanie przez scalanie Rekurencja Dla rozwiązania danego problemu, algorytm wywołuje sam siebie przy rozwiązywaniu podobnych podproblemów. Metoda dziel i zwycięŝaj Dzielimy
Bardziej szczegółowoWstęp do programowania. Drzewa podstawowe techniki. Piotr Chrząstowski-Wachtel
Wstęp do programowania Drzewa podstawowe techniki Piotr Chrząstowski-Wachtel Drzewa wyszukiwań Drzewa często służą do przechowywania informacji. Jeśli uda sie nam stworzyć drzewo o niewielkiej wysokości
Bardziej szczegółowoAlgorytmy sortujące 1
Algorytmy sortujące 1 Sortowanie Jeden z najczęściej występujących, rozwiązywanych i stosowanych problemów. Ułożyć elementy listy (przyjmujemy: tablicy) w rosnącym porządku Sortowanie może być oparte na
Bardziej szczegółowoZofia Kruczkiewicz, Algorytmu i struktury danych, Wykład 14, 1
Wykład Algorytmy grafowe metoda zachłanna. Właściwości algorytmu zachłannego:. W przeciwieństwie do metody programowania dynamicznego nie występuje etap dzielenia na mniejsze realizacje z wykorzystaniem
Bardziej szczegółowoWstęp do Informatyki zadania ze złożoności obliczeniowej z rozwiązaniami
Wstęp do Informatyki zadania ze złożoności obliczeniowej z rozwiązaniami Przykład 1. Napisz program, który dla podanej liczby n wypisze jej rozkład na czynniki pierwsze. Oblicz asymptotyczną złożoność
Bardziej szczegółowoDrzewo binarne BST. LABORKA Piotr Ciskowski
Drzewo binarne BST LABORKA Piotr Ciskowski zadanie 1. drzewo binarne - 1 Zaimplementuj drzewo binarne w postaci: klasy Osoba przechowującej prywatne zmienne: liczbę całkowitą to będzie klucz, wg którego
Bardziej szczegółowoLaboratoria nr 1. Sortowanie
Laboratoria nr 1 Sortowanie 1. Sortowanie bąbelkowe (BbS) 2. Sortowanie przez wstawianie (IS) 3. Sortowanie przez wybieranie (SS) 4. Sortowanie przez zliczanie (CS) 5. Sortowanie kubełkowe (BS) 6. Sortowanie
Bardziej szczegółowoProblemy porządkowe zadania
Problemy porządkowe Problemy porządkowe zadania Problemy porządkowe to zbiór różnych zadań obliczeniowych związanych z porządkowaniem zbioru danych i wyszukiwaniem informacji na takim zbiorze. Rodzaje
Bardziej szczegółowoEgzamin, AISDI, I termin, 18 czerwca 2015 r.
Egzamin, AISDI, I termin, 18 czerwca 2015 r. 1 W czasie niezależnym do danych wejściowych działają algorytmy A. sortowanie bąbelkowego i Shella B. sortowanie szybkiego i przez prosty wybór C. przez podział
Bardziej szczegółowoAlgorytmy i str ruktury danych. Metody algorytmiczne. Bartman Jacek
Algorytmy i str ruktury danych Metody algorytmiczne Bartman Jacek jbartman@univ.rzeszow.pl Metody algorytmiczne - wprowadzenia Znamy strukturę algorytmów Trudność tkwi natomiast w podaniu metod służących
Bardziej szczegółowoTeoretyczne podstawy informatyki
Teoretyczne podstawy informatyki Wykład 6a Model danych oparty na drzewach 1 Model danych oparty na drzewach Istnieje wiele sytuacji w których przetwarzane informacje mają strukturę hierarchiczną lub zagnieżdżoną,
Bardziej szczegółowo[12] Metody projektowania algorytmów (dziel i rządź, programowanie dynamiczne i algorytmy zachłanne).
[12] Metody projektowania algorytmów (dziel i rządź, programowanie dynamiczne i algorytmy zachłanne). Tworzenie projektów informatycznych opiera się w dużej mierze na formułowaniu i implementacji algorytmów,
Bardziej szczegółowoRównoległe algorytmy sortowania. Krzysztof Banaś Obliczenia równoległe 1
Równoległe algorytmy sortowania Krzysztof Banaś Obliczenia równoległe 1 Algorytmy sortowania Algorytmy sortowania dzielą się na wewnętrzne (bez użycia pamięci dyskowej) zewnętrzne (dla danych nie mieszczących
Bardziej szczegółowoKolejka Priorytetowa. Algorytmy i Struktury Danych. (c) Marcin Sydow. Kolejka priorytetowa. implementacja. Kopiec Binarny. Tablicowa.
Priorytetowa Zawartość wykładu Definicja kolejki priorytetowej proste implementacje (nieefektywne) kopiec binarny (najprostsza efektywna ) operacje kolejki priorytetowej na kopcu binarnym trik: jako zwykłej
Bardziej szczegółowoZłożoność obliczeniowa zadania, zestaw 2
Złożoność obliczeniowa zadania, zestaw 2 Określanie złożoności obliczeniowej algorytmów, obliczanie pesymistycznej i oczekiwanej złożoności obliczeniowej 1. Dana jest tablica jednowymiarowa A o rozmiarze
Bardziej szczegółowoKoszt zamortyzowany. Potencjał - Fundusz Ubezpieczeń Kosztów Algorytmicznych
Koszt zamortyzowany Jeśli mamy ciąg operacji, to koszt zamortyzowany jednej z nich jest sumarycznym kosztem wykonania wszystkich operacji podzielonym przez liczbę operacji. Inaczej mówiąc jest to, dla
Bardziej szczegółowoTEORETYCZNE PODSTAWY INFORMATYKI
1 TEORETYCZNE PODSTAWY INFORMATYKI WFAiS UJ, Informatyka Stosowana I rok studiów, I stopień Wykład 2 2 Problemy algorytmiczne Klasy problemów algorytmicznych Liczby Fibonacciego Przeszukiwanie tablic Największy
Bardziej szczegółowoLuty 2001 Algorytmy (4) 2000/2001
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
Bardziej szczegółowoAlgorytmy i struktury danych. Wykład 4 Tablice nieporządkowane i uporządkowane
Algorytmy i struktury danych Wykład 4 Tablice nieporządkowane i uporządkowane Tablice uporządkowane Szukanie binarne Szukanie interpolacyjne Tablice uporządkowane Szukanie binarne O(log N) Szukanie interpolacyjne
Bardziej szczegółowoAlgorytmy i Struktury Danych
Algorytmy i Struktury Danych Drzewa poszukiwań binarnych dr hab. Bożena Woźna-Szcześniak bwozna@gmail.com Jan Długosz University, Poland Wykład 12 Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych
Bardziej szczegółowoZaawansowane algorytmy i struktury danych
Zaawansowane algorytmy i struktury danych u dr Barbary Marszał-Paszek Opracowanie pytań praktycznych z egzaminów. Strona 1 z 12 Pytania praktyczne z kolokwium zaliczeniowego z 19 czerwca 2014 (studia dzienne)
Bardziej szczegółowoSortowanie w czasie liniowym
Sortowanie w czasie liniowym 1 Sortowanie - zadanie Definicja (dla liczb): wejście: ciąg n liczb A = (a 1, a 2,, a n ) wyjście: permutacja (a 1,, a n ) taka, że a 1 a n Po co sortować? Podstawowy problem
Bardziej szczegółowoUwaga: Funkcja zamień(a[j],a[j+s]) zamienia miejscami wartości A[j] oraz A[j+s].
Zadanie 1. Wiązka zadań Od szczegółu do ogółu Rozważmy następujący algorytm: Dane: Algorytm 1: k liczba naturalna, A[1...2 k ] tablica liczb całkowitych. n 1 dla i=1,2,,k wykonuj n 2n s 1 dopóki s
Bardziej szczegółowoBazy danych - BD. Indeksy. Wykład przygotował: Robert Wrembel. BD wykład 7 (1)
Indeksy Wykład przygotował: Robert Wrembel BD wykład 7 (1) 1 Plan wykładu Problematyka indeksowania Podział indeksów i ich charakterystyka indeks podstawowy, zgrupowany, wtórny indeks rzadki, gęsty Indeks
Bardziej szczegółowoPodstawy algorytmiki i programowania - wykład 6 Sortowanie- algorytmy
1 Podstawy algorytmiki i programowania - wykład 6 Sortowanie- algorytmy Treści prezentowane w wykładzie zostały oparte o: S. Prata, Język C++. Szkoła programowania. Wydanie VI, Helion, 2012 www.cplusplus.com
Bardziej szczegółowoWstęp do Programowania potok funkcyjny
Wstęp do Programowania potok funkcyjny Marcin Kubica 2010/2011 Outline Zasada dziel i rządź i analiza złożoności 1 Zasada dziel i rządź i analiza złożoności Definition : Zbiór wartości: nieograniczonej
Bardziej szczegółowo