Strona wykładu Programowanie 2 (Python) w semestrze letnim 2024/2025

Opis przedmiotu i warunki zaliczenia
Szczegółowe zasady zaliczania laboratoriów w grupie 1
Listy zadań

Środowisko

Przydatne linki

Literatura do wykładu

  1. Bradley N. Miller — Problem Solving with Algorithms and Data Structures Using Python, link.
  2. Thomas Cormen, Charles Leiserson, Ronald Rivest, Clifford Stein — Wprowadzenie do algorytmów.
  3. Dusty Phillips — Python 3 Object Oriented Programming.
  4. Luciano Ramalho — Fluent Python: Clear, Concise, and Effective Programming.

Omówiony materiał

  1. Wstęp do analizy złożoności czasowej algorytmów. Notacja asymptotyczna: zbiory O(·), Ω(·) i Θ(·) ich podstawowe własności. Porządek na klasach Θ(·). Rozmiar danych. Przypadek pesymistyczny, optymistyczny i średni. Slajdy. Skrypt.
  2. Analiza czasu działania algorytmów, złożoność operacji na kolekcjach Pythona. Stos i jego zastosowania: przykład weryfikacji poprawności nawiasowania. Slajdy. Przykłady: implementacja stosu, sprawdzanie nawiasowania (źródło), animacje weryfikacji nawiasowania. Skrypt (Jupyter notebook + HTML). Bonus: wypisywanie liczby w zadanej podstawie
  3. Notacja postfiksowa (odwrotna notacja polska). Konwersja wyrażeń arytmetycznych do ONP i wyliczanie ich wartości. Kolejka i przykłady zastosowań. Materiały + skrypt.
  4. Iteratory i generatory. Implementacja iteratora dla stosu przez klasę i przez funkcję generującą. Lista łączona i jej zastosowania: stos i kolejka. Materiały. Bonus (poza wykładem): iteratory ze zwykłych funkcji.
  5. Algorytmy sortujące: przez wybieranie, przez wstawianie, przez scalanie, szybkie. Stabilność sortowania. Niezmiennik pętli i złożoność pamięciowa. Materiały.
  6. Drzewa i drzewa binarne. Parsowanie wyrażeń arytmetycznych do drzew. Drzewa wyszukiwań binarnych. Materiały.