Anvendelser av grafer

Like dokumenter
Anvendelser av grafer

Vi skal se på grafalgoritmer for:

Uretta grafar (1) Mengde nodar Mengde kantar som er eit uordna par av nodar

Grunnleggende Grafteori

Grunnleggende Grafalgoritmer

INF Algoritmer og datastrukturer

INF Algoritmer og datastrukturer

INF Algoritmer og datastrukturer

INF Algoritmer og datastrukturer

Dagens plan: INF Algoritmer og datastrukturer. Grafer vi har sett allerede. Det første grafteoretiske problem: Broene i Königsberg

Det første grafteoretiske problem: Broene i Königsberg

Definisjon: Et sortert tre

Datastrukturer for rask søking

EKSAMEN. Dato: 18. mai 2017 Eksamenstid: 09:00 13:00

INF1020 Algoritmer og datastrukturer GRAFER

Søkeproblemet. Gitt en datastruktur med n elementer: Finnes et bestemt element (eller en bestemt verdi) x lagret i datastrukturen eller ikke?

Eksamen iin115, 14. mai 1998 Side 2 Oppgave 1 15 % Du skal skrive en prosedyre lagalle som i en global character array S(1:n) genererer alle sekvenser

PG4200 Algoritmer og datastrukturer Forelesning 10

Et eksempel: Åtterspillet

Innledning. IN2010/INF Algoritmer og datastrukturer. Tirsdag 27. november 2018 Kl (4 timer)

Lenkelister, iteratorer, indre klasser. Repetisjonskurs våren 2018 kristijb

Ny/utsatt EKSAMEN. Dato: 6. januar 2017 Eksamenstid: 09:00 13:00

Oppgave 1. Sekvenser (20%)

Definisjon. I et binært tre har hver node enten 0, 1 eller 2 barn

Løsnings forslag i java In115, Våren 1996

Ny/utsatt EKSAMEN. Dato: 5. januar 2018 Eksamenstid: 09:00 13:00

Alg. Dat. Øvingsforelesning 3. Grafer, BFS, DFS og hashing. Børge Rødsjø

IN Algoritmer og datastrukturer

MAT1030 Forelesning 22

Heap og prioritetskø. Marjory the Trash Heap fra Fraggle Rock

Introduksjon. MAT1030 Diskret Matematikk. Introduksjon. En graf. Forelesning 22: Grafteori. Roger Antonsen

Algoritmer og Datastrukturer

Introduksjon. MAT1030 Diskret matematikk. Søkealgoritmer for grafer. En graf

MAT1030 Diskret matematikk

Kondisjonstest. Algoritmer og datastrukturer. Python-oppgaver - LF. Onsdag 6. oktober Her er noen repetisjonsoppgaver i Python.

Algoritmer og datastrukturer Kapittel 11 Delkapittel 11.2

Alg. Dat. Øvingsforelesning 3. Grafer, BFS, DFS og hashing

LO118D Forelesning 9 (DM)

INF1020 Algoritmer og datastrukturer GRAFER

MAT1030 Forelesning 22

Kombinatorikk. MAT1030 Diskret Matematikk. Oppsummering av regneprinsipper

MAT1030 Diskret Matematikk

Hva er en liste? Hvert element har en forgjenger, unntatt første element i listen. Hvert element har en etterfølger, unntatt siste element i listen

Eksamen iin115 og IN110, 15. mai 1997 Side 2 Oppgave 1 Trær 55 % Vi skal i denne oppgaven se på en form for søkestrukturer som er spesielt godt egnet

PG4200 Algoritmer og datastrukturer Forelesning 7

Backtracking som løsningsmetode

Eksamen i fag SIF8010 Algoritmer og Datastrukturer Tirsdag 14. Desember 1999, kl

Norsk informatikkolympiade runde

Obligatorisk oppgave 1 i INF 4130, høsten 2009

Heap* En heap er et komplett binært tre: En heap er også et monotont binært tre:

NITH PG4200 Algoritmer og datastrukturer Løsningsforslag Eksamen 4.juni 2013

Hva er en kø? En lineær datastruktur der vi til enhver tid kun har tilgang til elementet som ble lagt inn først

KORTESTE STI. Vektede Grafer. Korteste Sti. Dijkstra s Algoritme. Vektet Urettet Graf

INF1010 LISTER. Listeelementer og listeoperasjoner. Foran. Bak

Algoritmer og Datastrukturer

Hva er en liste? Hvert element har en forgjenger, unntatt første element i listen. Hvert element har en etterfølger, unntatt siste element i listen

Løsningsforslag for eksamen i fag TDT4120 Algoritmer og datastrukturer Tirsdag 9. desember 2003, kl

Eksamen i fag SIF8010 Algoritmer og Datastrukturer Tirsdag 18. Desember 2000, kl

Definisjon av binært søketre

Notater til INF2220 Eksamen

EKSAMEN. Dato: 28. mai 2018 Eksamenstid: 09:00 13:00

Liste som abstrakt konsept/datatype

Hva er en kø? En lineær datastruktur der vi til enhver tid kun har tilgang til elementet som ble lagt inn først

IN2010: Forelesning 11. Kombinatorisk søking Beregnbarhet og kompleksitet

INF2220: Forelesning 3. Map og hashing Abstrakte datatyper (kapittel 3.1) Map (kapittel 4.8) Hashing (kapittel 5)

INF2220: Forelesning 3

Hva er en kø? En lineær datastruktur der vi til enhver tid kun har tilgang til elementet som ble lagt inn først

Obligatorisk oppgave 1 INF1020 h2005

Maps og Hashing. INF Algoritmer og datastrukturer. Map - ADT. Map vs Array

Algoritmeanalyse. (og litt om datastrukturer)

Binær heap. En heap er et komplett binært tre:

UNIVERSITETET I OSLO

Korteste vei problemet (seksjon 15.3)

EKSAMENSOPPGAVE. IAI20102 Algoritmer og datastrukturer

EKSAMEN. Dato: 9. mai 2016 Eksamenstid: 09:00 13:00

Maps og Hashing. INF Algoritmer og datastrukturer. Map - ADT. Map vs Array

UNIVERSITETET I OSLO

INF Algoritmer og datastrukturer

INF Algoritmer og datastrukturer

Løsnings forslag i java In115, Våren 1998

PG 4200 Algoritmer og datastrukturer Innlevering 2

Dagens plan. INF Algoritmer og datastrukturer. Koding av tegn. Huffman-koding

TMA4140 Diskret Matematikk Høst 2016

INF1000 (Uke 15) Eksamen V 04

INF1000 (Uke 15) Eksamen V 04

Et eksempel: Åtterspillet

Avsluttende eksamen i TDT4120 Algoritmer og datastrukturer

Informasjon Prøveeksamen i IN1000 høsten 2018

Eksamen i IN 110, 18. mai 1993 Side 2 Del 1 (15%) Vi skal se på prioritetskøer av heltall, der vi hele tiden er interessert i å få ut den minste verdi

Transkript:

Grafer

Anvendelser av grafer Brukes for datasett med ikke-lineære og ikkehierarkiske forbindelser mellom dataobjektene Forbindelsene i en graf er ofte usystematiske Typisk anvendelser er modellering av nettverk: Veisystemer/rutekart Prosesser Sosiale forhold Organisasjonsmodeller Internett / LAN

Flyruter

Veikart med avstandsangivelse

Molekylmodell

Nettverk for signalbehandling

Venner på Facebook

Grafer: Definisjon En graf G består av en mengde V med noder (vertices) sammen med en mengde E med kanter (edges), G = (V, E) En kant er et par (v, w) av noder, som angir at det er en forbindelse mellom nodene Hvis det er en kant mellom nodene v og w, dvs. at (v, w) E, sier vi at de to nodene er naboer i grafen G

Rettede og urettede grafer En graf er rettet hvis kantene er ordnede par: Kantene er énveis En kant (v, w) angir at det er en forbindelse fra v til w, men ikke fra w til v Grafen er urettet hvis kantene ikke er ordnet: Kantene er toveis En kant (v, w) angir at det er en forbindelse både fra v til w og fra w til v

Urettede grafer En vei i grafen er en sekvens av noder der hver node er nabo til neste node i sekvensen En cykel er en vei med minst 3 noder, der siste node på veien er nabo med første En urettet graf er sammenhengende hvis det finnes en vei fra enhver node i grafen til enhver annen node, ellers er den usammenhengende En urettet graf kalles for et tre hvis den er sammenhengende og uten cykler

Sammenhengende, urettet graf Noder: 0, 1, 2, 3, 4, 5, 6 Kanter: (0, 1), (1, 2), (1, 3), (2, 3), (2, 4), (4, 6), (5, 6) Vei: 0, 1, 2, 4, 6, 5 Cykel: 1, 3, 2

Usammenhengende, urettet graf

Tre Grafen er sammenhengende og uten cykler: Et tre

Rettede grafer Kantene i grafen har en retning: Må ha to kanter for å ha forbindelse begge veier mellom to noder Veiene i grafen blir rettede (har en retning) En rettet graf er sterkt sammenhengende hvis det finnes en rettet vei fra enhver node til enhver annen node i grafen En rettet graf er svakt sammenhengende hvis det finnes en vei fra enhver node til enhver annen node i den tilsvarende urettede grafen

Svakt sammenhengende rettet graf

Sterkt sammenhengede rettet graf

Vektede grafer Hver kant har en lengde (eller kostnad) En kant består av tre deler: To noder En verdi som angir kantlengden En vektet graf kan være enten rettet eller urettet Veiene i grafen har en vektet veilengde*: Summen av lengdene av alle kantene langs veien *: Uvektet veilengde er antall kanter langs veien

Urettet vektet graf

Rettet vektet graf

Antall kanter i en graf med n noder Kan anta at det aldri er mer enn én kant fra en node til enhver annen node i grafen Maksimalt antall kanter er da n2 Grafer og nettverk er oftest tynt befolket, dvs, at antall kanter er mye mindre enn n 2, vanligvis O(n) Sparse graph: Antall kanter er O(n) Dense graph: Antall kanter er O(n2 ) Viktig at implementasjon av grafer og grafalgoritmer er effektive når grafen er sparse

3-D dense graph

Datastruktur for grafer Trenger å lagre: Dataene i hver node Hvilke noder som er naboer i grafen (kantene) Evt. lengde/kostnad for hver kant for vektet graf Rettede og urettede grafer lagres på samme måte: En urettet kant (v, w) lagres som de to rettede kantene (v, w) og (w, v) To standard måter å lagre grafen på: Nabomatrise Nabolister

Nabomatriser * Nummererer de n nodene i en graf, fra 0 til n 1 Hele grafen kan representeres med en todimensjonal boolsk n x n tabell/matrise G der: G[i][j] er true hvis og bare hvis det går en kant fra node i til node j, og false ellers For vektede grafer kan det brukes en matrise med kantlengder (heltall eller reelle tall), der: G[i][j] er lik kantlengden hvis det går en kant fra node i til node j, ellers lik uendelig (ingen kant) *: Engelsk: adjacency matrices

Nabomatrise for urettet graf For urettede grafer blir nabomatrisen symmetrisk om hoveddiagonalen, G[i][j] = G[j][i] (redundans) 0 1 2 3 4 5 6 0 T T F F F F F 1 T T T T F F F 2 F T T T T F F 3 F T T T F F F 4 F F T F T F T 5 F F F F F T T 6 F F F F T T T

Nabomatrise for rettet graf Rettede grafer har usymmetrisk nabomatrise 1 2 3 4 5 6 1 T F F F F T 2 F T T F F T 3 F T T T F T 4 T F F T T F 5 F F F T T T 6 T F F T F T (nodene nummereres med start i 1 i figuren ovenfor)

Nabo- / kantmatrise for vektet graf 0 1 2 3 4 5 6 0 0 2 1 1 0 3 10 2 4 0 5 3 2 0 2 8 4 4 0 6 5 0 6 1 0

Nabolister * Nabomatriser bruker O(n2 ) hukommelse, sløsing med plass siden de fleste grafer er sparse Nabolister: Grafen representeres som en array med lister, én liste for hver node i grafen Listen for en node inneholder nodens direkte naboer i grafen Rettede og urettede grafer kan behandles likt, urettede kanter lagres to ganger Nabolisten for en sparse graf med med n noder krever O(n) hukommelse Engelsk: adjacency lists / edge lists

Nabolister for en rettet, vektet graf

Lagring av grafdata på filer Naboliste-formatet er velegnet til lagre en graf som en tekstfil Nodene nummereres fra 0 til n 1 Legger antall noder i grafen, n, først på filen Deretter én linje for hver node, med: Nodenummer Dataene som er lagret i noden Antall naboer En liste med nodenummere for alle naboene I tillegg kantlengder for vektede grafer

Eksempel, lagring av rettet graf 5 0 a 1 1 1 b 2 2 3 2 c 1 3 3 d 1 4 4 e 1 0 Fil: graf_5.txt

Eksempel, lagring av urettet graf 7 0 0 1 1 1 1 3 0 2 3 2 2 3 1 3 4 3 3 2 1 2 4 4 2 2 6 5 5 1 6 6 6 2 4 5 Fil: graf_7.txt

Eksempel, lagring av urettet graf 17 0 A 2 3 5 1 B 4 2 4 5 8 2 C 2 1 5 3 D 2 0 12 4 E 4 1 5 9 12 5 F 4 0 1 2 4 6 G 2 8 10 7 H 3 11 12 13 8 I 3 1 6 10 9 J 3 4 15 16 10 K 2 6 8 11 L 2 7 16 12 M 4 3 4 7 16 13 N 1 7 14 O 1 15 15 P 2 9 14 16 Q 3 9 11 12 Fil: graf_17.txt

Uvektet graf: Enkel implementasjon Noder med data som bare er enkel tekst-streng Representerer grafen som en Java-klasse med: En array med dataene i hver node En nabomatrise, der rettede og urettede grafer lagres på samme måte Leser inn hele grafen fra fil ved opprettelse av et nytt graf-objekt ingen metoder for innsetting eller fjerning av data i grafen Java-kode: enkelgraf.java

Eksempel, lagring av urettet, vektet graf 5 0 1 2 1 2 3 5 1 2 4 0 2 2 14 3 5 4 4 2 3 2 1 14 4 34 3 4 3 0 5 1 5 4 58 4 5 3 1 4 2 34 3 58 Fil: vgraf_5.txt

Eksempel, lagring av rettet, vektet graf 7 0 V0 2 1 2 3 1 1 V1 2 3 3 4 10 2 V2 2 0 4 5 5 3 V3 4 2 2 4 2 5 8 6 4 4 V4 1 6 6 5 V5 0 6 V6 1 5 1 Fil: vgraf_7.txt

Vektet graf: Enkel implementasjon Noder med data som bare er enkel tekst-streng Representerer grafen som en Java-klasse med: En array med dataene i hver node En vekt-/kantlengde-matrise, der rettede og urettede kanter lagres på samme måte Ingen kant representeres med verdien uendelig Leser inn hele grafen fra fil ved opprettelse av et nytt graf-objekt ingen metoder for innsetting eller fjerning av data i grafen Java-kode: enkelvektetgraf.java