1 / 9

Przegląd podstawowych algorytmów

Przegląd podstawowych algorytmów. zajęcia 1. Treść kursu. Zajęcia 1 Wprowadzenie Programowanie dynamiczne Zajęcia 2 Sortowanie Wyszukiwanie binarne Zajęcia 3 Sortowanie pozycyjne Algorytmy zachłanne Zajęcia 4 Rekurencja Przeszukiwanie z nawrotami (backtracking) Zajęcia 5 i 6

decker
Download Presentation

Przegląd podstawowych algorytmów

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Przegląd podstawowych algorytmów zajęcia 1.

  2. Treść kursu • Zajęcia 1 • Wprowadzenie • Programowanie dynamiczne • Zajęcia 2 • Sortowanie • Wyszukiwanie binarne • Zajęcia 3 • Sortowanie pozycyjne • Algorytmy zachłanne • Zajęcia 4 • Rekurencja • Przeszukiwanie z nawrotami (backtracking) • Zajęcia 5 i 6 • Grafy — Wprowadzenie • Zajęcia 7 • Algorytmy tekstowe • Zajęcia 8 • Algorytmy geometryczne

  3. Programowanie dynamiczne • Programowanie dynamiczne: Strategia projektowania algorytmów, która opiera się na obliczaniu wyniku pewnego problemu na podstawie wyników dla tego samego problemu z innymi argumentami.

  4. Definicja 1. Liczby Fibonnaciego • Ciąg liczbowy Fnzadany następującymi równościami: 1. F0 = F1 = 1 2. Fn= Fn−1 + Fn−2 dla n >= 2

  5. Wydawanie reszty • Mamy dany pewien zbiór monet i/lub banknotów, których możemy użyć do wydania konkretnej kwoty. • Pytanie brzmi, jak to zrobić korzystając z najmniejszej możliwej liczby monet lub banknotów.

  6. Wydawanie reszty – rozwiązanie Nie najgorszym pomysłem jest, na przykład, wybieranie zawsze największych nominałów, które mieszczą się w pozostałej do wydania kwocie. Podejście to nazywa się zachłannym. • Pytanie: Czy takie rozwiązanie jest zawsze optymalne (tzn. czy zawsze wydaje kwotę minimalną ilością monet)?

  7. Najdłuższy wspólny podciąg • Mając dane dwa ciągi ani bn, należy znaleźć ich najdłuższy wspólny podciąg, tzn. takie i1< i2< … < ikoraz j1< j2< … < jk, że aim= bjmdla każdego m < 1, 2, . . . , k>. • W tym celu należy obliczyć kolejne wartości macierzy t, gdzie t[g][h] oznacza najdłuższy wspólny podciąg (a raczej jego długość) spośród pierwszych g wyrazów ciągu anoraz pierwszych h wyrazów ciągu bn. Łatwo wtedy obliczymy kolejne wyrazy t. Jeśli bowiem ag= bh, to t[g][h] = 1+t[g − 1][h − 1] a w przeciwnym wypadku: t[g][h] = max(t[g − 1][h], t[g][h − 1])

  8. NWP - Ćwiczenie • Dla podanych ciągów oblicz długość NWP a[11]={0,1,2,3,4,5,6,7,8,9,1}; b[8]={0,2,3,4,1,8,3,6}; Odpowiedz: 123456, dł:6

  9. NWPOptymalizacja zużycia pamięci // A i B to długości ciągów a i b // tablica t[2][B] jest początkowo wyzerowana for(int g=1; g<=A; g++) for(int h=1; h<=B; h++) if(a[g] == b[h]) t[g % 2][h] = 1 + t[1 - g % 2][h - 1]; else t[g % 2][h] = max(t[1 - g % 2][h], t[g % 2][h - 1]);

More Related