základní pojmy, klasifikace, příklady využití, algoritmy (optimalizační úlohy na grafech) ====== graf ====== * http://voho.eu/wiki/graf/ * = grafické vyjádření vztahů mezi objekty * = dvojice disjunktních množin uzlů (vrcholů, vertex-vertices) a hran (edge-edges), přičemž hrana vždy spojuje právě dva uzly (které nemusí být různé) * {{::grafy1.png?nolink&200|}} * **incidence** = místu vstupu nebo výstupu hrany, vztah hrany s uzlem * **definice grafu** * graf je trojice G={H, U, ρ), kde: * H je množina hran H={h1, h2, ..., hn} * U je množina uzlů U={u1, u2, ..., um} * ρ je indicenční funkce, která je dána předpisem: * pro neorientovaný graf * H -> U ⊗ U (množina všech neuspořádaných dvojic prvků z množiny U) * pro orientovaný graf * H -> U × U (kartézský součin - množina všech uspořádaných dvojic prvků z množiny U) {{ ::hrana.png?nolink&300|}} * **kostra grafu** * libovolný podgraf spojující hranami všechny vrcholy původního grafu * sám neobsahuje žádnou kružnici * **izomorfní graf** * něco s bijekcí (najdu si to!!!!) * mají stejný počet vrcholů i hran * **hrany** * orientovaná, neorientovaná, násobné hrany, rovnoběžné hrany (jaký je rozdíl mezi násobnou a rovnoběžnou???, smyčka * ohodnocená, neohodnocená * vzdálenost, průchodnost, kapacita hrany pro přenos (informace, komodity) * funkce, která dosazuje vrcholům hodnoty s jejich nejkratší vzdáleností = metrika (NUTNOST SOUVISLÉHO GRAFU) ====== typy grafů ====== ===== podle smyček a rovnoběžných hran ===== * jednoduchý graf (obyčejný graf) * nemá ani smyčky ani násobné hrany * {{::obycejnygraf.png?nolink&200|}} * multigraf * obsahuje násobné hrany (tzn. když jsou dva uzly spojeny více hranami) i smyčky * {{::multigraf.png?nolink&200|}} * pseudograf (prostý graf) * obsahuje smyčky * {{::prostygraf.png?nolink&200|}} ===== podle orientace ===== * orientovaný * všechny hrany jsou orientované * vyjadřuje jednostranné (nesymetrické) vztahy mezi uzly * neorientovaný * všechny hrany jsou neorientované * vyjadřuje oboustranné vztahy * např. sourozenci * {{::neorientovana_hrana.png?nolink&200|}} * smíšený * obsahuje orientované i neorientované hrany * v praxi se nepoužívá (spíš se nahradí orientovanými hranami - opačné směry) ===== podle souvislosti ===== * souvislé * musí ∃ cesta mezi každou dvojicí vrcholů * nesouvislé ===== podle ∃ kružnice v grafu ===== * cyklické * acyklické ===== nakreslím ho do roviny bez křížení hran? ===== * rovinné * nerovinné ====== souvislost grafu ====== * kružnice je uzavřená cesta * z každého sledu lze vybrat cestu * v souvislém grafu existuje cesta mezi každou dvojicí jeho uzlů ===== sled ===== * taková posloupnost vrcholů, že mezi každými po sobě dvěma jdoucími je hrana * prostě to musí být spojení ===== tah ===== * sled, kde není žádná hrana víc než jedenkrát * sled, kde se neopakují hrany ===== uzavřený tah ===== * končí tam kde začal. tak jak my. ===== cesta ===== * je sled, ve kterém se neopakují vrcholy * tedy každý vrchol se v cestě objevuje nejvýše jednou. Existuje-li mezi dvěma vrcholy sled v grafu, existuje mezi nimi i cesta ===== kružnice ===== * každá uzavřená cesta ===== cyklus ===== * uzavřená orientovaná cesta ====== reprezentace grafů ====== ===== diagramem ===== ===== definicí ===== ===== maticí ===== * v hlavní diagonále jsou nuly (uvažujeme obyčejný graf bez smyček) * u neorientovaného grafu je symetrická podle hlavní diagonály * vím * **matice sousednosti** * počet hran mezi dvěma sousedními uzly * vím * {{::matice_sousednosti.png?nolink&500|}} ===== datovými strukturami ===== ===== matematicky ===== * **seznam sousedů / seznam vrcholů se seznamem hran** * {{::seznam_sousedu.png?nolink&300|}} * **indidenční matice** * matice sousednosti má UZLY a UZLY v X i Y * tohle to má nahoře HRANY a vlevo UZLY * {{::incidence.png?nolink&300|}} * **matice dosažitelnosti** * je jenom dole pod diagonálou * johooo, pokud do toho čísla existuje sled, tak 1! jinak nula. * takže když nevede nic do 7, tak bude mít celý prázdný řádek ====== strom ====== * souvislý graf * neobsahuje kružnici * mezi každými dvěma vrcholy existuje právě jedna cesta * je to datová struktura ====== úlohy ====== ===== hledání nejkratší cesty===== * Dijkstrův algoritmus * ne záporná délka * Bellman-Fordův * i záporné hrany ===== hledání minimální kostry===== * Kruskalův algoritmus * je hladový ===== hledání maximální kostry===== ====== toky v sítích ====== * pomocí grafů můžeme řešit problém nalezení maximálního toku v síti * vodovodní potrubí, dopravní síť, datová síť ===== síťová analýzy ===== * silniční a uliční síť: * délka * průměrná rychlost * úprava na základě podmínky (na sněhu snížím o 20 %) * speciální ohodnocení - historická hustota dopravy //(to se musím podívat!)// * TMC = Trafic Message Channel - pokud je v daném místě k dispozici, přenáší živá data o aktuální hustotě dopravy * omezení (restrictions) * protože: šířka komunikace (max. povolená čířka vozidla), nosnost mostů, průjezdní výšky podjezdů * definice směru jízdy * bariéry * geografický prvek (bod, linie, plocha), který lze do sítě dynamicky vložit * zákaz (restriction) nebo zdržení (scaled cost) * dočasná uzavírka: uzavření jednoho úseku silnice v síti, stačí jej „přeškrtnout“ krátkou úsečkou liniové bariéry, trasa tomuto úseku vždy vyhne * plošná bariéra charakteru „zdržení“ může být situace, kdy se má algoritmus hledání optimální trasy vyhnout určité oblasti. Např. hustě obydlená oblast je reprezentována polygonem s parametrem „zdržení“ s hodnotu 2 - při výpočtu bude trvat průjezd 2x déle * odbočitelnost * např. jako čas nezbytný na odbočení můžu zahrnout do výpočtu (jakože doleva odbočit bývá těžší a delší) * zákaz odbožení (jednoduchý - nesmím odbožit vlevo, složený - světelná křižovatka) ==== úlohy ==== * **hledání trasy z A do B** * přímo nebo přes libovolný počet průjezdních bodů * výsledkem může být grafický element optimální trasy, ale i podrobný itinerář, přes které ulice nebo čísla silnic se do cíle dostaneme, a to dokonce i včetně informací o směrovém značení * **Service Areas** * obslužnost * podle komunikace * **nejbližší středisko obsluhy (Closest Facility)** * která spádová nemocnice (policejní služebna, obchod) je pro obyvatele z jednotlivých ulic nejbližší * **matice vzdáleností (OD Cost Matrix)** * vygeneruje tabulku známou dříve z běžných autoatlasů, která informuje o vzdálenostech mezi jednotlivými městy * **lokační analýza (Location)** * umožní navrhnout optimální umístění střediska (výjezdové místo HZS) * **alokační analýza (Alocation)** * vypočítá obslužnost daného střediska (výjezdového místa HZS) * **problém optimalizace provozu (Vehicle Routing Problem)** * tak to je hustý! * zákazníci, sklady a vozidla -> rozvézt zboží mezi zákazníky v určitém čase -> počítá i s kapacitou vozidla, závozovými okny, časy kdy jsou vozidla k dispozici