Föreläsning 11. Giriga algoritmer



Relevanta dokument
Föreläsning 11. Giriga algoritmer

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

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

Föreläsning 8: Intro till Komplexitetsteori

Objektorienterad programmering D2

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

Uppgift 1 ( Betyg 3 uppgift )

Fortsättningskurs i programmering F 2. Algoritmer i Programutveckling Hugo Quisbert Problemexempel 1

TAOP61/TEN 1 OPTIMERING AV REALISTISKA SAMMANSATTA SYSTEM. Tentamensinstruktioner. När Du löser uppgifterna

Optimering. Optimering av transportproblem. Linköpings universitet SL. Campusveckan VT2013

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

UMEÅ UNIVERSITET 26 april 2002 Instutionen för datavetenskap. Grafproblem. Laboration 4, Datastrukturer och Algoritmer VT02

TAOP86/TEN 1 KOMBINATORISK OPTIMERING MED

Föreläsning 7. Träd och binära sökträd

TDP Regler

Tentamen för kursen Objektorienterad programvaruutveckling GU (DIT010)

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

Tentamen, EDA501 Programmering M L TM W K V

TAOP86/TEN 1 KOMBINATORISK OPTIMERING MED

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

Sätt att skriva ut binärträd

1 Skapa Tabell Skapa Relationer Redigera Relationer Redigera Fält i Tabell Lägga till Poster i Tabell...

Föreläsning 13. Dynamisk programmering

TRÄNARGUIDE. Mattekoden FLEX.

Datastrukturer och algoritmer

Tentamen i Realtidsprogrammering

Optimering. Optimering

TNSL11 Kvantitativ Logistik

Chapter 3: Using Classes and Objects

Extra inställningar i Mozilla Thunderbird

9-1 Koordinatsystem och funktioner. Namn:

INDUKTION OCH DEDUKTION

Föreläsning 4: Kombinatorisk sökning

Bruksanvisning för hjälpbegäran

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

Översikt. Installation av EasyPHP 1. Ladda ner från Jag använder Release Installera EasyPHP.

Uppgift 1 (Oläsliga krypterade meddelanden)

Tentaupplägg denna gång

trafiksimulering Intro OU5 trafiksimulering

Användarmanual för nya funktioner

Senaste revideringen av kapitlet gjordes , efter att ett fel upptäckts.

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

Programmeringsuppgifter 1

Kommentarmaterial, Skolverket 1997

Sidan Dan Ulfskans

UPPGIFT 2 KVADRATVANDRING

Matematik åk 9. Lärarinstruktion Digital diagnos Matematik Åk 9

TAOP88/TEN 1 OPTIMERING FÖR INGENJÖRER

Tema Linjär optimering

Tentamensinstruktioner

Tentamen på kursen DA7351, Programmering , kl Malmö högskola Teknik och samhälle. DA7351, Programmering

Handbok Företagsinteckning

Bakgrundsbygge i Cellplast:

Tentaupplägg denna gång

Netwise CMG Voice , Rev 1.0, CJ 1(16)

Omtentamen (del 1, 6 högskolepoäng) i Programkonstruktion och datastrukturer (1DL201)

Tentamen i TDP004 Objektorienterad Programmering Praktisk del

Föreläsning 6: Introduktion av listor

Träningsprogram för Lidingö Ultra

Problemet löd: Är det möjligt att på en sfär färga varje punkt på ett sådant sätt att:

Kommunikationsmöjligheter i Mondo

Tentamen, EDAA20/EDA501 Programmering

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

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

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

TAOP88/TEN 1 OPTIMERING FÖR INGENJÖRER

Manual för praktiker

Tentamen TEN1 HI

Detta prov består av del 1 och 2. Här finns också facit och förslag till poängsättning

Lathund, till Photo Story, för skräckslagna lärare

1. Skriv = eller i den tomma rutan, så att det stämmer. Motivera ditt val av tecken.

Föreläsning 2: Avlusning och antilustekniker

Bygga hus med LECA-stenar

Flera kvantifierare Bevis Direkt bevis Motsägelse bevis Kontrapositivt bevis Fall bevis Induktionsprincipen. x y (x > 0) (y > 0) xy > 0 Domän D = R

MOA MANUAL VERSION 1

8-1 Formler och uttryck. Namn:.

Prova på-laboration i PHP Johan Sjöholm johsj@ida.liu.se Institutionen för datavetenskap, Linköpings universitet

TAOP88/TEN 1 OPTIMERING FÖR INGENJÖRER

Mobilapplikation htp:/aktjon.argentum.se/activitymobile

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

Manual för studerande Version 2.2.0

2. Komma igång Skapa grupper och elever Skriv också ut sidan 13 så att eleverna har en snabbguide till programmet.

Uppgift (poäng) 1 (2) 2 (3) 3 (4) 4 (4) 5 (3) 6 (4) 7 (6) 8 (6) 9 (8) Summa

Lära känna skrivbordet

Tentamen Marco Kuhlmann

Missade du en runda eller tappade anslutningen? Ingen fara, vi väljer grundalternativet åt dig så att du kan fortsätta spela.

Tentamen i. för D1 m fl, även distanskursen. fredag 13 januari 2012

Kom igång med ArcGIS Online - Snabba steg för att börja arbeta

Instruktioner för dig som ska söka till Mattekollo 2016

KREATIVA BÖNESÄTT. en praktisk hjälp till dig som är ledare! Initiativtagare till materialet: Maria Melin

19. Skriva ut statistik

Uppgift 1. Kylskåpstransporter

STADSBYGGNADSFÖRVALTNINGEN. Aktivitetsstöd. Behörigheten Föreningsadministratör. Datum: Version 2. Sidan 1 (30)

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

SÅindex 5 i Microsoft Excel 2010

Matematik Åk 9 Provet omfattar stickprov av det centrala innehållet i Lgr b) c) d)

LAJKA-GUIDE Bättre än Airdrop Skicka filer mellan OS X och ios

Semester och arbetstidsförkortning

Del 1. Ett exempel: Hur rädd är du för att gå till tandläkaren?

Enkäten inleds med några frågor om demografiska data. Totalt omfattar enkäten 85 frågor år år år. > 60 år år.

Transkript:

Föreläsning 11 Giriga algoritmer

Föreläsning 11 Giriga algoritmer Användning Växelproblemet Kappsäcksproblemet Schemaläggning Färgläggning Handelsresandeproblemet Uppgifter

Giriga algoritmer (Greedy algorithms) En girig algoritm börjar med att lösa ett delproblem. Den löser detta delproblem genom att välja den lokalt bästa lösningen utan att ta hänsyn till det globala problemet. Den arbetar sedan vidare i steg med delproblem så att den till slut har löst hela problemet. För att verkligen klassificeras som en girig algoritm bör den inte heller omvärdera de lokala lösningar den gjort. Ex. från förra föreläsningen: Börja med en stad, anslut närmsta stad, anslut närmsta stad till de två städerna,

Användningsområden Beroende på problem ger en girig algoritm den optimala lösningen, en hyggligt bra lösning inom rimlig tid eller en helt usel lösning. När en girig algoritm fungerar är den ofta ett effektivt alternativ (jämfört t.ex med dynamisk programmering). Det finns problem där man inte får den optimala lösningen men där det tar för lång tid att hitta denna optimala lösningen (traveling salesman problem). Svåra och vanliga problem är normalt redan lösta och en ingenjör behöver kunna implementera eller återanvända redan skapade och välprövade algoritmer Däremot stöter man då och då på relativt enkla problem som kräver en lösning oftast behöver man inte hitta den bästa lösningen utan det räcker att man hittar en lösning Det är främst för dessa problem man slipar sin problemlösningslåda giriga algoritmer är ett exempel på en sorts lösningar som ofta är effektiva nog i dessa situationer och som är ganska enkla att konstruera.

Växelproblemet Vad är det minsta antalet mynt och sedlar som krävs för att ge växel för ett givet belopp? Fundera ut hur en girig algoritm skulle se ut.

En girig algoritm för att ge växel Antag att vi vill ge x kr i växel n = 0 Medans x > 0 Sätt p = den största valören x Sätt x = x p Sätt n = n + 1 Fungerar den? Ger den bästa resultat? Ex: 77 kr: 50, 20, 5, 1, 1: n = 5 Varför är algoritmen glupsk? Ex: Ge växel på 30 kr med valörerna 1, 10, 25 Vi återkommer till detta när det är dags för dynamisk programmering.

Kappsäcksproblemet (knapsack) Det finns ett visst antal olika sorters varor n vars värde är v i och vikt är w i. Hur ska vi packa en kappsäck som maximalt tar vikten W så att vi får med oss det maximala värdet? Det här gamla problemet med moderna tillämpningar såsom (schemaläggning, flygplansrutter och produktionsplanering) finns i flera olika versioner. Vi ska här titta på den version som kallas obegränsad: Av varje sorts vara finns det obegränsat antal. För denna version är en girig algoritm garanterad att få åtminstone halva det maximala värdet (om det endast finns en begränsad mängd av varje vara kan den lyckas mycket sämre). Även för detta problem kan man hitta den optimala lösningen med dynamisk programmering. Formulera en rimlig girig algoritm. 10kr 4kg 3kr 2kg 1kr 1kg 15kg

Girig algoritm för kappsäcksproblemet Fyll kappsäcken med så många som möjligt av den vara som har högst värde per viktenhet (kr/kg). Fyll kappsäcken med så många som möjligt av den vara som har näst högst värde per viktenhet. osv Försök konstruera ett exempel där algoritmen misslyckas.

Ett schemaläggningsproblem Vi har en sal och ett antal aktiviteter under en dag. Varje aktivitet har en starttid och en sluttid. Målet är att schemalägga så många aktiviteter som möjligt. En girig algoritm: V mängden av alla aktiviteter Medans det finns aktiviteter i V Schemalägg den aktivitet i V som slutar först. Tag bort vald aktivitet ur V Tag bort alla aktiviteter ur V som överlappar med vald aktivitet Är lösningen den optimala lösningen? Om inte kan du hitta ett motexempel?

Färgläggning av karta Om man vill färglägga en karta med länder så att varje landområde inte angränsar till något område med samma färg klarar man sig oftast med tre färger. Matematiskt har man (med stor möda) lyckats bevisa att det aldrig behövs mer än fyra färger. Det finns ingen algoritm som garanterat hittar den bästa lösningen. En girig algoritm kommer på kort tid (och som så ofta med giriga algoritmer med linjärt växande tid när antalet länder ökar) hitta en ganska bra lösning.

En girig algoritm för färgläggning av karta Ordna färgerna (kalla dem 1,2,3,4, ) Så länge det ännu finns icke färglagda länder Välj ett land Ge landet den första färgen som inget angränsande land har Algoritmen är inte nödvändigtvis den bästa giriga algoritmen (jämför välj en färg, färglägg så många som möjligt). Hur bra den presterar beror också på i vilken ordning man väljer länderna. I snitt presterar den bättre om länderna väljs så att länder som angränsar i hög grad behandlas efter varandra. Följande precisering av välj ett land skulle förbättra algoritmen: Välj det land som angränsar till flest av de redan valda länderna.

Implementeringsdetaljer För en någorlunda enkel implementering Indata: Låt oss kalla länderna 0, 1, 2,, n-1 och låt gränser[i][j] vara true om det finns en gräns mellan land i och land j och annars false. Utdata: Kalla färgerna 1, 2, 3,, m. Låt land[i] vara den färg land i har fått. Intern data: färg[i] är true om ett visst land angränsar till ett land med färg i Algoritm: Sätt land[i] = 0 för alla i För i = 0 till n-1//går igenom länderna så att vi hanterar land i nedan: Sätt färg[j]= false för alla j För j = 0 till n-1//går igenom länderna för att hitta grannar till land i om gränser[i][j] och land[j]!=0 Sätt färger[land[j]]=true //markerar angränsande färger För j = 1 till m //går igenom färgerna för att hitta första lediga om inte färger[j] land[i] = j avbryt for-loopen

Handelsresandeproblemet Givet ett antal städer och avståndet mellan varje par av städer. Vilken väg ska en handelsresande välja för att minimera resvägen och besöka alla städer. Problemet berör inte bara ren logistik utan uppkommer även inom nätverksanalyser. Att hitta den optimala lösningen är ett mycket krävande problem för stora system. En girig algoritm är inte garanterad att hitta den bästa lösningen men går väldigt fort. Formulera en girig algoritm.

En girig algoritm för handelsresandeproblemet Välj en startstad Medans det finns obesökta städer Res till den stad som ligger närmast den du befinner dig i Problem: Den lägger inte upp en rutt och de sista resorna blir lätt väldigt långa. Den passar inte på att ta alla städer där den är utan åker vidare om det ger tillfälligt kortare resa.

Uppgifter NB42 (1p) Lös växlingsproblemet med en girig algoritm. Skriv en metod som tar växlingssumman och en int-array med de olika tillgängliga valutorna I fallande ordning och returnerar en intarray med antalet av varje valuta. Ex. Man vill veta växeln för 789 kr I vår valuta. Man anropar då: change(789,new int{1000,500,100,50,20,10,5,1}) som då returnerar: {0,1,2,1,1,1,1,4}

NB43 Lös det obegränsade kappsäcksproblemet med en girig algoritm i en funktion där man kan skicka in storleken på kappsäcken och varornas vikt och värde på ett bra sätt. Funktionen ska då på ett bra sätt returnera hur kappsäcken ska packas. Skriv också en main som tillåter en användare att ange indata till algoritmen och sedan presenterar lösningen för denna.

NB44 Skriv en schemaläggningsfunktion enligt föreläsningen.

0 1 2 3 NB45 (1p) a) Skriv ett program som läser in en karta från en textfil. Textfilen innehåller först antal länder och sedan antal gränser och därefter följer på varje rad två tal som representerar att dessa länder har en gräns. Ex: 4 5 0 1 0 2 1 2 1 3 2 3 Därefter ska programmet med hjälp av algoritmen från föreläsningen presentera vilken färg varje land ska färgläggas i så att man använder få färger men angränsande länder aldrig har samma färg. b) Förbättra nu programmet så att algoritmen hela tiden väljer ett av de länder som angränsar till flest redan valda länder.

NB46 (1p) Skriv ett program som läser in en avståndstabell för ett antal städer från fil och sedan använder en girig algoritm för att försöka hitta en kort rutt för att besöka alla städer. Låt användaren få ange startstad så att man kan prova olika startstäder.

NB47 (1p) Vid en fabrik finns n i stycken aktiviteter som behöver utföras under en dag. Varje aktivitet har en starttid s i och en sluttid m i. Under denna tid måste en person jobba med aktiviteten. Designa en girig algoritm som beräknar minsta antalet personer som krävs för att lösa uppgiften. Implementera sedan algoritmen i ett program som läser data från en fil för att sedan presentera minsta antalet som krävs. Designa ett antal kniviga fall och kontrollera att algoritmen verkligen når det minimala antalet personer.

NB 48 (1p) Givet n punkter på den reella tallinjen. Hitta det minsta antal intervall med längden 2,0 som tillsammans täcker alla punkter. Designa och implementera en girig algoritm. Låt programmet slumpa fram ett antal punkter. Försök verifiera att din algoritm fungerar med ett resonemang. Skriv även ner ditt resonemang i din redovisning.