210 likes | 368 Views
INF 295 Forelesning 15 - kap 9 Grafer. Hans Fr. Nordhaug (Ola Bø). Innhold. Definisjoner Graf Rettet eller urettet Sammenhengende, sterkt eller svakt Vei Lengde og kostnad Enkel eller ikke enkel Syklisk eller asyklisk Grad Anvendelser Grafrepresentasjoner Topologisk sortering.
E N D
INF 295 Forelesning 15 - kap 9 Grafer Hans Fr. Nordhaug (Ola Bø)
Innhold • Definisjoner • Graf • Rettet eller urettet • Sammenhengende, sterkt eller svakt • Vei • Lengde og kostnad • Enkel eller ikke enkel • Syklisk eller asyklisk • Grad • Anvendelser • Grafrepresentasjoner • Topologisk sortering
Definisjoner • En graf G=(V,E) består av • En mengde noder (vertices) V • En mengde kanter (edges) E • |V| er antall noder • |E| er antall kanter • En kant er et par av noder (u,v) • En kant modellerer at u er relatert til v • En kant kan ha vekt eller kostnad • Rettet eller urettet graf • Hvis rekkefølgen u, v har betydning sier vi at grafen er rettet, ellers er den urettet • En rettet (directed) graf kalles en digraf
Definisjoner • En vei er en sekvens av noder w1, w2, w3, slik at alle (wi, wi+1) er en kant • Veilengden er antall kanter • Veikostnaden er summen av kostnader (vekter) langs kantene. • Vei fra wi til wi har lengde 0 - en slik vei kalles en loop. (ikke betraktet i dette kurset) • En vei er enkel hvis alle nodene er forskjellige (unntatt muligens første og siste) • En løkke (sykel) i en rettet graf har v1=vn og lengde >0 • Hvis veien er enkel er det en enkel løkke • I en urettet graf er u,v,u ikke regnet som en sykel • Hvis grafen er rettet, kreves det at alle kanter i løkken være forskjellig
Definisjoner • En rettet graf er asyklisk dersom den ikke har noen løkker • DAG er forkortelse for Directed Acyclic Graph - Rettet asyklisk graf • En urettet graf er sammenhengende hvis det finnes en vei fra hver node til alle andre noder • Rettet graf kan være • Svakt sammenhengende • hvis tilsvarende urettet graf er sammenhengende • Sterkt sammenhengende • hvis det finnes en vei fra hver node til alle andre noder
Definisjoner • Grad • Urettet graf • Graden er antall kanter noden er en del av • Rettet graf • Inngraden er antall innkanter • Utgraden er antall utkanter
Anvendelser • Vanlig bruk av grafer • Trær er grafer • Noder er veikryss, kanter er veier • Kostnad kan være avstand, fartsbegrensning, tranghet • Noder er flyplasser, kanter er flyruter • Kostnad kan være avstand, pris eller tid • Noder er kurs, kanter uttrykker bygger på • Noder er aktiviteter, kanter uttrykker avhengighet • Kanter er aktiviteter med kostnad lik tidsforbruk, Noder er milepæler
Anvendelser • Noder er reservoarer, Kanter er rørledninger • Noder er sammenkoplinger, Kanter er ledninger • Noder er personer, Kanter er forbindelser • Noder er personer, Kanter er slektskap • Noder er objekter, Kanter er meldinger • Noder er rom, kanter er dører • Noder er waypoints, kanter er kurser
Representasjon av grafer • Naboskapsmatrise • A(u,v)=true hvis det går kant fra u til v eller • A(u,v)=5, hvis kostnaden for kanten u,v er fem • Ingen vei indikeres med • Størrelse er O(|V|2) - • uspiselig ved store grafer med få veier • brukbart ved tette grafer • Naboskapslister. • Hver node har en liste over naboer • Egnet ved glisne grafer • Egen naboskapsmatrise (Java spesifikk) • Hver node har en array av naboer • Egnet når naboene er kjent når noden initieres
Topologisk sortering • Ordning av noder fra en DAG slik at hvis det går en sti fra node a til node b, så kommer b etter a i ordninga • Umulig på sykliske grafer • Ordninga er ikke nødvendigvis entydig • Algoritme • Gi alle noder en inngrad tilsvarende antall inn-kanter • Start med node med inngrad=0 • For hver utkant, reduser inngraden i tilsvarende nabo • Fortsett til det ikke er flere noder igjen. • I utgangspunktet O(|V|2) • kan forbedres med kø av noder med inngrad 0 • blir da O(|E|+|V|)
Traversering av grafer (vs. trær) • Dybde først • Prøv stadig videre til neste node • Bredde først • Prøv alle noder som kan rekkes fra en node i tur og orden • Å besøke en node • i et tre er å behandle nodens data • i en graf er å merke den som besøkt! • Traversering • En tretraversering besøker alle treets noder • En graftraversering som begynner i en bestemt node besøker bare noder den kan rekke • Er grafen sammenhengende blir alle noder besøkt i en slik traversering.
Dybde først • Gitt startnoden besøkes først startnoden, så en nabo av startnoden, så en nabo av en nabo av startnoden osv. til node med ingen ubesøkte naboer. Går så et skritt tilbake og prøver å finne ubesøkte naboer der. • Kan implementeres rekursivt.
Bredde først • Gitt startnoden, besøkes først alle naboer til startnoden. Deretter besøkes alle naboene til naboene til startnoden - inntil alle tilgjengelige noder er besøkt. • Implementeres ved hjelp av kø. • En node merkes som besøkt når den legges i køen. • Prosedyre: Plassere startnoden i køen Gjenta til køen er tom Hent node fra køen Legg alle ubesøkte naboer i køen
Oppsummering • Definisjoner • Graf • Rettet eller urettet • Sammenhengende, sterkt eller svakt • Vei • Lengde og kostnad • Enkel eller ikke enkel • Syklisk eller asyklisk • Grad • Anvendelser • Grafrepresentasjoner • Topologisk sortering