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



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

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

Föreläsning 11. Giriga algoritmer

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

Föreläsning 5: Grafer Del 1

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

Föreläsning 4: Kombinatorisk sökning

Föreläsning 5: Dynamisk programmering

Föreläsningsanteckningar F6

Datastrukturer och algoritmer

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

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

Föreläsning 7 Datastrukturer (DAT037)

FÖRELÄSNING 1 ANALYS MN1 DISTANS HT06

Föreläsning 11. Giriga algoritmer

R AKNE OVNING VECKA 1 David Heintz, 31 oktober 2002

Ickelinjära ekvationer

Uppdaterad Enkel manual tävlingsanmälan i friidrottens nya IT- system.

Föreläsning Datastrukturer (DAT036)

Diskret matematik: Övningstentamen 4

UPPGIFT 1 KANINER. Håkan Strömberg 1 Pär Söderhjelm

I en matchning ligger varje hörn i högst en kant. I en stig ligger varje hörn i högst två kanter.

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

TAOP88/TEN 1 OPTIMERING FÖR INGENJÖRER

Föreläsning 12+13: Approximationsalgoritmer

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

Skoltaxi inom Piteå kommun

Algoritmer, datastrukturer och komplexitet

Tentamensinstruktioner

Föreläsning 8 Datastrukturer (DAT037)

Föreläsning 8: Intro till Komplexitetsteori

VAD TYCKER DE ÄLDRE OM ÄLDREOMSORGEN? - SÄRSKILT BOENDE I HÖGANÄS KOMMUN 2013

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

TAOP88/TEN 1 OPTIMERING FÖR INGENJÖRER

Antal svarande i kommunen 32 Andel svarande i kommunen, procent 43 Kategorier ångest? Mycket dåligt Totalt Nej. Någorlunda. Mycket gott.

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

Föreläsning 13 och 14: Binära träd

Föreläsning 6: Introduktion av listor

Sätt att skriva ut binärträd

Algoritmer, datastrukturer och komplexitet

Nät med flera länkar. Vägval. Enklaste formen av kommunikation:

Algoritmer, datastrukturer och komplexitet

Lära känna skrivbordet

ANDREAS REJBRAND Matematik Numeriska serier. Andreas Rejbrand, april /29

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

Föreläsning Datastrukturer (DAT036)

Seriehantering. [En enkel guide för hur du som serieadministratör använder SVEMO TA.]

TAOP88/TEN 1 OPTIMERING FÖR INGENJÖRER

Generell Analys. 3. Det är viktigt att du väljer ett svar i vart och ett av de åttio blocken.

Lösningar Datastrukturer TDA

TATA42: Föreläsning 10 Serier ( generaliserade summor )

TRÄNARGUIDE. Mattekoden FLEX.

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

Kurvlängd och geometri på en sfärisk yta

Datastrukturer. föreläsning 9. Maps 1

TAOP86/TEN 1 KOMBINATORISK OPTIMERING MED

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

Problem att fundera över

Tentamensinstruktioner. När Du löser uppgifterna

Cykelhållare, takmonterad

Programmering A C# VT Ett kompendie över Programmering A (50p) i c# Stefan Fredriksson

Tävlingsreglemente för SAM

Lennart Carleson. KTH och Uppsala universitet

TDDI16 Datastrukturer och algoritmer. Prioritetsköer, heapar, Union/Find

Dugga Datastrukturer (DAT036)

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.

Skriv in sökvägen sam.sll.se

Sinnenas stig GNESTA

MATEMATIK Datum: Tid: förmiddag Hjälpmedel: inga. Mobiltelefoner är förbjudna. A.Heintz Telefonvakt: Christo er Standar, Tel.

Provivus tips om KONCENTRATION - VAD PEDAGOGEN KAN GÖRA

Datastrukturer. föreläsning 9. Maps 1

Föreläsning Datastrukturer (DAT037)

Algoritmanalys. Genomsnittligen behövs n/2 jämförelser vilket är proportionellt mot n, vi säger att vi har en O(n) algoritm.

Innehåll. Föreläsning 11. Organisation av Trie. Trie Ytterligare en variant av träd. Vi har tidigare sett: Informell specifikation

NATIONELLT PROV I MATEMATIK KURS A VÅREN Tidsbunden del

Låt eleverna öva på att dra slutsatser om textens handling genom att leta ledtrådar i texten.

Föreläsning Datastrukturer (DAT037)


Tentamen Datastrukturer för D2 DAT 035

TAOP86/TEN 1 KOMBINATORISK OPTIMERING MED

UTVECKLA SÅ UTVECKLAR NI ER FÖRENING!

Datastrukturer. föreläsning 10. Maps 1

Träd, binära träd och sökträd. Koffman & Wolfgang kapitel 6, avsnitt 1 4

Ur boken Självkänsla Bortom populärpsykologi och enkla sanningar

för spejarscoutprogrammet

Giriga algoritmer och dynamisk programmering

Tommy Färnqvist, IDA, Linköpings universitet

Hjälp vid användning av Geodataportalen

Föreläsning 4 Datastrukturer (DAT037)

Lokalbussen i Lycksele

Utvärdering av föräldrakurs hösten 2013

I denna laboration skriver jag inte ut resultatet på de flesta frågorna utan du kör dem själv i din miljö.

9-1 Koordinatsystem och funktioner. Namn:

Introduktion av aktiv generaliserad kunskap i Businss Process Support System (BPSS)

Hur många serier och repetitioner klarar man av på 25 % av 1 RM i snabbstyrka?

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

En ideal op-förstärkare har oändlig inimedans, noll utimpedans och oändlig förstärkning.

Föreläsning Datastrukturer (DAT036)

19. Skriva ut statistik

Transkript:

Föreläsning 4: Giriga algoritmer Giriga algoritmer Denna typ av algoritmer arbetar efter följande princip: Gör i varje situation det som är lokalt optimalt, d.v.s. bäst för stunden. Några exempel vi redan sett är Dijkstras algoritm. Där utvidgar vi en mängd S med det hörn som är märkt med lägst värde. Till många problem finns en naturlig girig algoritm, men ofta ger den inte en optimal lösning. Giriga algoritmer är ofta snabba så de kan användas för att snabbt få fram en approximativ lösning. Vi skall nu studera en följd problem som är kopplade till aktivitetsplanering Att klara jobbet med så få personer som möjligt Vi har n st aktiviteter med givna starttider s i och sluttider f i. Det innebär att aktivitet i måste utföras under tiden [s i,f i ] (hela tiden behövs). Hur många personer krävs för att genomföra samtliga aktiviteter om en person inte kan vara sysselsatt med mer än en aktivitet åt gången? Iaktagelse: Låt oss anta att det finns en tid x så attx liggeri d olika aktiviteters intervall och att d är maximalt i detta avseende. Då krävs det minst d personer för att utföra jobbet. Påstående: Aktiviteterna går att genomföra med d personer. Vi använder en enkel girig algoritm för att lösa problemet. Vi tar d personer p 1,p 2,...,p d.visorterarintervallensåatts 1 s 2 s n.tagförsta aktiviteten och låt p 1 utföra aktiviteten. I fortsättningen gör vi följande: När tiden s i för en ny aktivitet dyker upp låter vi den första person p j som inte är upptagen göra den. Det går enkelt att visa att de d personerna tillsammans klarar av att utföra aktiviteterna. Det giriga inslaget i algoritmen är man bara går igenom aktiviteterna i tidsordning och tilldelar dem till personer utan att göra någon mer övergripande planering (som inte kan löna sig). Aktivitetsplanering för ensam person Vi har n st aktiviteter a 1,a 2,..., a n som äger rum under tidsintervall på formen [s i,f i ). Inga intervall får överlappa varandra. (Intervallen är definierade som halvöppna. Det innebär t.ex. att [2, 4) och [4, 5) inte överlappar varandra.) Vi vill välja ut ett maximalt antal aktiviteter att utföra. Hur väljer man ut ett maximalt antal aktiviteter som inte överlappar varandra? Girig algoritm för aktivitetsplanering Lite överraskande visar det sig att det är sluttiderna för aktiviterna som är det viktigaste. Sortera efter sluttid så att f 1 f 2... f n. vi vill välja en mängd A av aktiviteter som vi skall utföra.

(1) A {a 1 } (2) i 1 (3) for j 2 to n (4) if s j f i (5) A A {a j } (6) i j (7) return A Det giriga i denna algoritm består i att vi hela tiden väljer det lediga intervall som slutar först. Det går ganska lätt att visa att algoritmen ger optimalt resultat. Jobb med deadlines Vi har nu n st jobb som skall utföras av en person. Jobb i kräver en viss tid t i att utföra. Jobb i måste också vara klart vid en viss tidpunkt d i.iövrigtkan jobben utföras när man vill. Vi skall göra en planering av jobben så att s(i) är starttiden för jobb i och f(i) är sluttiden. Vi har följande krav: f(i) =s(i)+t i för alla i. Inga intervall [s(i),f(i)], [s(j),f(j)] får överlappa varandra. f(i) d i för alla i. Ett första problem är att avgöra om detta är möjligt och hur planeringen då ser ut. Om det inte går att genomföra planeringen måste vi ha f(i) >d i för minst ett i. Vi är då intresserade av att minimera misslyckandet. Det finns olika idéer om vad vi skall försöka minimera. En naturlig idé är följande: Sätt L = max f i d i. i Försök sedan få L så liten som möjligt. Vi minimerar maximal försening. Algoritmen för planering är mycket enkel. Sortera först jobben så att d 1 d 2 d n.viantarattallad i > 0 och att vi börjar arbeta vid tiden 0. (1) s(1) 0, f(1) t 1 (2) for i 2 to n (3) s(i) f(i 1), f(i) s(i)+t i (4) return s, f Det giriga består i att vi först väljer det jobb som måste vara klart först o.s.v. Det går att visa att denna algoritm ger optimalt resultat även om beviset är lite mer invecklat än bevisen för de andra algoritmerna. Det finns andra förslag på mått på misslyckandet. Vi vill kanske att vi skall missa så få deadlines som möjligt. Den typen av krav är inte lika lätta att klara av med giriga algoritmer.

Passande problem En girig algoritm passar i situationer där man kan genomföra följande resonemang: 1. Problemet kan delas upp i ett första girigt val som lämnar kvar ett delproblem. 2. Det går att visa att om det finns en optimal lösning L på problemet så går det alltid att modifiera L till en ny optimal lösning L som har samma första val som vårt val. ( Första valet kan inte vara fel ) 3. Vi kan genom induktion eller motsvarande visa att vår algoritm ger rätt resultat. Den optimala lösningen på delproblemet går alltid att kombinera med det giriga valet och ger då en optimal lösning. Ibland kan en girig algoritm naturligtvis misslyckas: Exempel: Ett triangelproblem Problem: Hitta stigen från toppen till botten som maximerar summan av de ingående talen. 7 3 8 8 1 0 2 7 4 4 4 5 2 6 5 Låt n vara antalet rader. Det finns 2 n 1 olika stigar att prova.

Girig algoritm för triangelproblemet Gå i varje steg till det största av de två talen på raden nedanför. 7 3 8 8 1 0 2 7 4 4 4 5 2 6 5 Den giriga algoritmen ger här summan 28 medan den bästa stigen ger 30 (7+ 3+8+7+5). Girig algoritm för intervalltäckning Givet är n punkter på tallinjen. Vi vill hitta ett minimalt antal intervall av längd 1 vars union innehåller alla punkterna. Girig algoritm: (1) Sortera punkterna i växande ordning. (2) while någon punkt finns kvar (3) Placera ett intervall med vänstra ändpunkten i punkten med lägst koordinat. (4) Ta bort alla punkterna som täcks av detta intervall. Algoritmen ger den minimala övertäckningen eftersom något intervall måste täcka punkten längst till vänster; den giriga placeringen av intervallet täcker alla punkter som skulle täckas av någon annan placering.

Kruskals och Prims algoritmer Spännande träd: Om G är en sammanhängande graf så är ett spännande träd ett träd som innehåller alla noder i V (G). Viantarattviharkantvikterw(e) på alla kanter i G. Hur hittar man spännande träd med minimal vikt? (Kallas Minimala Spännande Träd, MST.) Kruskals algoritm för MST Idén bakom denna algoritm är upprätthålla en spännande skog och förena delträden utan att skapa någon cykel tills ett enda stort träd bildats. Kruskal(V,E,w) (1) A (2) foreach v V (3) MakeSet(v) (4) Sortera E efter stigande vikt (5) foreach (u, v) E (ordnat efter stigande vikt w) (6) if FindSet(u) FindSet(v) (7) A A {(u, v)} (8) MakeUnion(u, v) (9) return A Tidskomplexitet: O( E log E ) (p.g.a. sorteringen); FindSet och MakeUnion tar O(log V ) tid.

Prims algoritm för MST Prims algoritm bygger på samma principer som Dijkstras algoritm. I varje steg läggs det hörn till trädet som ligger närmast (d.v.s. har lägst märkning key). Prim(V,E,w,s) (1) key[v] för varje v V (2) key[s] 0 (3) Q MakeHeap(V,key) (4) π[s] Null (5) while Q (6) u HeapExtractMin(Q) (7) foreach granne v till u (8) if v Q och w(u, v) <key[v] (9) π[v] u (10) key[v] w(u, v) (11) Justera heapen vid v Tidskomplexitet: O( V log V )+O( E log V ) =O( E log V ) Korrekthetsbevis: Bygger på följande hjälpsats. Vi antar att inga kanter har samma vikt. Ett snitt S igrafeng är en uppdelning V = S (V S). Sats. Låt S, V S vara ett snitt (så att ingen av S eller V S är tom). Låt e =(u, v) vara sådan att den går från S till V S d.v.s. u S och v/ S och så att e:s vikt är minimal. Då måste e finnas med i varje minimalt spännande träd. Bevis: Låt T vara ett MST som inte innehåller (u, v). Betrakta stigen från u till v längs T. Den innehåller någon kant (x, y) som går från S till V S. Eftersom (u, v) hade minst vikt av alla såna kanter är T + {(u, v)} {(x, y)} ett MST med lägre vikt, vilket är omöjligt. Bevis för Kruskal: Låt (u, v) vara en kant som väljs i något steg i Kruskals algoritm. Låt S vara alla noder som kan nås från u via stigar över de kanter som hittills valts. Då gäller u S och v/ S. Det går också att se att (u, v) måste vara en minimal kant över snittet. Enligt satsen kan det inte vara fel att välja (u, v) Bevis för Prim: Här låter vi S vara de noder som valts i algoritmen fram till ett visst steg. Kanten (u, v) är precis en sådan kant som anges i hjälpsatsen. Valet av den kan inte vara fel.