1 / 30

Algorytmy i struktury danych

Algorytmy i struktury danych. Studia stacjonarne: ECTS: 5 Wykłady: 30 Ćwiczenia: 30 Studia niestacjonarne: ECTS : 5 Wykłady: 20 Ćwiczenia:20. Literatura cz.1. Cormen Thomas; Leiserson Charles; Rivest Ronald; Stein Clifford, „Wprowadzenie do Algorytmów”, Wydawnictwo WNT, 2007

Download Presentation

Algorytmy i struktury danych

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. Algorytmy i struktury danych Studia stacjonarne: ECTS: 5 Wykłady: 30 Ćwiczenia: 30 Studia niestacjonarne: ECTS: 5 Wykłady: 20 Ćwiczenia:20

  2. Literatura cz.1 • Cormen Thomas; Leiserson Charles; Rivest Ronald; Stein Clifford, „Wprowadzenie do Algorytmów”, Wydawnictwo WNT, 2007 Wydawnictwo Naukowe PWN, Warszawa 2012, • WirthNiklaus, „Algorytmy+StrukturyDanych=Programy”, Wydawnictwo WNT, 2004. • Sedgewick Robert, „Algorytmy w C++”, Wydawnictwo RM, Warszawa 1999, • Drozdek Adam, „C++. Algorytmy i Struktury Danych”, Wydawnictwo Helion, Gliwice 2004,

  3. Literatura cz.2 • Wróblewski Piotr, „Algorytmy, Struktury Danych i Techniki Programowania”, Wydawnictwo Helion, Gliwice 2010. • Alfred V. Aho, Hopcroft John E. Ullman Jeffrey D., “Projektowanie I analiza algorytmów”, Wydawnictwo Helion, Gliwice 2003, • Alfred V. Aho, Hopcroft John E. Ullman Jeffrey D., “Algorytmy i struktury danych”, Wydawnictwo Helion, Gliwice 2003, • Banachowski Lech, Diks Krzysztof, Rytter Wojciech, „Algorytmy i Struktury danych”, Wydawnictwa Naukowo-Techniczne, Warszawa 1996. • Priceton University, Course on algorithms, http://code.google.com/intl/pl-PL/edu/submissions/SedgewickWayne/index.html, (w językuangielskim)

  4. Podstawowe pojęcia • Algorytm to sposób rozwiązania pewnego zagadnienia, który można zrealizować za pomocą dowolnego języka programowania i na dowolnym komputerze • Struktury danych to obiekty, które powstają w wyniku zastosowania algorytmu do organizacji danych biorących udział w obliczeniach

  5. Rekurencja • Rekurencja - wywołanie kilkakrotne pewnej procedury, która odwołuje się do samej siebie

  6. Przykład funkcji rekurencyjnej double power(double x, unsigned int n){ if (n = = 0) return 1.0 //else return x*power(x,n-1) }

  7. Rodzaje rekurencji

  8. Rekurencja ogonowa: void ogon(int i){ if(i>0){ cout<<i<<’ ’; ogon(i-1); } } Rekurencja pośrednia: Funkcja1()  funcja2() …funkcjan()funkcja1() Rekurencja zagnieżdżona:

  9. Złożoność obliczeniowa • Złożoność obliczeniowa algorytmów to szacowanie efektywności porównywanych algorytmów, wykonujących to samo zadanie lecz innymi metodami. • Istotne są dwa czynniki: • Czas wykonania, • Zajętość pamięci.

  10. Czasy rozwiązywania problemów o wielkich rozmiarach Źródło: R. Sedgewick, Algorytmy w C++, wyd. I., Wydawnictwo RM, Warszawa 1999, s. 38

  11. Przykład 1 • Funkcja silnia 0!=1, n!=n*(n-1)!, n≥1, nN • Kod: Int silnia (int n){ If (n==0) return 1; Return n*silnia(n-1); }

  12. Przykład 2 int count =0; for (int i=0; i<n; i++) if (a[i]==0) count++;

  13. Przykład 3 int count =0; for (int i=0; i<n; i++) for (int j=i+1; j<n; j++) if (a[i]+a[j]==0) count++;

  14. Przykład 3 – notacja tylda

  15. Notacja „tylda” – szacowanie składników • oszacuj czas działania (albo pamięci) jako funkcję, która przyjmuje dane wejściowe o rozmiarze n, • zignoruj wyrazy o mniejszej ważności: • gdy n jest duże, wyrazy są nieistotne, • gdy n jest małe, nie bierzemy ich pod uwagę

  16. c2g(n) f(n) c1g(n) n n0 Notacja Θ • Dla danej funkcji g(n) oznaczamy przez Θ (g(n)) zbiór funkcji • Θ(g(n))={f(n): istnieją dodatnie stałe c1, c2 i n0 takie, że 0≤c1g(n) ≤f(n) ≤c2g(n) dla wszystkich n ≥n0}

  17. cg(n) f(n) n n0 Notacja O • Dla danej funkcji g(n) oznaczamy przez O (g(n)) zbiór funkcji O(g(n))={f(n): istnieją dodatnie stałe c i n0 takie, że 0≤ f(n) ≤cg(n) dla wszystkich n ≥n0}

  18. f(n) cg(n) n n0 Notacja Ω • Dla danej funkcji g(n) oznaczamy przez Ω (g(n)) zbiór funkcji Ω (g(n))={f(n): istnieją dodatnie stałe c i n0 takie, że 0≤cg(n) ≤f(n) dla wszystkich n ≥n0}

  19. Twierdzenie Dla każdych dwóch funkcji f(n) i g(n) zachodzi zależność f(n)= Θ(g(n)) wtedy i tylko wtedy gdy f(n)=O(g(n)) i f(n)= Ω(g(n)). • Notacja o Dla danej funkcji g(n) oznaczamy przez o (g(n)) zbiór funkcji o(g(n))={f(n): dla każdej dodatniej stałej c istnieje stała n0 >0 taka, że 0≤f(n)<cg(n) dla wszystkich n ≥n0} • Notacja ω Dla danej funkcji g(n) oznaczamy przez ω (g(n)) zbiór funkcji ω (g(n))={f(n): dla każdej dodatniej stałej c>0 istnieje stała n0 >0 taka, że 0≤cg(n) <f(n) dla wszystkich n ≥n0}

  20. Równania rekurencyjne • opisuje funkcję złożoności w zależności od jej wartości dla danych wejściowych o mniejszych rozmiarach • Trzy metody rozwiązywanie rekurencji: • metoda podstawiania • metoda iteracyjna • metoda rekurencji uniwersalnej

  21. Metoda podstawiania • Metoda ta najpierw wymaga odgadnięcia postaci rozwiązania a następnie wykazania przez indukcję, że jest ono poprawne. Konieczne tez jest znalezienie odpowiednich stałych. • Metoda ta może być używana do określenia górnego albo dolnego oszacowania na wartości rozwiązania rekurencji

  22. Przykład • Obliczyć ograniczenie górne funkcji zadanej zależności rekurencyjną

  23. Przykład 2 • Zamiana zmiennych

  24. Metoda iteracyjna • Polega na rozwijaniu (iterowaniu) rekurencji i wyrażeniu jej jako sumy składników zależnych tylko od n oraz warunków brzegowych. Następnie można użyć technik sumowania do oszacowania rozwiązania.

  25. Przykład

  26. Twierdzenie o rekurencji uniwersalnej

  27. Przykłady • T(n)=9T(n/3)+n • T(n)=T(2n/3)+1 • T(n)=3T(n/4)+nlgn

  28. Sortowanie przez wstawianie – Insertion sort Insertionsort (data[n]){ for (j=1;j<n;i++){ key=data[j]; //Wstaw data[j] w posortowany ciąg data[1..j-1] i=j-1; while i>0 i data[i]>key { data[i+1]=data[i]; i--; } data[i+1]=key; } }

  29. Sortowanie przez wstawianie Analiza złożoności

  30. Bibliografia • Cormen Thomas; Leiserson Charles; Rivest Ronald; Stein Clifford, „Wprowadzenie do Algorytmów”, Wydawnictwo Naukowe PWN, Warszawa 2012 • Sedgewick Robert, „Algorytmy w C++”, Wydawnictwo RM, Warszawa 1999, • Drozdek Adam, „C++. Algorytmy i Struktury Danych”, Wydawnictwo Helion, Gliwice 2004, • Wróblewski Piotr, „Algorytmy, Struktury Danych i Techniki Programowania”, Wydawnictwo Helion, Gliwice 2010, • Priceton University, Course on algorithms, http://code.google.com/intl/pl-PL/edu/submissions/SedgewickWayne/index.html,

More Related