dydaktyka

Algorytmy i struktury danych

Grzegorz Bancerek
WSFiZ Ełk, II rok, III semestr, informatyka, 2006


Slajdy do wykładu, logowanie do testów i wyników (rejestracja ze statusem: "student WSFiZ"), tydzień: I(07.10.2006), II(13.10.2006), III(20.10.2006), IV(27.10.2006), V(03.11.2006), VI(10.11.2006), VII(17.11.2006), VIII(24.11.2006), IX(01.12.2006), X(08.12.2006), XI(15.12.2006), XII(12.01.2007), XIII(19.01.2007), XIV(26.01.2007)
Zasady zaliczenia laboratorium: Na każdych zajęciach podawany jest problem do sprogramowania. Za poprawne sprogramowanie problemu w czasie zajęć można uzyskać 2 punkty. Za oddanie i obronienie (należy odpowiedzieć na prę pytań) programu na następnych zajęciach otrzymuje się 1 punkt. Na ostatnich zajęciach punkty są przeliczane na oceny według tabeli:
punktyocena
0-4.9992
5-8.9993
9-12.9993+
13-16.9994
17-21.9994+
22-5

  1. 06.10.2006
    Wykład: Poprawność i złożoność algorytmu, rzędy wielkości funkcji
    Laboratorium: Porównanie trzech metod obliczania potęgi (patrz slady z wykładu 1.1-1.3). Należy dla każdej metody obliczyć ilość wykonanych mnożeń oraz podać czas działania (przykład oblicznia czasu działania: czas.pas). Żeby czas był miarodajny należy obliczenia wykonać odpowiednio dużą ilość razy (np. 30000).
  2. 20.10.2006
    Wykład: Hierarchia wielkości funkcji. Algorytmy obliczania symbolu Newtona - metoda dynamiczna
    Laboratorium: Porównanie metod obliczania symbolu Newtona (patrz slady z wykładu): Należy dla każdej metody obliczyć ilość wykonanych mnożeń (metody 1-4) lub dodawań (metody 5-7) oraz podać czas działania (przykład oblicznia czasu działania: czas.pas). Żeby czas był miarodajny należy obliczenia wykonać odpowiednio dużą ilość razy (np. 30000).
  3. 20.10.2006
    Wykład: Metody sortowania: wybieranie, wstawianie, bąbelkowe, Shella
    26.10.2006
    Laboratorium: Porównanie 2 metod sortowania.
  4. 27.10.2006
    Wykład: Listy, kolejki, stosy.
    Laboratorium: Zaimplementować stos jako listę jednokierunkową z ilością elementów:
    type
      List = ^Element;
      Element = record
       nbr: integer;
       next: List;
      end;
      Stack = record
       First: List;
       Count: word;
      end;
    
      procedure Init(var S: Stack);
      function Empty(S: Stack): boolean;
      function First(S: Stack): integer;
      procedure Push(var S: Stack; i: integer);
      procedure Pop(var S: Stack);
    

  5. 03.11.2006
    Wykład: Sortowanie przez scalenie i szybkie. Metoda ,,dziel i zwyciężaj''
    Laboratorium: Zaimplementować sortowanie przez scalanie przy użyciu kolejek. Należy użyć jednostki LISTY (uses LISTY), której interfejs wyglada tak (tego nie należy kopiować do programu)

    Program powinien wyglądać tak:
    Program MergeSort;
    
    uses Listy, crt;
    
    procedure Dziel(var K,K1,K2: Kolejka);
    begin
    { Dzieli kolejkę K na dwie części, które zapisuje do K1 i K2}
    end;
    
    procedure Scal(var K1,K2,K: Kolejka);
    begin
    { scala posortowane kolejki K1 i K2 w pustą kolejkę K }
    end;
    
    procedure SortowaniePrzezScalanie(var K: Kolejka);
    var K1,K2: Kolejka;
    begin
      Init(K1);
      Init(K2);
      if K.Count > 1 then
      begin
        Dziel(K,K1,K2);
        SortowaniePrzezScalanie(K1);
        SortowaniePrzezScalanie(K2);
        Scal(K1,K2,K);
      end;
      
    end;
    
    var K: Kolejka;
    
    begin
    { Wczytanie z pliku 'dane.txt' liczb do sortowanie do kolejki K }
      SortowaniePrzezScalanie(K);
    { Wypisanie kolejki K }
    end.
    

  6. 10.11.2006
    Wykład: Sortowanie przez kopcowanie.
    Laboratorium: Zakończenie implementacji sortowania przez scalanie przy użyciu kolejek.
  7. 17.11.2006
    Wykład: Sortowanie przez wstawianie połówkowe, sortowanie leksykograficzne (pozycyjne).
    Laboratorium: Implementacja sortowania leksykograficznego przy użyciu kolejek.
  8. 24.11.2006
    Wykład: Drzewa binarnego wyszukiwania.
    Laboratorium: Implementacja podstawowych operacji na drzewach binarnych.
  9. IX(01.12.2006)
    Wykład: Drzewa AVL.
    Laboratorium: Implementacja podstawowych operacji na drzewach AVL.
  10. X(08.12.2006) Wykład: UNION-FIND
    Laboratorium: Implementacja podstawowych operacji na drzewach AVL.
  11. XI(15.12.2006) Wykład: Grafy, tablica list incydencji , przeglądanie grafu wszerz i w głąb. Algorytm Kruskala (użycie UNION-FIND)
    Laboratorium: Implementacja algorytmu Kruskala.
    {UNION-FIND}
      var Ojciec: array[1..n] of 0..n;  (* 0 - brak ojca *)
      var Ilosc: array[1..n] of 1..n; (* ilosc reprezentowanych elementow *)
    
      procedure Init_UNION_FIND; (* wpisuje zera do Ojciec i jedynki do Ilosc *)
      function FIND(i: integer): integer; (* rekurencyjnie znajduje reprezentanta elementu i *)
                                          (* uzywajac tablicy Ojciec *)
      procedure UNION(i,j: integer);  (* zakladamy, ze i <> j oraz i i j nie maja ojcow *)
                                      (* laczymy zbiory reprezentowane przez i i j *)
    
    {KRUSKAL}
      var Wedges: array[1..m] of record
            start, koniec, waga: integer;
          end;
      ReadGraph; { wczytuje z pliku m krawedzi (trojek liczb) }
      SortWedges; { sortuje krawedzie wg wag }
      Init_UNION_FIND;
      for i:=1 to m do
      begin
        p:=FIND(Wedges[i].start);
        k:=FIND(Wedges[i].koniec);
        if p <> k then
        begin
          { wypisz krawedz }
          UNION(p,k);
        end;
      end;
    

  12. XII(12.01.2007)
  13. XIII(19.01.2007)
  14. XIV(26.01.2007)

Grzegorz Bancerek