Komponenty souvislosti

Pro neorientované grafy jsme řešili problém testování souvislosti. Zároveň jsme při tom přiřazovali vrcholy do komponent.

Naším cílem bylo napsat pseudokód tak, aby mu kromě autora rozuměl také někdo další.

Algoritmus na testování souvislosti

Příklad pseudokódu (pokud není srozumitelný, tak mi napište co vam není jasné):

souvislost(G,komp): boolean
{ G(V,E) - reprezentace neorientovaneho grafu
  komp - pole delky |V|. }
{ Algoritmus vraci true pokud je graf souvisly false pokud neni.
  Pole komp po skonceni algoritmu obsahuje cisla komponent.
  Pro kazde dva ruzne vrcholy u,v, ktere patri do
  stejne komponenty pritom plati: komp[u] = komp[v] }

{ pomocne datove struktury }
Z - zasobnik s operacemi push(x) a pop
T - mnozina vrcholu ke zpracovani

{ inicializace }
Z := empty { zaciname s prazdnym zasobnikem }
T := V     { je treba postupne zpracovat vsechny vrcholy }
k := 1     { promenna obsahujici cislo aktualni komponenty }

 1 while not empty(T) do
 2   v := remove(T) { odebereme libovolny prvek z T }
 3   komp[v] := k   { priradime ho do aktualni komponenty }
     { zaradime vsechny sousedy ke zpracovani }
 4   forall x in v.sousedi do Z.push(x)   

 5   while not empty(Z) do
 6     s := pop(Z) { postupne bereme vrcholy ze zasobniku }
 7     komp[s] := k { prirazujeme je k aktualni komponente }
       { a zpracovavame jejich okoli }
 8     forall x in s.sousedi do Z.push(x)
 9     remove(s,T) { takto zpracovane vrcholy uz nemusi byt v T }
  
10   k := k + 1  { komponenta je zpracovana jdeme na dalsi }

11 if k > 1 then
12   souvislost:= false  { jedna komponenta - > G je souvisly }
13 else
14   souvislost:= true   { vice nez jedna - > G je nesouvisly }

Základy objektového programování

V druhé části cvičení jsme si řekli něco málo o objektovém programování. Klíčové pojmy, o kterých byla řeč jsou:

  1. objekt - speciální typová konstrukce (podobná typu record), která sdružuje proměnné a funkce, tvořící logicky související celek.
  2. metoda - funkce deklarovaná uvnitř objektu. Definuje se později spolu s ostatními funkcemi. Volá se (a definuje se) přes oprátor "."(tečka). Přikládám sem původní nedoplněný příklad s komplexními čísly, kde je třeba pro správnou funkčnost implementovat chybějící metody třídy TComplex.
  3. konstruktor - speciální metoda, která se volá při inicializaci konkrétní instance objektu.
  4. destruktor - speciální metoda, která se volá při zrušení konkrétní instance objektu.
  5. dědičnost - mechanismus, který umožňuje znovuvyužití kódu existujícího objektu v jiném objektu. Na konkrétním příkladu jsme si ukázali jak lze využít dědičnost ke specializaci objektů.

Úloha

Do CodExu jsem zadal apokalyptickou úlohu za standartních 30 bodů.