Plan na cvicenie

Na 9. cvicenie nastudovat prednasku PT09.pdf

Konkretne z PT09:
  • Hľadanie do hĺbky (DFS)
  • Hľadanie do šírky (BFS)
  • Orientovaný graf
  • Neorientovaný graf
  • Hranovo-ohodnotený graf
  • Reprezentacia grafov
  • Najkratšia cesta
  • Dijkstrov algoritmus
  • Bellman-Ford algoritmus

Hľadanie do hĺbky (DFS)

Poradie v akom sa pristupuje k vrcholom
DFS

Zdroj: Wikipédia

Hľadanie do šírky (BFS)

Poradie v akom sa pristupuje k vrcholom
BFS

Zdroj: Wikipédia


Dijkstrov algoritmus

Mějme graf G, v němž hledáme nejkratší cestu. Řekněme, že V je množina všech vrcholů grafu G a množina E obsahuje všechny hrany grafu G. Algoritmus pracuje tak, že si pro každý vrchol v z V pamatuje délku nejkratší cesty, kterou se k němu dá dostat. Označme tuto hodnotu jako d[v]. Na začátku mají všechny vrcholy v hodnotu d[v]=∞, kromě počátečního vrcholu s, který má d[s]=0. Nekonečno symbolizuje, že neznáme cestu k vrcholu.

Dále si algoritmus udržuje množiny Z a N, kde Z obsahuje už navštívené vrcholy a N dosud nenavštívené. Algoritmus pracuje v cyklu tak dlouho, dokud N není prázdná. V každém průchodu cyklu se přidá jeden vrchol vmin z N do Z, a to takový, který má nejmenší hodnotu d[v] ze všech vrcholů v z N.

Pro každý vrchol u, do kterého vede hrana (označme její délku jako l(vmin,u)) z vmin, se provede následující operace: pokud (d[vmin] + l(vmin,u)) < d[u], pak do d[u] přiřaď hodnotu d[vmin] + l(vmin,u), jinak neprováděj nic.

Až algoritmus skončí, potom pro každý vrchol v z V je délka jeho nejkratší cesty od počátečního vrcholu s uložena v d[v].

Pseudokód

			   function Dijkstra(E, V, s):
			      for each vertex v in V:           // Inicializace
			          d[v] := infinity               // Zatím neznámá vzdálenost z počátku s do vrcholu v
			          p[v] := undefined              // Předchozí vrchol na nejkratší cestě z počátku s k cíli
			      d[s] := 0                          // Vzdálenost z s do s
			      N := V                             // Množina všech dosud nenavštívených vrcholů. Na začátku všech vrcholů.
			      while N is not empty:             // Samotný algoritmus
			         u := extract_min(N)            // Vezměme "nejlepší" vrchol                          
			          for each neighbor v of u:
			             alt = d[u] + l(u, v)       // v 1. smyčce cyklu u je s d[u] = 0
			             if alt < d[v]              
			                 d[v] := alt
			                 p[v] := u
        

V případě, že nás zajímá pouze nejkratší cesta mezi zdrojovým a cílovým vrcholem, můžeme ukončit hledání na řádce 9 if u = target. Cestu ze zdroje do cíle pak zjistíme cyklem:

			S := empty sequence 
		    u := target
			while defined p[u]
			    insert u at the beginning of S
			    u := p[u]
		

Zdroj: Wikipédia


Uloha 8

Pouzite kod z Ulohy 7 (Binarny vyhladavaci strom), ktory naplnite.

  • 1. Potom vyvorite funkciu na Hladanie do hlbky s obmedzenim na zadanu hlbku.
  • 2. Potom vyvorite funkciu na Hladanie do sirky.

Uloha 9

Vytvorte a naplnte

  • 1. Neorientovaný graf
  • 2. Orientovaný graf
  • 3. Kladne Hranovo-ohodnotený graf

4. Naprogramujte Dijkstrov algoritmus a pouzite ho na najdenie najkratsej cesty z daneho uzla v kladne Hranovo-ohodnotenom grafe.

Uloha 10

Vytvorte a naplnte

  • 1. Neorientovaný graf
  • 2. Orientovaný graf
  • 3. Hranovo-ohodnotený graf (nech obsahuje aj zaporne ohodnotenia)

4. Naprogramujte Bellman-Ford algoritmus a pouzite ho na najdenie najkratsej cesty z daneho uzla v Hranovo-ohodnotenom grafe (nech obsahuje aj zaporne ohodnotenia).

Checklist ;)

Prihláste sa s AIS ID a odškrtnite si úlohy čo ste už urobili a tým mi pomôžete zistiť ako stíhate na cvičení či aj mimo cvičenia.

  • Uloha 8.17
  • Uloha 8.26
  • Uloha 9.16
  • Uloha 9.26
  • Uloha 9.36
  • Uloha 9.42
  • Uloha 10.14
  • Uloha 10.24
  • Uloha 10.32
  • Uloha 10.40