Optimering Kruskal s algoritm Prim-Jarník s algoritm

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

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

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

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

OMTENTAMEN I DATASTRUKTURER OCH ALGORITMER DVG B kl. 09:00 14:00

Föreläsning 5: Grafer Del 1

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

Föreläsning Datastrukturer (DAT036)

Instruktioner - Datortentamen TDDD73 Funktionell och imperativ programmering i Python

TNK049 Optimeringslära

Föreläsning 8 Datastrukturer (DAT037)

Föreläsning Datastrukturer (DAT037)

DD1320 Tillämpad datalogi. Lösning (skiss) till tenta 20 okt 2011

Föreläsning 7 Datastrukturer (DAT037)

Sortering. Brute-force. Sortering Ordna element enligt relation mellan nyckelvärden

Föreläsningsanteckningar F6

Algoritmer, datastrukturer och komplexitet

OMTENTAMEN I DATASTRUKTURER OCH ALGORITMER DVG B kl. 14:15 19:15

Algoritmer, datastrukturer och komplexitet

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

Rekursion. Rekursiv lösningsstrategi. Algoritmkonstruktion. Exempelproblem Hitta största elementet i en sekvens v i där i 1... n.

ORDINARIE TENTAMEN I DATASTRUKTURER OCH ALGORITMER DVG B kl. 08:15 13:15

729G04 - Diskret matematik. Lektion 4

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

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

Föreläsning 4: Giriga algoritmer. Giriga algoritmer

Träd. Sats. Grafer. Definition. En fullständig graf har en båge mellan varje par av noder. Definition

Kaliningrad) låg vid bägge sidor av floden Pregel samt på

N = {i}: noder (hörn) Graf: G = (N, B) Definitioner. Väg: Sekvens av angränsande bågar. Cykel: Väg som startar och slutar i samma nod.

Föreläsning 5: Dynamisk programmering

Träd. Sats. Grafer. Definition. En fullständig graf har en båge mellan varje par av noder. Definition

Föreläsning 2. Kortaste vägar i grafer.

Programkonstruktion och Datastrukturer

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

F11 - Rekursion. ID1004 Objektorienterad programmering Fredrik Kilander

6 Rekursion. 6.1 Rekursionens fyra principer. 6.2 Några vanliga användningsområden för rekursion. Problem löses genom:

Datastrukturer. föreläsning 8. Maps 1

729G04 - Diskret matematik. Lektion 4

Grundläggande datalogi - Övning 3

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

Dynamisk programmering. Dynamisk programmering. Dynamisk programmering. Dynamisk programmering

Exempel: Förel Rekursion III Nr 14. Uno Holmer, Chalmers,

Föreläsning 8 Datastrukturer (DAT037)

Algoritmer och datastrukturer, föreläsning 11

Träd. Sats. Grafer. Definition. En fullständig graf har en båge mellan varje par av noder. Definition

OMTENTAMEN I DATASTRUKTURER OCH ALGORITMER DVG B kl. 08:15-13:15

Lektion 2: Sökagenter. Robin Keskisärkkä

TAOP33/TEN 2 KOMBINATORISK OPTIMERING GRUNDKURS

Introduktion till programmering SMD180. Föreläsning 5: Fruktbara funktioner

Dekomposition och dynamisk programmering

Introduktion till programmering D0009E. Föreläsning 5: Fruktbara funktioner

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

Trädstrukturer och grafer

Tentamen Datastrukturer D DAT 036/INN960

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

Tentamen Datastrukturer D DAT 036/INN960

Tentamensskrivning i Diskret Matematik för CINTE och CMETE, SF1610, onsdagen den 20 augusti 2014, kl

TAOP88/TEN 1 OPTIMERING FÖR INGENJÖRER

Algoritmer, datastrukturer och komplexitet

Tentamen Datastrukturer, DAT037 (DAT036)

Övning 2. (Länkade) Listor, noder

Datastrukturer och Algoritmer D0041D

TAOP88/TEN 1 OPTIMERING FÖR INGENJÖRER

Föreläsning 2. Kortaste vägar i grafer.

public static void mystery(int n) { if (n > 0){ mystery(n-1); System.out.print(n * 4); mystery(n-1); } }

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

F11. Läsanvisning: kap 10 + dessa OH. Kruskals algoritm kortaste vägar en till alla

ORDINARIE TENTAMEN I DATASTRUKTURER OCH ALGORITMER DVG B kl. 08:15 13:15

Introduktion till algoritmer - Lektion 4 Matematikgymnasiet, Läsåret Lektion 4

Träd. Sats. Grafer. Definition. En fullständig graf har en båge mellan varje par av noder. Definition

Föreläsning 12+13: Approximationsalgoritmer

SCB :-0. Uno Holmer, Chalmers, höger 2 Ex. Induktiv definition av lista. // Basfall

Tentamensinstruktioner. När Du löser uppgifterna

Rekursion och induktion för algoritmkonstruktion

Föreläsning 12. Söndra och härska

Inom datalogin brukar man använda träd för att beskriva vissa typer av problem. Om man begränsar sig till träd där varje nod förgrenar sig högst två

Föreläsning 7 Innehåll. Rekursion. Rekursiv problemlösning. Rekursiv problemlösning Mönster för rekursiv algoritm. Rekursion. Rekursivt tänkande:

Föreläsning 13. Rekursion

Tentamen, Algoritmer och datastrukturer

Föreläsning 6 Datastrukturer (DAT037)

Datastrukturer och algoritmer

Föreläsning 4. Kö Implementerad med array Implementerad med länkad lista Djup kontra bredd Bredden först mha kö

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

Tentamensinstruktioner. När Du löser uppgifterna

TAOP88/TEN 1 OPTIMERING FÖR INGENJÖRER

TAOP33/TEN 2 KOMBINATORISK OPTIMERING GRUNDKURS

Tentamen, EDA501/EDAA20 Programmering M MD W BK L

Tentamen Datastrukturer för D2 DAT 035

Textsträngar från/till skärm eller fil

TAOP88/TEN 1 OPTIMERING FÖR INGENJÖRER

TAOP86/TEN 1 KOMBINATORISK OPTIMERING MED

Algoritmer, datastrukturer och komplexitet

TAOP33/TEN 2 KOMBINATORISK OPTIMERING GRUNDKURS för D och C. Tentamensinstruktioner. När Du löser uppgifterna

MA2047 Algebra och diskret matematik

Algoritmer och datastrukturer H I HÅKAN S T R Ö M B E R G N I C K L A S B R A N D E F E L T

Föreläsning 9 Innehåll. Söndra och härska. Fibonaccitalen. Söndra och härska. Divide and conquer teknik för att konstruera rekursiva algoritmer.

Eulercykel. Kinesiska brevbärarproblemet. Kinesiska brevbärarproblemet: Metod. Kinesiska brevbärarproblemet: Modell. Definition. Definition.

Tentamen Datastrukturer D DAT 035/INN960

Transkript:

Optimering Kruskal s Prim-Jarník s 0.7 1.3 0.5 0.3 2.1 0.7 1.3 0.5 0.3 2.1 Viktad graf raf där varje kant har en vikt Vikterna kan motsvara Kostnad Avstånd Tidsåtgång ur hittar man kortaste vägen från A till F? Ingen känd har bättre asymptotisk komplexitet än de som beräknar kortaste väg från A till alla

Kortaste avståndet i en viktad graf 1. Avståndsmarkera alla noder med + 2. Sätt startnodens avstånd till noll 3. Upprepa lika många gånger som antalet noder: För alla kanter: Uppdatera (vid behov) avståndet vid kantens slut def bellmanford ( g, s t a r t, g o a l ) : f o r x i n g. nodes : d [ x ] = f l o a t ( i n f ) d [ s t a r t ] = 0 f o r x i n g. nodes : f o r e i n g. edges : a = d [ e. b e g i n ] + e.w i f a < d [ e. end ] : d [ e. end ] = a return d [ g o a l ] Kortaste avståndet när alla vikter är positiva 1. Avståndsmarkera alla noder med + 2. Sätt startnodens avstånd till noll 3. Upprepa: Tag närmaste ännu ej behandlade nod Uppdatera (vid behov) avståndet till nodens grannar def d i j k s t r a ( g, s t a r t, g o a l ) : f o r x i n g. nodes : d [ x ] = f l o a t ( i n f ) d [ s t a r t ] = 0 q = s e t ( g. nodes ) while not q. isempty : u = f i n d S m a l l e s t ( q, d ) q. remove ( u ) f o r e i n u. outedges : a = d [ u ] + e.w i f a < d [ e. end ] : d [ e. end ] = a return d [ g o a l ]

Kruskal s Prim-Jarník s 1.3 0.5 0.3 0.7 2.1 0.7 Kruskal s Prim-Jarník s 1.3 0.5 0.3 2.1 Spanning Tree ivet en oriktad graf, ett spanning tree är en delgraf som utgör ett träd men fortfarande knyter ihop alla noder. Minimum Spanning Tree Det spanning tree som har minst total vikt. Kruskal s Prim-Jarník s Kruskal s Prim-Jarník s Kruskal s Prim-Jarník s Minimum Spanning Tree enligt Kruskal Agera som en snål kommunalpolitiker 1. Bygg billigaste vägen som inte är onödig 2. Upprepa detta tills inga fler vägar behövs Minimum Spanning Tree enligt Prim och Jarník Agera som en egocentrisk kommunalpolitiker 1. Utgå från godtycklig startnod 2. Bygg den billigaste vägen som gör att man når en ny plats 3. Upprepa detta tills alla platser kan nås

Rekursivt formulerat optimeringsproblem Samma delproblem dyker upp flera gånger Numrera dellösningarna Lös problemet bakifrån ur olika är två strängar? Edit Distance Antal ändringar som krävs för att transformera den ena strängen till den andra Tillåtna ändringar Byt ut ett tecken Tag bort ett tecken Sätt in ett tecken Exempel: Avståndet mellan mandelmassa och andelshus mandelmassa andelmassa andelmass andelmaus andelmhus andelshus Avståndet = 5 Är detta det kortaste sättet? Rekursivt ansats Utgå från att vi vet avståndet mellan alla kortare stängar Avståndet d mellan xblabla och y bläblä är det minsta av d( blabla, bläblä ) om x = y d( blabla, bläblä ) + 1 om x y d( xblabla, bläblä ) + 1 d( blabla, ybläblä ) + 1 Basfall En sträng är tom: d = andra strängens längd

def d i s t ( s1, s2 ) : i f s1 == : d = l e n ( s2 ) e l i f s2 == : d = l e n ( s1 ) e l s e : d = min ( d i s t ( s1 [ 1 : ], s2 [ 1 : ] ) + (1 i f s1 [ 0 ]!= s2 [ 0 ] e l s e 0 ), d i s t ( s1, s2 [ 1 : ] ) + 1, d i s t ( s1 [ 1 : ], s2 ) + 1) return d Tre grenar i rekursionen Arbetet växer med faktorn 3 för varje extra rekursionssteg O(3 n ) Samma delproblem dyker upp flera gånger Idé: spara redan uträknade dellösningar def d i s t ( s1, s2, cache ) : i f ( s1, s2 ) not i n cache : i f s1 == : d = l e n ( s2 ) e l i f s2 == : d = l e n ( s1 ) e l s e : d = min ( d i s t ( s1 [ 1 : ], s2 [ 1 : ], cache ) + (1 i f s1 [ 0 ]!= s2 [ 0 ] e l s e 0 ), d i s t ( s1, s2 [ 1 : ], cache ) + 1, d i s t ( s1 [ 1 : ], s2, cache ) + 1) cache [ ( s1, s2 ) ] = d ur ska man placera radbytena i ett stycke? Optimeringsproblem Minimera i (L i ) 2 L i är längden för rad i är den önskade radlängden return cache [ ( s1, s2 ) ] >> d i s t ( mandelmassa, a n d e l s h u s, {}) 5

Rekursiv ansats Utgå från att vi vet bästa sättet att bryta raderna för alla kortare stycken å igenom alla möjliga platser för första radbytet Lägg samman kostnaden för första raden och resten av stycket Returnera den minsta totala kostnaden def c o s t ( p ) : b e s t = f l o a t ( i n f ) f o r bp i n range ( 1, l e n ( p )+1): t h i s = l i n e C o s t ( p [ : bp ] ) r e s t = c o s t ( p [ bp : ] ) i f t h i s + r e s t < b e s t : b e s t = t h i s + r e s t progammering Numrera alla möjliga platser för radbrytning Beräkna platsernas kostnad från slutet return b e s t