Datastrukturer. föreläsning 7. Maps 1

Relevanta dokument
Datastrukturer. föreläsning 7. Maps 1

Datastrukturer. föreläsning 6. Maps 1

Datastrukturer. föreläsning 8. Lecture 6 1

Tentamen Datastrukturer D DAT 035/INN960 (med mycket kortfattade lösningsförslag)

Tentamen Datastrukturer D DAT 035/INN960

Föreläsning 6 Datastrukturer (DAT037)

Datastrukturer. föreläsning 8. Maps 1

Tentamen Datastrukturer D DAT 035/INN960

Föreläsning 8 Datastrukturer (DAT037)

Föreläsning 6 Datastrukturer (DAT037)

Datastrukturer. föreläsning 10. Maps 1

Föreläsning 5: Grafer Del 1

Föreläsning 10. Grafer, Dijkstra och Prim

Föreläsning 10. Grafer, Dijkstra och Prim

Föreläsning 1. Introduktion och sökning i graf. Vad är en algoritm?

Föreläsning 10. Grafer, Dijkstra och Prim

Föreläsning Datastrukturer (DAT036)

Föreläsning Datastrukturer (DAT037)

Föreläsning Datastrukturer (DAT037)

Datastrukturer. föreläsning 9. Maps 1

Grafer, allmänt. Med datastrukturen graf menas vanligen: en mängd av noder (vertices) och en mängd av bågar (edges).

Grafer MST Top. sortering Starkt samm. komponenter Kortaste avstånd. Grafalgoritmer 1. Douglas Wikström KTH Stockholm

Tentamen Datastrukturer D DAT 036/INN960

Datastrukturer. föreläsning 9. Maps 1

Föreläsningsanteckningar F6

Hashtabeller. TDA416, lp3 2016

Föreläsning Datastrukturer (DAT036)

Tentamen Datastrukturer för D2 DAT 035

Tommy Färnqvist, IDA, Linköpings universitet. 1 ADT Map/Dictionary Definitioner Implementation... 2

Föreläsning 8 Datastrukturer (DAT037)

Tommy Färnqvist, IDA, Linköpings universitet. 1 ADT Map/Dictionary Definitioner Implementation... 2

Föreläsning 13 Datastrukturer (DAT037)

Magnus Nielsen, IDA, Linköpings universitet

Tentamen Datastrukturer, DAT037 (DAT036)

Grafer, traversering. Koffman & Wolfgang kapitel 10, avsnitt 4

Tentamen med lösningsförslag Datastrukturer för D2 DAT 035

Lösningsförslag för tentamen i Datastrukturer (DAT036) från

Datastrukturer och algoritmer. Innehåll. Tabell. Tabell - exempel. Gränsyta till Tabell. Tabell. Modell. Hashtabell Relation, lexikon.

Graphs (chapter 14) 1

Föreläsning Datastrukturer (DAT036)

Lösningar Datastrukturer TDA

Föreläsning 13 Datastrukturer (DAT037)

Föreläsning Datastrukturer (DAT037)

Tentamen Datastrukturer D DAT 036/INN960

Föreläsning 7 Datastrukturer (DAT037)

TNK049 Optimeringslära

Avbildningar och hashtabeller. Koffman & Wolfgang kapitel 7, mestadels avsnitt 2 4

Prov i DAT 312: Algoritmer och datastrukturer för systemvetare

Föreläsning Datastrukturer (DAT037)

Trafiksimulering: Grafalgoritmer

Trädstrukturer och grafer

Föreläsning 2: Grafer. Exempel på graf

Innehåll. Föreläsning 10. Specifikation. Mängd. Specifikation. Konstruktion av mängd. Mängd Lexikon Hashtabell

Föreläsning 5 Datastrukturer (DAT037)

Tentamen Datastrukturer D DAT 036/DIT960

Tentamen Datastrukturer (DAT036)

Lösningsförslag till tentamen Datastrukturer, DAT037 (DAT036), Tiden det tar att utföra en iteration av loopen är oberoende av värdet på

Algoritmer och datastrukturer, föreläsning 11

Datastrukturer. föreläsning 3. Stacks 1

Algoritmer, datastrukturer och komplexitet

Datastrukturer och algoritmer. Föreläsning 15 Inför tentamen

Lösningsförslag för tentamen i Datastrukturer (DAT037) från

Programkonstruktion och. Datastrukturer

Tentamen Datastrukturer, DAT037 (DAT036)

Datastrukturer. föreläsning 10. Maps 1

729G04 - Diskret matematik. Lektion 4

Föreläsning 8. Mängd, Avbildning, Hashtabell

Matematik för språkteknologer (5LN445) Institutionen för lingvistik och filologi VT 2014 Författare: Marco Kuhlmann 2013

Föreläsning 10 Datastrukturer (DAT037)

Innehåll. F7: Tabell, hashtabell, relation & lexikon. Gränsyta till Tabell. Tabell. Tabell Hashtabell Relation Lexikon.

MA2047 Algebra och diskret matematik

Programkonstruktion och Datastrukturer

Algoritmer, datastrukturer och komplexitet

Hitta k största bland n element. Föreläsning 13 Innehåll. Histogramproblemet

Sökning. Översikt. Binärt sökträd. Linjär sökning. Binär sökning. Sorterad array. Linjär sökning. Binär sökning Hashtabeller

Innehåll. Föreläsning 12. Binärt sökträd. Binära sökträd. Flervägs sökträd. Balanserade binära sökträd. Sökträd Sökning. Sökning och Sökträd

Datastrukturer och Algoritmer D0041D

Föreläsning Datastrukturer (DAT036)

Algoritmer, datastrukturer och komplexitet

TENTAMEN: Algoritmer och datastrukturer. Läs detta! Uppgifterna är inte avsiktligt ordnade efter svårighetsgrad.

Tommy Färnqvist, IDA, Linköpings universitet. 1 Administrativ information Upplägg... 1

Grundläggande datalogi - Övning 4

Föreläsning 6. Slumptal Testa slumptal Slumptal för olika fördelningar Grafer Datastrukturen graf

Föreläsning 5: Dynamisk programmering

FÖRELÄSNING 11 DATALOGI I

Föreläsning 9 Datastrukturer (DAT037)

Föreläsning Datastrukturer (DAT036)

Programmering för Språkteknologer II. Innehåll. Associativa datastrukturer. Associativa datastrukturer. Binär sökning.

Tentamen TEN1 HI

Datastrukturer och algoritmer. Föreläsning 4 Test, Stack och Kö

Grafer. 1 Grafer. Grunder i matematik och logik (2015) 1.1 Oriktade grafer. Marco Kuhlmann

Grafer och grannmatriser

Föreläsning 8. Mängd, Avbildning, Hashtabell

Datastrukturer. Sammanfattning och Referenshäfte. Guldbrand, Eric Johansson, Algot

Föreläsning 4: Kombinatorisk sökning

Föreläsning 5: Kardinalitet. Funktioners tillväxt

Föreläsning 5: Giriga algoritmer. Kruskals och Prims algoritmer

Algoritmer, datastrukturer och komplexitet

Föreläsning 14 Innehåll

Transkript:

Datastrukturer föreläsning 7 Maps 1

Hashtabeller 0 1 2 3 025-612-0001 4 451-229-0004 981-101-0004 Maps 2

Kollisioner vad gör man? Använder hinkar ( hashing in buckets, chaining ) Cellen med index i innehåller ett litet lexikon med alla nycklar med hashvärde i. Vi kallar detta en hink. Den implementeras ofta som en osorterad lista. Öppen adressering ( open addressing ): Lagra i annan ledig cell (t ex nästa lediga, men det finns andra sätt att välja den nya lediga cellen) Maps 3

Vilket är bäst hinkar eller öppen adressering? enklare att använda hinkar öppen adressering sparar utrymme öppen adressering mer känslig för hög belastningsfaktor både experiment och teoretiska studier har visat att tidskomplexiteten oftast är lika bra eller bättre med hinkar Maps 4

Hashfunktioner Man brukar konstruera en hashfunktion h genom att sätta samman två funktioner: h = h 2 o h 1 Hashkodningen: h 1 : keys integers Kompressionsfunktionen: h 2 : integers [0, N 1] Maps 5

Hashkodning av strängar En sträng är en lista av tecken. Varför inte bara summera hashkoderna för tecknen? Många kollisioner! T ex temp01 och temp10 får samma hashkod och stop, tops, pots, spot får också samma hashkod. Maps 6

Polynomiella hashkoder Koda strängen c 0 c 1 c n Typkonvertera tecknen till heltal vi får i 0 i 1 i n Beräkna polynomet i 0 +i 1 a+ + i n a n för lämpligt a (t ex 33, 37, 39, 41) Maps 7

Hashkoder för objekt Javas klass Object har en metod hashcode() I många Javaimplementeringar ger detta en heltalstolkning av objektets minnesadress! Detta är ej så bra, likadana objekt lagrade på olika ställen får olika hashkoder! Det är bättre att implementera egna hashkoder! Maps 8

Komprimering Enklast med modulo-metoden h 2 (y) = y mod N Hashtabellens storlek N vanligen ett primtal. Försök sprida ytterligare, t ex MADmetoden (multiplicera, addera och dividera): h 2 (y) = (ay + b) mod N a och b är slumpvis valda naturliga tal så att a mod N 0 N primtal Maps 9

Tidskomplexitet Om vi har perfekt hashfunktion (inga kollisioner) är sökning, insättning och borttagning O(1) I värsta fall är alla dessa operationer O(n), utom insättning i hashtabeller med hinkar som är O(1) även i värsta fall. Varför? Belastningsfaktorn α = n/n påverkar effektiviten hos operationerna. Maps 10

Hashtabeller: fördelar och nackdelar Fördelar: - Snabb: O(1) i praktiken vid låg belastningsfaktor - Särskilt bra för stort lexikon - Fördel om max storlek känd i förväg Nackdelar: - Hashfunktionen kan ta signifikant tid att beräkna - Risk för dålig hashfunktion och kollisioner (säkerhetsattack) - Ineffektivt att räkna upp elementen 11

Grafer Maps 12

Grafer ett exempel En oriktad graf: Noderna är flygplatser (trebokstavskombinationer) Det finns en båge mellan två noder omm det finns en flyglinje mellan motsvarande flygplatser. Till varje båge finns dessutom ett tal som representerar avståndet mellan flygplatserna. PVD ORD SFO LGA HNL 337 LAX 1843 1233 802 DFW 849 1120 MIA Maps 13

Riktade och oriktade grafer I en riktad graf har bågarna en riktning. I en oriktad graf saknar bågarna riktning. Exempel. - Ett vägnät med enkelriktade gator kan representeras som en riktad graf - Ett vägnät utan enkelriktade gator kan representeras som en oriktad graf - Obs att en oriktad graf kan ses som ett specialfall av en riktad graf! Maps 14

Vad är en graf, matematiskt? En riktad graf är ett par (V,E) där V är en mängd av noder (hörn) E C VxV är en mängd av ordnade par av noder som kallas bågar (kanter). Om (v,w) är en båge kallas v bågens källa och w bågens mål. Det kan dessutom finnas ytterligare information om bågen, t ex en vikt eller ett namn. En oriktad graf definieras på samma sätt som en riktad graf, med den enda skillnaden att bågarna är oordnade par. Om (v,w) är en båge i en oriktad graf kallar vi v och w bågens ändpunkter. De oriktade graferna kan betraktas som symmetriska riktade grafer, dvs riktade grafer med egenskapen att om (v,w) är en båge i E så är också (w,v) en båge i E. Maps 15

Riktade och oriktade bågar Riktade bågar ordnade par av bågar (u,v) u är källan (ursprungsnoden) v är målet (målnoden) Exempel: bågar är flyglinjer från en flygplats till en annan. Vi har här dessutom information om flyglinjens nummer i bågen. Oriktade bågar oordnade par av bågar (u,v) Exempel: bågar finns mellan flygplatser som har en flyglinje mellan sig. Det finns dessutom information om avståndet mellan flygplatserna. En riktad graf har riktade bågar En oriktad graf har oriktade bågar ORD ORD flight AA 1206 849 miles PVD PVD Maps 16

Fler exempel Elektriska kretsar Vägnät Flygnätverk Flödesscheman Datanätverk Local area network Internet Databaser Entity-relationship diagram Maps 17

Terminologi Ändpunkter U och V är ändpunkter på a Bågar som är förbundna med (eller utgår från) noder a, d, b är förbundna med V Grannoder U och V är grannar En nods grad X har graden 5 Self-loop j är en self-loop Parallella bågar h och i är parallella bågar U a c V W d f b e X Y g h i Z j Maps 18

Mer terminologi Väg Alternerande följd av noder och bågar Börjar och slutar med nod Varje båge kommer mellan sina ändpunktsnoder Om det inte finns parallella bågar räcker det att ange en följd av noder! Enkel väg Exempel Alla noderna är distinkta P 1 =(V,b,X,h,Z) är en enkel väg P 2 =(U,c,W,e,X,g,Y,f,W,d,V) är inte någon enkel väg U a c V d P 2 W f b e P 1 X g Y h Z Maps 19

Ännu mer terminologi Cykel: väg som börjar och slutar i samma nod Enkel cykel: noderna på cykeln är distinkta utom startnoden = slutnoden Exempel: C 1 =(V,b,X,g,Y,f,W,c,U,a,V) är en enkel cykel C 2 =(U,c,W,e,X,g,Y,f,W,d,V,a,V ) är en cykel som inte är enkel (W besöks två gånger) U a c V d C 2 W f b X e Y C 1 g h Z Maps 20

Egenskaper hos oriktade grafer Egenskap 1 Σ v deg(v) = 2m Bevis: varje ändpunkt räknas två gånger Egenskap 2 Om self-loops och parallella bågar saknas gäller m n (n 1)/2 Bevis: en nods grad är högst (n 1). Notation n m deg(v) antalet noder antalet bågar graden hos v Exempel n = 4 m = 6 deg(v) = 3 Maps 21

Hur implementerar man grafer? Det finns tre olika huvudmetoder! - båglista - grannmatris - grannlistor Maps 22

Båglista som implementeringsmetod Grafen implementeras som en lista av noder och en lista av bågar med deras ändpunkter (källor och mål) Denna lista kan implementeras som ett fält eller en länkad lista Problem: om vi befinner oss i en nod måste vi leta genom hela båglistan för att hitta dess grannar Maps 23

Grannmatris (kopplingsmatris) Numrera noderna Grafen implementeras med hjälp av en matris M, så att M[i,j] är 1 om det finns en båge mellan noderna med nummer i och j och 0 annars. (Man kan också lagra information om bågen i M[i,j].) Effektivt (O(1)) att avgöra om två noder är grannar, men utrymmet är O(n 2 ). Bra för täta grafer med många bågar. Maps 24

Grannlistor En lista av par (v,vs) där v är en nod och vs är en lista som innehåller par av grannoder till v och bågarna som går till dem. Listan kan implementeras som ett fält eller en länkad lista. (om grafen är stor kan det även vara lämpligt att använda effektiva datastrukturer som hashtabeller) Bra metod om man enkelt vill kunna hitta en viss nods grannar. Maps 25

Grafrepresentation i Haskell Riktad graf utan information i noderna. Nod och bågmängder implementerade som listor. Båglista type Graph = ([Node],[Edge]) type Edge = (Node,Node) Grannlistor type Graph = [(Node,[Node])] Maps 26

En ADT för riktade grafer Metoder för att få ut information om grafen incidentedges(v) origin(e) destination(e) areadjacent(v, w) Metoder för att ändra grafen insertvertex(v) insertedge(v, w, e) removevertex(v) removeedge(e) Allmänna metoder numvertices() numedges() vertices() edges() Maps 27

Delgrafer En delgraf S till en graf G S noder är en delmängd av Gs S kanter är en delmängd av Gs En uppspännande delgraf till G innehåller alla Gs noder delgraf uppspännande delgraf Maps 28

Sammanhängande En graf är sammanhängande om varje par av noder i grafen är förbundna med en väg En sammanhängande komponent av G är en maximal sammanhängande delgraf av G sammanhängande graf osammanhängande graf med två sammanhängande komponenter Maps 29

Fria träd och skogar Ett fritt träd är en oriktad graf som är sammanhängande saknar cykler Obs att fria träd saknar rot! En skog är en oriktad graf som saknar cykler En sammanhängande komponent i en skog är träd fritt träd skog Maps 30

Uppspännande träd och skogar Ett uppspännande träd för en sammanhängande graf är en uppspännande delgraf som är ett fritt träd En graf kan ha mer än ett uppspännande träd Tillämpning: kommunikationsnätverk En uppspännande skog är en uppspännande delgraf som är en skog graf uppspännande träd Maps 31

Djupet-först sökning (DFS) och bredden-först sökning (BFS) Två metoder att genomsöka en graf; två grafiteratorer! Kan även användas för att avgöra om två noder är sammanbundna. Djupet först: välj en startnod, följ en väg så långt som möjligt, gör sedan backtracking, följ nästa väg så långt som möjligt, osv Bredden först: välj en startnod, genomsök först alla noder med avståndet 1, sedan alla noder med avståndet 2, osv. Lecture 6 32

Djupet-först sökning A B D E C Lecture 6 33

Exempel A obesökt nod A A besökt nod obesökt båge upptäcktsbåge bakåtbåge B C D E A A B D E B D E C C Lecture 6 34

Exempel, fortsättning A A B D E B D E C C A A B D E B D E C C Lecture 6 35

Djupet-först sökning av en labyrint Nod = korsning, hörn eller slut på återvändsgränd Båge = korridor Rekursionsstack för backtracking = rep tillbaka till ingången Lecture 6 36

DFS-algoritmen Algoritmen markerar besökta noder och upptäcktsbågar, dvs den bygger ett DFS-träd. Dessutom markerar den bakåtbågar. Algorithm DFS(G) Input graph G Output labeling of the edges of G as discovery edges and back edges for all u G.vertices() setlabel(u, UNEXPLORED) for all e G.edges() setlabel(e, UNEXPLORED) for all v G.vertices() if getlabel(v) = UNEXPLORED DFS(G, v) Algorithm DFS(G, v) Input graph G and a start vertex v of G Output labeling of the edges of G in the connected component of v as discovery edges and back edges setlabel(v, VISITED) for all e G.incidentEdges(v) if getlabel(e) = UNEXPLORED w opposite(v,e) if getlabel(w) = UNEXPLORED setlabel(e, DISCOVERY) DFS(G, w) else setlabel(e, BACK) Lecture 6 37

DFS: egenskaper Egenskap 1 DFS(G, v) besöker alla noder i vs sammanhängande komponent A Egenskap 2 Upptäcktsbågarna som markeras av DFS(G, v) utgör ett uppspännande träd för vs sammanhängande komponent ett DFS-träd B C D E Lecture 6 38

Analys av DFS Varje nod markeras två gånger En gång som UNEXPLORED En gång som VISITED Varje båge markeras två gånger En gång som UNEXPLORED En gång som DISCOVERY eller BACK Metoden incidentedges anropas en gång för varje nod Exekveringstiden för DFS är O(n + m) om grafen är implementerad som en grannlista Kom ihåg att Σ v deg(v) = 2m Lecture 6 39

Tidskomplexitet i flera variabler När vi introducerade O-komplexitet talade vi bara om funktioner av en variabel (ofta indatastorleken n ). Vi förklarade betydelsen av O(n), O(n 2 ), O(log n), O(n log n), osv Ibland är det naturligt att mäta indatastorleken i flera variabler, t ex * Matrismultiplikation av m*n och n*p matriser har komplexiteten O(mnp) * Djupet först sökning av en graf med n noder och m bägar Maps 40 har komplexiteten O(m+n)

Definition av O(f(m,n)) Definitionen är analog med envariabelfallet: T(m,n) är O(f(m,n)) omm det finns C och n 0 så att T(m,n) < Cf(m,n) för n > n 0 T ex T(m,n) är O(m+n) omm det finns C och n 0 så att T(m,n) < C(m+n) för n > n 0 Maps 41

Vanlig fråga: Kan vi inte förenkla O(mnp) till O(n 3 )? Nej, komplexiteten beror inte bara på n utan också på m och p! Eller till O(k 3 )? Vad skulle k vara? Jo, om t ex k är den maximala dimensionen (k = max(m,n,p)). Vi har alltså att matrismultiplikation är O(max(m,n,p) 3 ) = O((m + n + p) 3 ) Maps 42

Samma fråga om djupet först: Kan vi inte förenkla O(m+n) till O(n) eller O(m)? Nej, komplexiteten beror inte bara på antalet noder eller antalet bågar; den beror på båda! Notera att O(m+n) = O(max(m,n)). Varför? I specialfall, t ex, sammanhängande graf utan parallella bågar har vi att m är O(n 2 ). I så fall kan vi dra slutsatsen att djupet först sökning är O(n 2 ). Men detta är mindre informativt, tänk om vi har har en gles graf med färre bågar än noder! Då är ju faktiskt djupet först sökning O(n)! Maps 43

Tids- och utrymmeskomplexitet n noder m bågar inga parallella bågar inga self-loops riktad graf utrymme incidentedges(v) areadjacent (v, w) båglista grannlista grannmatris insertedge(v, w, e) Maps 44

Tids- och utrymmeskomplexitet n noder m bågar inga parallella bågar inga self-loops riktad graf båglista grannlista grannmatris utrymme O(n + m) O(n + m) O(n 2 ) incidentedges(v) areadjacent (v, w) insertedge(v, w, e) Maps 45

Tids- och utrymmeskomplexitet n noder m bågar inga parallella bågar inga self-loops riktad graf båglista grannlista grannmatris utrymme O(n + m) O(n + m) O(n 2 ) incidentedges(v) O(m) O(deg(v)) O(n) areadjacent (v, w) insertedge(v, w, e) Maps 46

Tids- och utrymmeskomplexitet n noder m bågar inga parallella bågar inga self-loops riktad graf båglista grannlista grannmatris utrymme O(n + m) O(n + m) O(n 2 ) incidentedges(v) O(m) O(deg(v)) O(n) areadjacent (v, w) O(m) O(deg(v)) O(1) insertedge(v, w, e) Maps 47

Tids- och utrymmeskomplexitet n noder m bågar inga parallella bågar inga self-loops riktad graf båglista grannlista grannmatris utrymme O(n + m) O(n + m) O(n 2 ) incidentedges(v) O(m) O(deg(v)) O(n) areadjacent (v, w) O(m) O(deg(v)) O(1) insertedge(v, w, e) Maps 48

Tids- och utrymmeskomplexitet n noder m bågar inga parallella bågar inga self-loops riktad graf båglista grannlista grannmatris utrymme O(n + m) O(n + m) O(n 2 ) incidentedges(v) O(m) O(deg(v)) O(n) areadjacent (v, w) O(m) O(deg(v)) O(1) insertedge(v, w, e) O(1) O(1) O(1) Maps 49

Dynamiska fält och grannmatriser En grannmatris är ett fält. För att kunna lägga till nya element utan att riskera overflow måste vi använda ett dynamiskt fält. Obs att insättning av ny nod får O(1) som amorterad komplexitet, men O(n 2 ) som vanlig värstafallskomplexitet. Maps 50

Dynamiska fält och grannlistor I tabellen har vi antagit att grannlistorna är implementerade som ett dynamiskt fält av länkade listor. Då får vi snabb åtkomst av grannarna till en given nod. Hur ändrar sig komplexiteterna i tabellen om vi har grannlistan som en länkad lista av länkade listor? Maps 51

Djupet-först sökning: tillämpningar Avgör om en graf är sammanhängande Bestäm de sammanhängande komponenterna Bestäm en uppspännande skog Finn en väg mellan två noder Finn en cykel Lecture 6 52