INFORMATYKA Ksztacenie spiralne na podstawie problemu sortowania dr
INFORMATYKA Kształcenie spiralne na podstawie problemu sortowania dr Anna Beata Kwiatkowska
Myślenie komputacyjne - sortowanie
Problem sortowania o o Sortowanie – układanie elementów w zbiorze/ciągu zgodnie z przyjęta relacją porządku. Porządek <r może być określony za pomocą relacji <, >, <=, >= lub innej, która jednoznacznie wyznacza kolejność elementów w zbiorze/ciągu. Przykłady: n n o o Porządek rosnący: malejący: nierosnący: 1, 2, 34, 567, 8907, 567, 34, 2, 1 1, 3, 3, 5, 5, 7, 7, 7, 5, 5, 3, 3, 1 Algorytm sortowania dobieramy w zależności od rodzaju danych. Specyfikacja dla algorytmów sortowania: n n Dane: n naturalne, ciąg n liczb a 0, a 1, … , an-1 Wynik: kolejność (permutacja) a 0’, a 1’, … , an-1’ elementów ciągu wejściowego taka, że a 0’ <r a 1’ <r … <r an-1’
Szkoła podstawowa – klasy I-III Osiągnięcia w zakresie rozumienia, analizowania i rozwiązywania problemów. Uczeń: o układa w logicznym porządku: obrazki, teksty, polecenia (instrukcje) składające się m. in. na codzienne czynności; o tworzy polecenie lub sekwencje poleceń dla określonego planu działania prowadzące do osiągnięcia celu; o rozwiązuje zadania, zagadki i łamigłówki prowadzące do odkrywania algorytmów.
Kolejność czynności ABK 2/28/2021 6
Szkoła podstawowa – klasy IV-VI Rozumienie, analizowanie i rozwiązywanie problemów. Uczeń: o tworzy i porządkuje w postaci sekwencji (liniowo) lub drzewa (nieliniowo) informacje, takie jak: n n o obrazki i teksty ilustrujące wybrane sytuacje, obiekty z uwzględnieniem ich cech charakterystycznych; formułuje i zapisuje w postaci algorytmów polecenia składające się na: n n n rozwiązanie problemów z życia codziennego i z różnych przedmiotów, np. liczenie średniej, pisemne wykonanie działań arytmetycznych, takich jak dodawanie i odejmowanie, osiągnięcie postawionego celu, w tym znalezienie elementu w zbiorze nieuporządkowanym lub uporządkowanym, znalezienie elementu najmniejszego i największego, sterowanie robotem lub obiektem na ekranie;
Przygotowanie do sortowania przez proste wybieranie - wyszukiwanie minimum Dane: n, x – liczby naturalne oraz n losowych liczb naturalnych Wynik: miejsce wystąpienia najmniejszej z wylosowanych liczb Przykład: n=10, x=15 i liczby poniżej zapamiętane w liście t 0 1 2 3 4 5 6 7 32 12 24 15 13 11 20 16 m=0 8 9 9 15
Wyszukiwanie minimum Dane: n, x – liczby naturalne oraz n losowych liczb naturalnych Wynik: miejsce wystąpienia najmniejszej z wylosowanych liczb Przykład: n=10, x=15 i liczby poniżej zapamiętane w liście t 0 1 2 3 4 5 6 7 32 12 24 15 13 11 20 16 t[1]<t[m]? True m=1 8 9 9 15
Wyszukiwanie minimum Dane: n, x – liczby naturalne oraz n losowych liczb naturalnych Wynik: miejsce wystąpienia najmniejszej z wylosowanych liczb Przykład: n=10, x=15 i liczby poniżej zapamiętane w liście t 0 1 2 3 4 5 6 7 32 12 24 15 13 11 20 16 t[2]<t[m]? False 8 9 9 15
Wyszukiwanie minimum Dane: n, x – liczby naturalne oraz n losowych liczb naturalnych Wynik: miejsce wystąpienia najmniejszej z wylosowanych liczb Przykład: n=10, x=15 i liczby poniżej zapamiętane w liście t 0 1 2 3 4 5 6 7 32 12 24 15 13 11 20 16 t[3]<t[m]? False 8 9 9 15
Wyszukiwanie minimum Dane: n, x – liczby naturalne oraz n losowych liczb naturalnych Wynik: odpowiedź na pytanie, czy wśród n losowych liczb znajduje się liczba x. Przykład: n=10, x=15 i liczby poniżej 0 1 2 3 4 5 6 7 32 12 24 15 13 11 20 16 t[4]<t[m]? False 8 9 9 15
Wyszukiwanie minimum Dane: n, x – liczby naturalne oraz n losowych liczb naturalnych Wynik: miejsce wystąpienia najmniejszej z wylosowanych liczb Przykład: n=10, x=15 i liczby poniżej zapamiętane w liście t 0 1 2 3 4 5 6 7 32 12 24 15 13 11 20 16 t[5]<t[m]? True m=5 8 9 9 15
Wyszukiwanie minimum Dane: n, x – liczby naturalne oraz n losowych liczb naturalnych Wynik: miejsce wystąpienia najmniejszej z wylosowanych liczb Przykład: n=10, x=15 i liczby poniżej zapamiętane w liście t 0 1 2 3 4 5 6 7 32 12 24 15 13 11 20 16 Ogólnie: dla i od 1 do n-1 t[i]<t[m]? True m=i 8 9 9 15
Szukanie minimum - implementacja
Szkoła podstawowa – klasy VII-VIII Rozumienie, analizowanie i rozwiązywanie problemów. Uczeń: o formułuje problem w postaci specyfikacji (czyli opisuje dane i wyniki) i wyróżnia kroki w algorytmicznym rozwiązywaniu problemów. Stosuje różne sposoby przedstawiania algorytmów, w tym w języku naturalnym, w postaci schematów blokowych, listy kroków; o stosuje przy rozwiązywaniu problemów podstawowe algorytmy: […] n wyszukiwania i porządkowania: wyszukuje element w zbiorze uporządkowanym i nieuporządkowanym oraz porządkuje elementy w zbiorze metodą przez proste wybieranie i zliczanie;
Sortowanie przez proste wybieranie o o Dane: n naturalne, ciąg n liczb a 0, a 1, … , an-1 Wynik: permutacja a 0’, a 1’, … , an-1’ ciągu wejściowego taka, że a 0’ <r a 1’ <r … <r an-1’ o W każdym z i etapów, dla i od 0 do n-2: n n A Szukamy indeksu k elementu najmniejszego wśród liczb od indeksu i do n-1 zamieniamy element k-ty z i-tym i n-1
Sortowanie przez proste wybieranie o A Przykładowe dane: 0 1 2 3 15 2 25 4 rozpatrywane 4 0 5 6 7 18 79 11 8 3 9 1 zamiana element pierwszy wśród rozpatrywanych min rozpatrywane A 0 0 1 2 3 2 25 4 4 5 6 7 15 18 79 11
Sortowanie przez proste wybieranie o A Przykładowe dane: 0 1 2 3 15 2 25 4 rozpatrywane 4 0 5 6 7 18 79 11 8 3 9 1 zamiana element pierwszy wśród rozpatrywanych min rozpatrywane A 0 0 1 2 3 2 25 4 4 5 6 7 15 18 79 11
Sortowanie przez proste wybieranie o A Przykładowe dane: 0 1 2 3 15 2 25 4 rozpatrywane 4 0 5 6 7 18 79 11 8 3 9 2 zamiana element pierwszy wśród rozpatrywanych min rozpatrywane A 0 0 1 2 3 1 25 4 4 5 6 7 15 18 79 11
Sortowanie przez proste wybieranie o A Przykładowe dane: 0 1 2 3 15 2 25 4 rozpatrywane 4 0 5 6 7 18 79 11 8 3 9 25 zamiana element pierwszy wśród rozpatrywanych min rozpatrywane A o 0 0 1 1 2 2 3 4 4 5 6 7 15 18 79 11 Czynności powtarzamy, aż pozostanie jeden element.
Sortowanie przez proste wybieranie o o o 0 1 2 3 4 5 6 7 8 9 15 2 25 4 0 18 79 11 3 1 0 2 25 4 15 18 79 11 3 1 0 1 25 4 15 18 79 11 3 2 0 1 2 4 15 18 79 11 3 25 0 1 2 3 15 18 79 11 4 25 0 1 2 3 4 18 79 11 15 25 0 1 2 3 4 11 79 18 15 25 0 1 2 3 4 11 15 18 79 25 0 1 2 3 4 11 15 18 25 79 liczba porównań n-1 n-2 n-3. . . 3 2 + 1 (n*(n-1))/2 Jest n-1 etapów, czyli dla i=0, …, n-2 Na każdym etapie szukamy minimum, które zamieniamy z pierwszą liczbą wśród rozpatrywanych Liczba porównań wyrażona jest funkcją kwadratową.
Przykładowy program etapy szukanie miejsca wystąpienia najmniejszej zamiana
Sortowanie przez zliczanie – etap I Dane: n naturalne, ciąg n liczb a 0, a 1, … , an-1 o znanym zakresie wartości, które mogą być reprezentowane indeksami listy. Wynik: permutacja a 0’, a 1’, … , an-1’ ciągu wejściowego taka, że a 0’ <= a 1’ <= … <=an-1’ o o Przykładowe dane: 12 cyfr Struktury: lista z danymi, dodatkowo lista pomocnicza o o A Z 0 3 1 5 0 0 2 4 1 0 3 1 2 0 4 4 3 0 5 2 6 2 4 0 5 0 7 1 6 0 8 9 7 0 9 10 11 1 0 7 8 0 9 0
Sortowanie przez zliczanie – etap II A 0 3 1 5 2 3 3 1 4 4 5 2 6 2 7 1 8 9 6 0 7 0 9 10 11 1 0 7 z[3]=z[3]+1 Z 0 0 1 0 2 0 3 1 4 0 5 0 8 0 9 0
Sortowanie przez zliczanie – etap II A 0 3 1 5 2 3 3 1 4 4 5 2 6 2 7 1 8 9 9 10 11 1 0 7 z[5]=z[5]+1 Z 0 0 1 0 2 0 3 1 4 0 5 1 6 0 7 0 8 0 9 0
Sortowanie przez zliczanie – etap II o A Przykładowe dane: 12 cyfr 0 3 1 5 2 3 3 1 4 4 5 2 6 2 7 1 8 9 9 10 11 1 0 7 z[3]=z[3]+1 Z 0 0 1 0 2 0 3 2 4 0 5 1 6 0 7 0 8 0 9 0
Sortowanie przez zliczanie – etap II A 0 3 1 5 2 3 3 1 4 4 5 2 6 2 7 1 8 9 9 10 11 1 0 7 Po powtórzeniu operacji Z[A[i]]=Z[A[i]]+1 dla każdego indeksu listy A mamy jej elementy zliczone w liście pomocniczej Z: Z 0 1 1 3 2 2 3 2 4 1 5 1 6 0 7 1 8 0 9 1
Sortowanie przez zliczanie – etap III A Z 0 3 1 5 0 1 2 3 1 3 3 1 2 2 4 4 3 2 5 2 4 1 6 2 7 1 8 9 5 1 6 0 7 1 9 10 11 1 0 7 8 0 9 1 z[i] powtórzeń indeksów i na liście A A 0 0 1 1 2 1 3 1 4 4 5 2 6 2 7 1 8 9 9 10 11 1 0 7
Sortowanie przez zliczanie o o o Dane: n naturalne, ciąg n liczb a 0, a 1, … , an-1 mogących stanowić indeksy listy o znanym zakresie wartości Wynik: permutacja a 0’, a 1’, … , an-1’ ciągu wejściowego taka, że a 0’ <= a 1’ <= … <=an-1’ Wczytanie danych do listy A o indeksach 0, …, n-1. UWAGA: Można nie wczytywać danych i przetwarzać je na bieżąco np. z pliku. Etap I: Powołanie listy do zliczania Z o indeksach od 0 do zakresu wartości danych i wartościach początkowych zero. Etap II: Zliczenie – przejście po elementach listy A i wykonanie w liście Z operacji Z[a[i]]=Z[a[i]] +1 dla każdego i od 0 do n-1. Etap III: Wpisanie do kolejnych elementów listy A każdego indeksu i listy Z tyle razy, ile wynosi wartość Z[i].
Sortowanie przez zliczanie – przykładowy program
Sortowanie przez zliczanie - charakterystyka o o o W sortowaniu przez zliczanie są wykonywane porównania elementów. Najczęściej wykonywaną operacją (dominującą) jest przepisywanie elementu do listy. Liczba wszystkich przepisań wynosi 2*n, gdzie n jest liczbą elementów do posortowania. Liczba przepisań wyrażona jest funkcją liniową. Aby móc zastosować sortowanie przez zliczanie: n n musimy wcześniej znać zakres elementów, sortowane elementy muszą być takiego typu, aby jego elementy mogły być reprezentowane przez indeksy listy.
Szkoła ponadpodstawowa – poziom podstawowy Rozumienie, analizowanie i rozwiązywanie problemów. Uczeń: […] o stosuje przy rozwiązywaniu problemów z różnych dziedzin algorytmy poznane w szkole podstawowej oraz algorytmy: n n n […] porządkowania ciągu liczb: przez wstawianie i metodą bąbelkową, […]
Sortowanie przez proste wstawianie A 0 1 15 2 2 3 4 25 4 0 5 6 7 18 79 11 8 3 9 1 wartość A[1] wstawiamy w ciąg uporządkowany po lewej A 0 1 2 3 2 15 4 25 4 0 5 6 7 18 79 11 8 3 9 1 wartość A[2] wstawiamy w ciąg uporządkowany po lewej o o Czynność powtarzamy, aż wstawimy ostatnią liczbę w uporządkowany ciąg po lewej. W klasycznym algorytmie wstawianie realizuje się liniowo, można realizować wstawianie binarnie.
Realizacja wstawiania i-tego elementu A 0 2 1 2 3 4 5 6 7 4 15 25 17 18 79 11 8 3 9 1 8 9 3 1 y=A[i] A 0 1 2 3 4 5 6 7 2 4 15 25 17 18 79 11 y<A[i-1]? TAK – przepisujemy 25 na prawo A 0 2 1 2 3 4 5 6 7 25 25 18 79 11 4 15 17 8 3 9 1 y<A[i-2]? NIE – wpisujemy y w miejsce i-1
Sortowanie przez proste wstawianie o Przykładowa funkcja o Liczba porównań elementów jest zależna od wstępnego posortowania danych. Przy wstawianiu binarnym zmniejsza się liczba porównań, nie zmniejsza się liczba przepisywań. W pesymistycznym przypadku liczba porównań jest taka sama, jak w sortowaniu przez proste wybieranie. Najmniej porównań jest w przypadku danych posortowanych niemalejąco i ich liczba wynosi n-1. o o
Sortowanie bąbelkowe A 0 1 2 3 15 2 25 4 4 0 5 6 7 18 79 11 8 3 9 1 Porównujemy kolejno elementy stojące obok siebie i jeśli są w złej kolejności, zamieniamy je miejscami.
Sortowanie bąbelkowe A 0 1 2 3 2 15 25 4 4 0 5 6 7 18 79 11 8 3 9 1 Porównujemy kolejno elementy stojące obok siebie i jeśli są w złej kolejności, zamieniamy je miejscami.
Sortowanie bąbelkowe A 0 1 2 3 2 15 25 4 4 0 5 6 7 18 79 11 8 3 9 1 Porównujemy kolejno elementy stojące obok siebie i jeśli są w złej kolejności, zamieniamy je miejscami.
Sortowanie bąbelkowe A 0 1 2 3 2 15 4 25 4 0 5 6 7 18 79 11 8 3 9 1 Porównujemy kolejno elementy stojące obok siebie i jeśli są w złej kolejności, zamieniamy je miejscami.
Sortowanie bąbelkowe A 0 1 2 2 15 4 3 0 4 5 6 7 25 18 79 11 8 3 9 1 Porównujemy kolejno elementy stojące obok siebie i jeśli są w złej kolejności, zamieniamy je miejscami.
Sortowanie bąbelkowe A 0 1 2 2 15 4 3 0 4 5 6 7 18 25 79 11 8 3 9 1 Porównujemy kolejno elementy stojące obok siebie i jeśli są w złej kolejności, zamieniamy je miejscami.
Sortowanie bąbelkowe A 0 1 2 2 15 4 3 0 4 5 6 7 18 25 79 11 8 3 9 1 Porównujemy kolejno elementy stojące obok siebie i jeśli są w złej kolejności, zamieniamy je miejscami.
Sortowanie bąbelkowe A 0 1 2 2 15 4 3 0 4 5 6 7 18 25 11 79 8 3 9 1 Porównujemy kolejno elementy stojące obok siebie i jeśli są w złej kolejności, zamieniamy je miejscami.
Sortowanie bąbelkowe A 0 1 2 2 15 4 3 0 4 5 6 18 25 11 7 3 8 79 9 1 Porównujemy kolejno elementy stojące obok siebie i jeśli są w złej kolejności, zamieniamy je miejscami.
Sortowanie bąbelkowe A 0 1 2 2 15 4 3 0 4 5 6 18 25 11 7 3 8 1 9 79 na właściwym miejscu o o o Postępujemy tak n-1 razy, za każdym razem skracając rozpatrywany ciąg. W klasycznym algorytmie skracamy ciąg o jeden element. Można zmodyfikować algorytm i prowadzić porównania do miejsca ostatniej zamiany – przyspieszenie w zależności od wstępnego posortowania danych.
Sortowanie bąbelkowe – przykładowe implementacje
Szkoła ponadpodstawowa – poziom rozszerzony Uczeń: o zapisuje za pomocą listy kroków, schematu blokowego lub pseudokodu, i implementuje w wybranym języku programowania, algorytmy poznane na wcześniejszych etapach oraz algorytmy: […] n jednoczesnego wyszukiwania elementu najmniejszego i największego, n sortowania ciągu liczb przez scalanie, […]
Problem jednoczesnego szukania min i max Dane: n – liczba naturalna oraz n losowych liczb naturalnych Wynik: minimalna i maksymalna wartość wśród wylosowanych liczb Przypomnienie – szukanie minimum: Aby znaleźć minimum wśród n liczb musimy wykonać n-1 porównań elementów. Przy zastosowaniu analogicznego algorytmu dla maksimum, aby znaleźć jednocześnie minimum i maksimum, musimy wykonać 2*(n-1) porównań elementów. Czy liczbę porównań elementów można zmniejszyć?
Min-Max - iteracyjnie A 0 1 2 3 13 4 21 3 4 7 5 6 7 15 72 11 8 3 9 2 Porównujemy kolejno elementy parami i ustawiamy w parze w dobrej kolejności.
Min-Max - iteracyjnie A 0 1 2 3 4 13 21 3 4 7 5 6 7 15 72 11 8 3 9 2 Porównujemy kolejno elementy parami i ustawiamy w parze w dobrej kolejności.
Min-Max - iteracyjnie A 0 1 2 3 4 13 3 21 4 7 5 6 7 15 72 11 8 3 9 2 Porównujemy kolejno elementy parami i ustawiamy w parze w dobrej kolejności.
Min-Max - iteracyjnie A 0 1 2 3 4 13 3 21 4 7 5 6 7 15 72 11 8 3 9 2 Porównujemy kolejno elementy parami i ustawiamy w parze w dobrej kolejności.
Min-Max - iteracyjnie A 0 1 2 3 4 13 3 21 4 7 5 6 7 15 11 72 8 3 9 2 Porównujemy kolejno elementy parami i ustawiamy w parze w dobrej kolejności.
Min-Max - iteracyjnie 0 1 2 3 4 13 3 21 A 4 7 5 6 7 15 11 72 8 2 9 3 Wśród liczb o parzystych indeksach szukamy minimum. Wśród liczb o nieparzystych indeksach szukamy maksimum. o Liczba porównań elementów: n n n/2 – liczba porównań w parach n/2 -1 – liczba porównań przy znajdowaniu minimum n/2 -1 – liczba porównań przy znajdowaniu maksimum Razem 3*(n/2)-2 porównań
Min-Max – rekurencyjnie idea o Cała lista jest indeksowana od i=0 do j=n-1: 0 1 2 3 4 13 3 21 A o o 4 7 5 6 7 15 11 72 8 2 9 3 Wersja rekurencyjna bazuje na spostrzeżeniu, że łatwo znaleźć min i max w podlistach jedno i dwuelementowych. W algorytmie stosowana jest metoda dziel i zwyciężaj. Załóżmy, że podlista jest rozważana od indeksu i do j, wtedy: n n n podlista jest jednoelementowa, jeśli i=j, ten jeden element jest jednocześnie min i max, podlista jest dwuelementowa, jeśli i+1=j, min to mniejszy element, max to element większy, jeśli podlista ma więcej niż dwa elementy, rekurencyjnie dzielimy ją na dwie podlisty o indeksach od i do (i+j)//2 oraz od (i+j)//2+1 do j, porównujemy minima i maksima z tych podlist.
Min. Max – rekurencyjnie -podział na podprzedziały 0 1 2 3 4 13 3 21 0 1 2 4 13 3 0 1 4 13 2 3 3 21 4 7 4 7 5 6 7 15 11 72 8 2 5 6 7 15 11 72 5 6 15 11 7 72 9 3 8 2 9 3 podział (i+j)//2
Min. Max – rekurencyjnie – podział i wyliczanie 0 1 2 3 4 13 3 21 0 1 2 4 13 3 0 1 4 13 4 7 5 6 7 15 11 72 8 2 9 3
Min. Max - rekurencyjnie 0 1 2 3 4 13 3 21 0 1 2 4 13 3 min 1=4 max 1=13 2 3 4 7 5 6 7 15 11 72 8 2 9 3
Min. Max - rekurencyjnie 0 1 2 3 4 13 3 21 0 1 2 4 13 3 min 1=4 max 1=13 min 2=3 max 2=3 4 7 5 6 7 15 11 72 8 2 9 3
Min. Max - rekurencyjnie 0 1 2 3 4 13 3 21 min 1=3 max 1=13 min 1=4 max 1=13 min 2=3 max 2=3 4 7 5 6 7 15 11 72 8 2 9 3
Min. Max - rekurencyjnie 0 1 2 3 4 13 3 21 min 1=3 max 1=13 min 1=4 max 1=13 min 2=3 max 2=3 3 21 4 7 4 7 5 6 7 15 11 72 8 2 9 3
Min. Max - rekurencyjnie 0 1 2 3 4 13 3 21 min 1=3 max 1=13 min 1=4 max 1=13 min 2=3 max 2=3 4 7 min 2=7 max 2=21 4 7 5 6 7 15 11 72 8 2 9 3
Min. Max - rekurencyjnie 0 1 2 3 4 13 3 21 min 1=3 max 1=13 min 1=4 max 1=13 min 2=3 max 2=3 min 2=7 max 2=21 4 7 5 6 7 15 11 72 8 2 9 3
Min. Max - rekurencyjnie 0 1 2 3 4 13 3 21 min 1=3 max 1=13 min 1=4 max 1=13 min 2=3 max 2=3 min 2=7 max 2=21 4 7 5 6 7 15 11 72 8 2 5 6 7 15 11 72 5 6 15 11 9 3 8 2 9 3
Min. Max - rekurencyjnie 0 1 2 3 4 13 3 21 min 1=3 max 1=13 min 1=4 max 1=13 min 2=3 max 2=3 min 2=7 max 2=21 4 7 5 6 7 15 11 72 8 2 5 6 7 15 11 72 min 1=11 max 1=72 9 3 8 2 9 3
Min. Max - rekurencyjnie 0 1 2 3 4 13 3 21 min 1=3 max 1=13 min 1=4 max 1=13 min 2=3 max 2=3 min 2=7 max 2=21 4 7 5 6 7 15 11 72 8 2 5 6 7 15 11 72 min 1=11 max 1=72 7 72 9 3 8 2 9 3
Min. Max - rekurencyjnie 0 1 2 3 4 13 3 21 min 1=3 max 1=13 min 1=4 max 1=13 min 2=3 max 2=3 min 2=7 max 2=21 4 7 5 6 7 15 11 72 8 2 5 6 7 15 11 72 9 3 8 2 5 6 7 15 11 72 min 1=11 max 1=15 min 2=72 max 2=72 9 3
Min. Max - rekurencyjnie 0 1 2 3 4 13 3 21 min 1=3 max 1=13 min 1=4 max 1=13 min 2=3 max 2=3 min 2=7 max 2=21 4 7 5 6 7 15 11 72 8 2 5 6 7 15 11 72 9 3 8 2 min 1=11 max 1=72 min 1=11 max 1=15 min 2=72 max 2=72 9 3
Min. Max - rekurencyjnie 0 1 2 3 4 13 3 21 min 1=3 max 1=13 min 1=4 max 1=13 min 2=3 max 2=3 min 2=7 max 2=21 4 7 5 6 7 15 11 72 8 2 5 6 7 15 11 72 9 3 8 2 min 1=11 max 1=72 min 1=11 max 1=15 min 2=72 max 2=72 9 3 8 2 9 3
Min. Max - rekurencyjnie 0 1 2 3 4 13 3 21 min 1=3 max 1=13 min 1=4 max 1=13 min 2=3 max 2=3 min 2=7 max 2=21 4 7 5 6 7 15 11 72 8 2 5 6 7 15 11 72 9 3 8 2 min 1=11 max 1=72 min 1=11 max 1=15 min 2=72 max 2=72 9 3 min 2=2 max 2=3
Min. Max - rekurencyjnie 0 1 2 3 4 13 3 21 4 7 5 6 7 15 11 72 min 1=4 max 1=13 min 2=3 max 2=3 min 2=7 max 2=21 9 3 min 2=2 max 2=72 min 1=3 max 1=21 min 1=3 max 1=13 8 2 min 1=11 max 1=72 min 1=11 max 1=15 min 2=72 max 2=72 min 2=2 max 2=3
Min. Max – rekurencyjnie – dziel i zwyciężaj! min=2 max=72 min 1=3 max 1=21 min 1=3 max 1=13 min 1=4 max 1=13 min 2=3 max 2=3 min 2=7 max 2=21 min 2=2 max 2=72 min 1=11 max 1=15 min 2=72 max 2=72 min 2=2 max 2=3
Min Max - Liczba porównań o Dla uproszczenia obliczeń załóżmy, że (*) n=2 k. Oznaczmy przez r(n) liczbę porównań dla n elementów. Wtedy: 0 r(n) = 1 2*r(n/2)+2 dla n=1 dla n=2 dla n>2 o Z powyższego: n (**) r(n/2) = 2 * r(n/4)+2 n (***) r(n/4) = 2 * r(n/8)+2 o Rozwiązujemy rekurencję korzystając z (*) i (**), a potem uogólniając i podstawiając (*) 2 k=n, 2 k-1=n/2.
Min Max - Liczba porównań n (*) n=2 k n (**) n (***) r(n/4) = 2 * r(n/8)+2 r(n/2) = 2 * r(n/4)+2 Rozwiązanie: r(n)=2*r(n/2)+2= (**) = 2*(2 * r(n/4)+2)+2 = = 22*r(n/4)+22+2= (***) = = = (*) = = 22*(2 * r(n/8)+2)+22+2 = 23*r(n/23)+23+22+2 = … = 2 k-1*r(n/2 k-1)+2 k-1+ … +23+22+2 = 2 k+2 k-2+ … +23+22+2+1 -1 = 2 k+2 k-1 -1 -1= n+n/2 -2 = (3/2)*n-2
Sortowanie przez scalanie – metoda dziel i zwyciężaj o Schemat podobny do algorytmu rekurencyjnego szukania min-max – metoda dziel i zwyciężaj o Algorytm opiera się na spostrzeżeniach: o n ciągi jednoelementowe są uporządkowane, n łatwo scalić dwa ciągi uporządkowane w jeden uporządkowany. Realizacja algorytmu polega na rekurencyjnym podziale na podciągi, aż do ciągów jednoelementowych i scalaniu podciągów uporządkowanych w ciągi uporządkowane. n Do scalania uporządkowanych ciągów potrzebna jest pomocnicza lista o wielkości równej liczbie scalanych danych lub dwie listy łącznie o rozmiarze scalanych danych. n Na każdym etapie scalania: o scalając, kolejne elementy ciągów uporządkowanych zapisujemy w dobrej kolejności w pomocniczej liście, o potem scalony podciąg z listy pomocniczej przepisujemy do listy na poziomie o jeden wyżej w rekurencji.
Sortowanie przez scalanie - schemat programu o Funkcja Scal scala dwa ciągi uporządkowane – trzeba ją zaprogramować.
Sortowanie przez scalanie - przykład 0 1 2 3 4 13 3 21 0 1 2 4 13 3 0 1 4 13 0 4 1 13 4 7 5 6 7 15 11 72 8 2 9 3
Sortowanie przez scalanie - przykład 0 1 2 3 4 13 3 21 0 1 2 4 13 3 0 1 4 13 2 3 4 7 5 6 7 15 11 72 8 2 9 3
Sortowanie przez scalanie - przykład 0 1 2 3 4 13 3 21 0 3 1 2 4 13 4 7 5 6 7 15 11 72 8 2 9 3
Sortowanie przez scalanie - przykład 0 1 2 3 4 13 3 21 0 3 1 2 4 13 3 21 4 7 4 7 5 6 7 15 11 72 8 2 9 3
Sortowanie przez scalanie 0 1 2 3 4 13 3 21 0 3 1 2 4 13 3 21 4 7 4 7 5 6 7 15 11 72 8 2 9 3
Sortowanie przez scalanie 0 1 2 3 4 13 3 21 0 3 1 2 4 13 3 21 4 7 4 7 5 6 7 15 11 72 8 2 9 3
Sortowanie przez scalanie 0 1 2 3 4 13 3 21 0 3 0 1 2 3 4 13 3 21 4 7 1 2 4 13 4 21 3 7 4 7 5 6 7 15 11 72 8 2 9 3
Sortowanie przez scalanie 0 1 2 3 4 13 3 21 0 3 1 4 2 3 4 7 13 21 4 7 5 6 7 15 11 72 8 2 9 3
Sortowanie przez scalanie 0 1 2 3 4 13 3 21 0 3 1 4 2 3 4 7 13 21 4 7 5 6 7 15 11 72 8 2 5 6 7 15 11 72 9 3 8 2 9 3
Sortowanie przez scalanie 0 1 2 3 4 13 3 21 0 3 1 4 2 3 4 7 13 21 4 7 5 6 7 15 11 72 8 2 5 6 7 15 11 72 9 3 8 2 9 3
Sortowanie przez scalanie 0 1 2 3 4 13 3 21 0 3 1 4 2 3 4 7 13 21 4 7 5 6 7 15 11 72 8 2 5 6 7 15 11 72 5 6 15 11 9 3 8 2 9 3
Sortowanie przez scalanie 0 1 2 3 4 13 3 21 0 3 1 4 4 7 5 6 7 15 11 72 2 3 4 7 13 21 8 2 5 6 7 15 11 72 5 6 15 11 5 15 9 3 8 2 9 3
Sortowanie przez scalanie 0 1 2 3 4 13 3 21 0 3 1 4 4 7 5 6 7 15 11 72 2 3 4 7 13 21 8 2 5 6 7 15 11 72 5 6 15 11 5 15 6 11 9 3 8 2 9 3
Sortowanie przez scalanie 0 1 2 3 4 13 3 21 0 3 1 4 2 3 4 7 13 21 4 7 5 6 7 15 11 72 8 2 5 6 7 15 11 72 5 6 11 15 9 3 8 2 9 3
Sortowanie przez scalanie 0 1 2 3 4 13 3 21 0 3 1 4 2 3 4 7 13 21 4 7 5 6 7 15 11 72 8 2 5 6 7 15 11 72 5 6 11 15 7 72 9 3 8 2 9 3
Sortowanie przez scalanie 0 1 2 3 4 13 3 21 0 3 1 4 2 3 4 7 13 21 4 7 5 6 7 15 11 72 8 2 5 6 7 15 11 72 5 6 7 11 15 72 9 3 8 2 9 3
Sortowanie przez scalanie 0 1 2 3 4 13 3 21 0 3 1 4 2 3 4 7 13 21 4 7 5 6 7 15 11 72 8 2 5 6 7 15 11 72 5 6 7 11 15 72 9 3 8 2 9 3
Sortowanie przez scalanie 0 1 2 3 4 13 3 21 0 3 1 4 2 3 4 7 13 21 4 7 5 6 7 15 11 72 8 2 5 6 7 15 11 72 5 6 7 11 15 72 9 3 8 2 8 2 9 3
Sortowanie przez scalanie 0 1 2 3 4 13 3 21 0 3 1 4 2 3 4 7 13 21 4 7 5 6 7 15 11 72 8 2 5 6 7 15 11 72 5 6 7 11 15 72 9 3 8 2 8 2 9 3
Sortowanie przez scalanie 0 1 2 3 4 13 3 21 0 3 1 4 2 3 4 7 13 21 4 7 5 6 7 15 11 72 8 2 5 6 7 15 11 72 5 6 7 11 15 72 9 3 8 2 9 3
Sortowanie przez scalanie 0 1 2 3 4 13 3 21 0 3 1 4 2 3 4 7 13 21 4 7 5 6 7 15 11 72 5 2 6 3 8 2 9 3 7 8 9 11 15 72
Sortowanie przez scalanie 0 2 1 3 2 3 3 4 4 7 5 6 7 8 9 11 13 15 21 72
Scalanie ciągów uporządkowanych 0 1 2 3 4 13 3 21 0 3 0 1 2 3 4 13 3 21 4 7 1 2 4 13 4 21 3 7 4 7 5 6 7 15 11 72 8 2 9 3
Scalanie ciągów uporządkowanych 0 1 2 3 4 13 3 21 0 3 0 1 2 3 4 13 3 21 4 7 1 2 4 13 4 21 3 7 lista pomocnicza 0 1 2 3 4 4 7 5 6 7 15 11 72 8 2 9 3
Scalanie ciągów uporządkowanych 0 1 2 3 4 13 3 21 0 3 0 1 2 3 4 13 3 21 4 7 1 2 4 13 4 21 3 7 lista pomocnicza 0 3 1 2 3 4 4 7 5 6 7 15 11 72 8 2 9 3
Scalanie ciągów uporządkowanych 0 1 2 3 4 13 3 21 0 3 0 1 2 3 4 13 3 21 4 7 1 2 4 13 4 21 3 7 lista pomocnicza 0 3 1 4 2 3 4 4 7 5 6 7 15 11 72 8 2 9 3
Scalanie ciągów uporządkowanych 0 1 2 3 4 13 3 21 0 3 0 1 2 3 4 13 3 21 4 7 1 2 4 13 4 21 3 7 lista pomocnicza 0 3 1 4 2 7 3 4 4 7 5 6 7 15 11 72 8 2 9 3
Scalanie ciągów uporządkowanych 0 1 2 3 4 13 3 21 0 3 0 1 2 3 4 13 3 21 4 7 1 2 4 13 4 21 3 7 lista pomocnicza 0 3 1 4 2 3 7 13 4 4 7 5 6 7 15 11 72 8 2 9 3 Pozostałe elementy przepisujemy
Scalanie ciągów uporządkowanych 0 1 2 3 4 13 3 21 0 3 0 1 2 3 4 13 3 21 4 7 1 2 4 13 4 21 3 7 4 7 5 6 7 15 11 72 8 2 9 3 tablica pomocnicza 0 3 1 4 2 3 4 7 13 21 Wszystkie elementy listy pomocniczej przepisujemy do pierwotnej listy.
Scalanie ciągów uporządkowanych 0 1 2 3 4 13 3 21 0 3 1 4 4 7 5 6 7 15 11 72 8 2 9 3 2 3 4 7 13 21 Ile trzeba wykonać porównań elementów, aby scalić n elementów? tablica pomocnicza 0 3 1 4 2 3 4 7 13 21 Wszystkie elementy listy pomocniczej przepisujemy do pierwotnej listy.
Scalanie ciągów uporządkowanych – przykładowa funkcja
Sortowanie przez scalanie - liczba porównań o Dla uproszczenia obliczeń załóżmy, że (*) n=2 k. Oznaczmy przez r(n) liczbę porównań dla n elementów. Wtedy: 0 dla n=1 2*r(n/2)+(n-1) dla n>1 r(n) = o Z powyższego: n (**) r(n/2) = 2 * r(n/4)+(n/2 -1) n (***) r(n/4) = 2 * r(n/8)+(n/4 -1) o Rozwiązujemy rekurencję korzystając z (*) i (**), a potem uogólniając i podstawiając (*) 2 k=n, k=log 2 n.
Sortowanie przez scalanie - liczba porównań n (*) n=2 k, k=log 2 n n (**) n (***) r(n/4) = 2 * r(n/8)+(n/4 -1) r(n/2) = 2 * r(n/4)+(n/2 -1) Rozwiązanie: r(n)=2*r(n/2)+(n-1)= (**) = 2*(2 * r(n/4)+(n/2 -1))+(n-1) = = 22*r(n/22)+(n-21)+(n-1)= (***) = = = (*) = 22*(2 * r(n/23)+(n/22 -1))+(n-21)+(n-1)= 23*r(n/23)+(n-22)+(n-21)+(n-1) = … = 2 k*r(n/2 k)+(n-2 k-1)+ … +(n-22)+(n-21)+(n-20) = 0+k*n-(2 k-1+ … +22+21+20) = k*n-2 k+1 =n*log 2 n-n+1
Drzewo algorytmu sortowania z porównaniami Dane: trzy liczby a, b, c Wynik: liczby a, b, c w kolejności niemalejącej a<=b Nie Tak c<=b c<=a Tak Nie c, a, b Tak c, b, a b<=c Tak a, b, c Nie c<=a Nie Tak Nie a, c, b b, c, a b, a, c
Drzewo algorytmu sortowania z porównaniami o o o Wysokość drzewa (liczba połączeń od wierzchołka do liścia) jest największą możliwą liczbą operacji porównania elementów wykonywanych dla jakiegokolwiek możliwego układu danych. Twierdzenie: Nie jest możliwe opracowanie algorytmu porządkowania opartego na porównaniach, w którym byłoby wykonywanych mniej niż rzędu n*log 2 n porównań elementów. Algorytm sortowania przez scalanie jest optymalnym algorytmem sortowania przez porównania.
Szkoła ponadpodstawowa – poziom rozszerzony Uczeń wykorzystuje znane sobie algorytmy przy rozwiązywaniu i programowaniu rozwiązań następujących problemów: o […] o znajdowania w ciągu podciągów o różnorodnych własnościach, np. najdłuższego spójnego podciągu niemalejącego, spójnego podciągu o największej sumie, o […]
Lista zliczająca - zastosowanie o o Dane: n naturalne, ciąg n liczb a 0, a 1, … , an-1 mogących stanowić indeksy listy, o znanym zakresie wartości, k przedziałów <x, y>, 0<=x, y<=n-1, x<=y Wynik: Dla każdego przedziału odpowiedź na pytanie, ile jest liczb w tym przedziale. Z o o 0 1 1 3 2 2 3 2 4 1 5 1 6 0 7 1 8 0 9 1 Przykład: dla przedziału <2, 7> trzeba zsumować wartości listy Z od Z[2] do Z[7] Dla k zapytań o przedziały pesymistycznie wykonamy liczbę operacji dodawania elementów rzędu k*zakres.
Sumy prefiksowe o Suma prefiksowa jest to suma danej ilości początkowych elementów tablicy: Z pref 0 0 0 1 1 3 2 2 1 1 2 4 3 6 3 2 4 8 4 1 5 9 5 1 6 0 7 1 8 0 9 1 6 7 8 9 10 10 10 11 11 12
Sumy prefiksowe o Suma prefiksowa jest to suma danej ilości początkowych elementów tablicy: Z pref 0 0 0 1 1 3 2 2 1 1 2 4 3 6 3 2 4 8 4 1 5 9 5 1 6 0 7 1 8 0 9 1 6 7 8 9 10 10 10 11 11 12
Sumy prefiksowe o Suma prefiksowa jest to suma danej ilości początkowych elementów tablicy: Z pref 0 0 0 1 1 3 2 2 1 1 2 4 3 6 3 2 4 8 4 1 5 9 5 1 6 0 7 1 8 0 9 1 6 7 8 9 10 10 10 11 11 12
Sumy prefiksowe o Suma prefiksowa jest to suma danej ilości początkowych elementów tablicy: Z 0 1 1 3 2 2 3 2 4 1 5 1 6 0 7 1 8 0 9 1 itd. pref 0 0 1 1 2 4 3 6 4 8 5 9 6 7 8 9 10 10 10 11 11 12
Zapytania o przedziały na sumach prefiksowych o o Lista prefiksowa: pref[0] = 0 i pref[i+1]=pref[i]+Z[i] By obliczyć liczbę liczb z przedziału <x, y> wykonujemy operację pref[y+1]-pref[x]. Z 0 1 1 3 2 2 3 2 4 1 5 1 6 0 7 1 8 0 9 1 pref 0 0 1 1 2 4 3 6 4 8 5 9 6 7 8 9 10 10 10 11 11 12 Przykład: dla <2, 7> wystarczy obliczyć różnicę pref[8]-pref[2] Dla wszystkich przedziałów: liczba operacji odejmowania rzędu k.
Metoda gąsienicy o o o Dane: n naturalne, A - ciąg n liczb a 0, a 1, … , an-1 naturalnych, x - liczba naturalna Wynik: Sprawdź, czy w A istnieje spójny podciąg o sumie x. Jeśli odpowiedź jest twierdząca, podaj indeks początkowy i końcowy tego pociągu, w przeciwnym razie wypisz komunikat: BRAK. Niech x=10 A 0 1 2 3 3 o o 5 3 1 4 4 5 2 6 2 7 1 początek=0 koniec=0 suma=3 x > suma – zwiększamy prawy indeks 8 9 9 10 11 1 0 7
Metoda gąsienicy o o o Dane: n naturalne, A - ciąg n liczb a 0, a 1, … , an-1 naturalnych, x - liczba naturalna Wynik: Sprawdź, czy w A istnieje spójny podciąg o sumie x. Jeśli odpowiedź jest twierdząca, podaj indeks początkowy i końcowy tego pociągu, w przeciwnym razie wypisz komunikat: BRAK. Niech x=10 A 0 1 2 3 3 o o 5 3 początek=0 koniec=1 suma=8 x > suma 1 4 4 5 2 6 2 7 1 8 9 9 10 11 1 0 7
Metoda gąsienicy o o o Dane: n naturalne, A - ciąg n liczb a 0, a 1, … , an-1 naturalnych, x - liczba naturalna Wynik: Sprawdź, czy w A istnieje spójny podciąg o sumie x. Jeśli odpowiedź jest twierdząca, podaj indeks początkowy i końcowy tego pociągu, w przeciwnym razie wypisz komunikat: BRAK. Niech x=10 A 0 1 2 3 3 o o 5 3 1 4 4 5 2 6 2 7 1 początek=0 koniec=2 suma=11 x < suma – zwiększamy lewy indeks 8 9 9 10 11 1 0 7
Metoda gąsienicy o o o Dane: n naturalne, A - ciąg n liczb a 0, a 1, … , an-1 naturalnych, x - liczba naturalna Wynik: Sprawdź, czy w A istnieje spójny podciąg o sumie x. Jeśli odpowiedź jest twierdząca, podaj indeks początkowy i końcowy tego pociągu, w przeciwnym razie wypisz komunikat: BRAK. Niech x=10 A 0 1 2 3 3 o o 5 3 początek=1 koniec=2 suma=8 x < suma 1 4 4 5 2 6 2 7 1 8 9 9 10 11 1 0 7
Metoda gąsienicy o o o Dane: n naturalne, A - ciąg n liczb a 0, a 1, … , an-1 naturalnych, x - liczba naturalna Wynik: Sprawdź, czy w A istnieje spójny podciąg o sumie x. Jeśli odpowiedź jest twierdząca, podaj indeks początkowy i końcowy tego pociągu, w przeciwnym razie wypisz komunikat: BRAK. Niech x=10 A 0 1 2 3 3 o o 5 3 początek=1 koniec=3 suma=9 x < suma 1 4 4 5 2 6 2 7 1 8 9 9 10 11 1 0 7
Metoda gąsienicy o o o Dane: n naturalne, A - ciąg n liczb a 0, a 1, … , an-1 naturalnych, x - liczba naturalna Wynik: Sprawdź, czy w A istnieje spójny podciąg o sumie x. Jeśli odpowiedź jest twierdząca, podaj indeks początkowy i końcowy tego pociągu, w przeciwnym razie wypisz komunikat: BRAK. Niech x=10 A 0 1 2 3 3 o o 5 3 początek=1 koniec=4 suma=13 x > suma 1 4 4 5 2 6 2 7 1 8 9 9 10 11 1 0 7
Metoda gąsienicy o o o Dane: n naturalne, A - ciąg n liczb a 0, a 1, … , an-1 naturalnych, x - liczba naturalna Wynik: Sprawdź, czy w A istnieje spójny podciąg o sumie x. Jeśli odpowiedź jest twierdząca, podaj indeks początkowy i końcowy tego pociągu, w przeciwnym razie wypisz komunikat: BRAK. Niech x=10 A 0 1 2 3 3 o o 5 3 początek=2 koniec=4 suma=8 x < suma 1 4 4 5 2 6 2 7 1 8 9 9 10 11 1 0 7
Metoda gąsienicy o o o Dane: n naturalne, A - ciąg n liczb a 0, a 1, … , an-1 naturalnych, x - liczba naturalna Wynik: Sprawdź, czy w A istnieje spójny podciąg o sumie x. Jeśli odpowiedź jest twierdząca, podaj indeks początkowy oraz końcowy tego pociągu, w przeciwnym razie wypisz komunikat: BRAK. Niech x=10 A 0 1 2 3 3 o o 5 3 początek=2 koniec=5 suma=10 x = suma 1 4 4 5 2 6 2 7 1 8 9 9 10 11 1 0 7
Szukanie lidera o o Dane: n naturalne, ciąg n liczb a 0, a 1, … , an-1 Wynik: Odpowiedź na pytanie, czy w ciągu istnieje lider, jeśli tak, należy podać wartość lidera. Algorytm I: Zliczenie wystąpień każdego elementu. Znalezienie największej wartości w liście zliczeń. Sprawdzenie, czy największa wartość jest większa niż n/2. o Te same ograniczenia, co w sortowaniu przez zliczanie. o Dodatkowa lista dla zliczania – dodatkowe obciążenie pamięci. Algorytm II: Oparty na spostrzeżeniu: Jeśli zbiór X zawiera lidera, a x, y są jego dwoma różnymi elementami, to zbiór X-{x, y} zawiera również tego samego lidera. Uzasadnienie?
Wyszukiwanie lidera - algorytm A 0 3 1 3 2 1 3 1 4 2 5 1 Aktualny kandydat na lidera x=3 Bez pary ile=1 6 1 7 1 8 1 9 10 11 2 1 3
Wyszukiwanie lidera - algorytm A 0 3 1 3 2 1 3 1 4 2 5 1 Aktualny kandydat na lidera x=3 Bez pary ile=2 6 1 7 1 8 1 9 10 11 2 1 3
Wyszukiwanie lidera - algorytm A 0 3 1 3 2 1 3 1 4 2 5 1 Aktualny kandydat na lidera x=3 Bez pary ile=1 6 1 7 1 8 1 9 10 11 2 1 3
Wyszukiwanie lidera - algorytm A 0 3 1 3 2 1 3 1 4 2 5 1 6 1 Aktualny kandydat na lidera x=3 Bez pary ile=0 – zaczynamy od nowa! 7 1 8 1 9 10 11 2 1 3
Wyszukiwanie lidera - algorytm A 0 3 1 3 2 1 3 1 4 2 5 1 Aktualny kandydat na lidera x=2 Bez pary ile=1 6 1 7 1 8 1 9 10 11 2 1 3
Wyszukiwanie lidera - algorytm A 0 3 1 3 2 1 3 1 4 2 5 1 6 1 Aktualny kandydat na lidera x=2 Bez pary ile=0 – zaczynamy od nowa! 7 1 8 1 9 10 11 2 1 3
Wyszukiwanie lidera - algorytm A 0 3 1 3 2 1 3 1 4 2 5 1 Aktualny kandydat na lidera x=1 Bez pary ile=1 6 1 7 1 8 1 9 10 11 2 1 3
Wyszukiwanie lidera - algorytm A 0 3 1 3 2 1 3 1 4 2 5 1 Aktualny kandydat na lidera x=1 Bez pary ile=2 6 1 7 1 8 1 9 10 11 2 1 3
Wyszukiwanie lidera - algorytm A 0 3 1 3 2 1 3 1 4 2 5 1 Aktualny kandydat na lidera x=1 Bez pary ile=3 6 1 7 1 8 1 9 10 11 2 1 3
Wyszukiwanie lidera - algorytm A 0 3 1 3 2 1 3 1 4 2 5 1 Aktualny kandydat na lidera x=1 Bez pary ile=2 6 1 7 1 8 1 9 10 11 2 1 3
Wyszukiwanie lidera - algorytm A 0 3 1 3 2 1 3 1 4 2 5 1 Aktualny kandydat na lidera x=1 Bez pary ile=3 6 1 7 1 8 1 9 10 11 2 1 3
Wyszukiwanie lidera - algorytm A 0 3 1 3 2 1 3 1 4 2 5 1 6 1 7 1 8 1 9 10 11 2 1 3 Aktualny kandydat na lidera x=1 Bez pary ile=2 Kandydatem na lidera jest 1. Teraz trzeba sprawdzić, czy liczba jej wystąpień jest większa od n/2. Zastosuj podobną technikę do wyszukiwania najdłuższego podciągu niemalejącego oraz spójnego podciągu o największej sumie.
Szukanie idola Idol – osoba, która nie zna nikogo, ale wszyscy ja znają. o Dane: n – liczba znajomości, n par opisujących znajomości, para x, y – oznacza, że x zna y. o Wynik: odpowiedź na pytanie: Czy w tej grupie n osób istnieje idol? o Algorytm?
Szkoła ponadpodstawowa – poziom rozszerzony Uczeń objaśnia, a także porównuje podstawowe metody i techniki algorytmiczne oraz struktury danych, wykorzystując przy tym przykłady problemów i algorytmów, w szczególności: o […] o metodę dziel i zwyciężaj (jednoczesne znajdowanie minimum i maksimum, sortowanie przez scalanie i szybkie), o […]
Zaawansowana rekurencja – sortowanie szybkie 0 1 2 3 4 13 3 21 i o 4 7 pivot 5 1 6 15 7 5 8 12 9 3 j Indeksem i przechodzimy w prawo, aż znajdziemy element większy bądź równy pivot.
Rekurencja – sortowanie szybkie 0 1 2 3 4 13 3 21 i o 4 7 5 1 6 15 7 5 8 12 9 3 j Indeksem j przechodzimy w lewo, aż znajdziemy element mniejszy bądź równy pivot.
Rekurencja – sortowanie szybkie 0 4 1 3 i o 2 3 3 21 4 7 5 1 6 15 7 5 8 9 12 13 j Zamieniamy miejscami elementy na których zatrzymaliśmy się.
Rekurencja – sortowanie szybkie 0 4 1 3 2 3 3 21 i o 4 7 5 1 6 15 7 5 8 9 12 13 j Przechodzimy obydwoma indeksami o jeden element do środka.
Rekurencja – sortowanie szybkie 0 4 1 3 2 3 3 21 i 4 7 5 1 6 15 7 5 8 9 12 13 j
Rekurencja – sortowanie szybkie 0 4 1 3 2 3 3 21 i 4 7 5 1 6 15 7 5 j 8 9 12 13
Rekurencja – sortowanie szybkie 0 4 1 3 2 3 3 5 i 4 7 5 1 6 7 8 9 15 21 12 13 j
Rekurencja – sortowanie szybkie 0 4 1 3 2 3 3 5 4 7 i 5 1 6 7 8 9 15 21 12 13 j
Rekurencja – sortowanie szybkie 0 4 1 3 2 3 3 5 4 7 5 1 i j 6 7 8 9 15 21 12 13
Rekurencja – sortowanie szybkie 0 4 1 3 2 3 3 5 4 1 5 7 i j 6 7 8 9 15 21 12 13
Rekurencja – sortowanie szybkie 0 4 1 3 2 3 3 5 4 1 5 7 j i 6 7 8 9 15 21 12 13 Indeksy i i j minęły się, wyznaczając miejsce podziału
Rekurencja – sortowanie szybkie 0 4 i 1 3 2 3 3 5 4 1 j 5 7 6 7 8 9 15 21 12 13 Kontynuujemy rekurencyjnie…
Rekurencja – sortowanie szybkie
Dziękuję za uwagę Anna Beata Kwiatkowska aba@mat. umk. pl
- Slides: 157