Algoritmer och datastrukturer TDA143

Relevanta dokument
Algoritmer och datastrukturer TDA Fredrik Johansson

Datastrukturer, algoritmer och programkonstruktion (DVA104, VT 2015) Föreläsning 6

Datastrukturer. föreläsning 3. Stacks 1

TDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 9 Jonas Lindgren, Institutionen för Datavetenskap, LiU

Sökning och sortering

Föreläsning 1. Introduktion. Vad är en algoritm?

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

Föreläsning 5 Innehåll

Magnus Nielsen, IDA, Linköpings universitet

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

Tommy Färnqvist, IDA, Linköpings universitet

Föreläsning 5 Innehåll. Val av algoritm och datastruktur. Analys av algoritmer. Tidsåtgång och problemets storlek

Lösningar Datastrukturer TDA

Programmering för språkteknologer II, HT2014. Rum

Föreläsning 13 Datastrukturer (DAT037)

Vad har vi pratat om i kursen?

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

Tentamen Datastrukturer för D2 DAT 035

Föreläsning 2 Datastrukturer (DAT037)

Algoritmer och effektivitet. Föreläsning 5 Innehåll. Analys av algoritmer. Analys av algoritmer Tidskomplexitet. Algoritmer och effektivitet

Datastrukturer och algoritmer

Algoritmer, datastrukturer och komplexitet

Föreläsning 3 Datastrukturer (DAT037)

Föreläsning 13 Datastrukturer (DAT037)

Datastrukturer och algoritmer

Tentamen'('Datastrukturer,'algoritmer'och'programkonstruktion.'

Datastrukturer och algoritmer

Föreläsning 4 Datastrukturer (DAT037)

Algoritmanalys. Inledning. Informationsteknologi Malin Källén, Tom Smedsaas 1 september 2016

Föreläsning 13 Innehåll

Träd Hierarkiska strukturer

Föreläsning Datastrukturer (DAT037)

ADT Prioritetskö. Föreläsning 13 Innehåll. Prioritetskö vs FIFO-kö. Prioritetskö Exempel på användning. Prioritetsköer och heapar

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

Översikt. Stegvis förfining. Stegvis förfining. Dekomposition. Algoritmer. Metod för att skapa ett program från ett analyserat problem

ADT Kö. Seminarium 4 Köer och Stackar Innehåll. Operationer. ADT Stack. Definition. Definition

Tentamen Datastrukturer D DAT 035/INN960

Föreläsning 9 Innehåll

Föreläsning 7+8: NP-problem. Begreppet effektiv algoritm är alltså synonymt med går i polynomisk tid i den här kursen. Är detta en rimlig uppdelning?

TDDI16 Datastrukturer och algoritmer. Algoritmanalys

Datastrukturer. föreläsning 9. Maps 1

Föreläsning Datastrukturer (DAT037)

Datastrukturer och algoritmer

Lösningsförslag till tentamen Datastrukturer, DAT037,

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

TENTAMEN: Algoritmer och datastrukturer. Läs detta!

Lösning av några vanliga rekurrensekvationer

Tentamen Datastrukturer D DAT 036/INN960

Några svar till TDDC70/91 Datastrukturer och algoritmer

Föreläsning Datastrukturer (DAT037)

Bakgrund och motivation. Definition av algoritmer Beskrivningssätt Algoritmanalys. Algoritmer. Lars Larsson VT Lars Larsson Algoritmer 1

DAI2 (TIDAL) + I2 (TKIEK)

Tentamen Datastrukturer D DAT 036/INN960

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

Föreläsning 10 Innehåll. Prioritetsköer och heapar. ADT Prioritetskö. Interface för Prioritetskö. Exempel på vad du ska kunna

Föreläsning 8+9: NP-problem. Begreppet effektiv algoritm är alltså synonymt med går i polynomisk tid i den här kursen. Är detta en rimlig uppdelning?

Programkonstruktion och Datastrukturer

Abstrakta datatyper. Primitiva vektorer. Deklarera en vektor

Tentamen i Algoritmer & Datastrukturer i Java

Algoritmer, datastrukturer och komplexitet

Föreläsning 9 Datastrukturer (DAT037)

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

Seminarium 13 Innehåll

Föreläsning 8: Intro till Komplexitetsteori

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

Tentamen Datastrukturer (DAT036)

Fredag 10 juni 2016 kl 8 12

Tommy Färnqvist, IDA, Linköpings universitet

ADS : STACK ADT: STACK. Stack och Kö -Implementering - Tilllämpningar. Oftast förekommande metoder i Stack. TopOfStack

Föreläsning 4 Datastrukturer (DAT037)

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

Datastrukturer och algoritmer

Tentamen kl Uppgift 4. Uppgift 5

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

Föreläsning Datastrukturer (DAT036)

ADT Prioritetskö. Föreläsning 12 Innehåll. Prioritetskö. Interface för Prioritetskö. Prioritetsköer och heapar

Datastrukturer. föreläsning 9. Maps 1

Tentamen Datastrukturer, DAT037 (DAT036)

Föreläsning 2 Datastrukturer (DAT037)

Algoritmer, datastrukturer och komplexitet

Föreläsning 11 Datastrukturer (DAT037)

Datastrukturer D. Föreläsning 2

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

Tommy Färnqvist, IDA, Linköpings universitet. 2 Rekursion i C Implementation av rekursion Svansrekursion En till övning...

Lösningsförslag till tentamen Datastrukturer, DAT037,

Föreläsning Datastrukturer (DAT036)

Föreläsning 3 Datastrukturer (DAT037)

Ekvivalensrelationer

Föreläsning 12+13: Approximationsalgoritmer

Tentamen i Algoritmer & Datastrukturer i Java

Datastrukturer. föreläsning 10. Maps 1

Föreläsning 11. ADT:er och datastrukturer

Föreläsning Datastrukturer (DAT036)

Tommy Färnqvist, IDA, Linköpings universitet

Föreläsning 1 Datastrukturer (DAT037)

TDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 5 Jonas Lindgren, Institutionen för Datavetenskap, LiU

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

Länkade strukturer, parametriserade typer och undantag

Namn: (Ifylles av student) Personnummer: (Ifylles av student) Tentamensdatum: Tid: Hjälpmedel: Inga hjälpmedel

Transkript:

Algoritmer och datastrukturer TDA143 2017 02 15 Uno Holmer

Algoritmer och datastrukturer, TDA143, HT17, UH

Algoritm Informell beskrivning: Ett antal steg som beskriver hur en uppgift utförs. Formell beskrivning: En algoritm är en ordnad samling entydiga, utförbara steg som beskriver en terminerande process. Brookshear: Computer Science, An overview

Exempel: Sortering 1. Antag första talet sorterat 2. Hitta första osorterade tal 3. Hitta rätt plats i sorterad del 4. Upprepa med resten av listan 5 2 6 1 3 5 6 1 3 2 2 5 6 1 3 2 5 1 3 6

Algoritmer & representationer Algoritm: abstrakt idé för att lösa ett problem Representation: formulering av den abstrakta idén som till exempel: Program Engelska Diagram Pseudokod Formel

Ex. Omvandla Celsius till Fahrenheit Tre representationer: Multiply the temperature in Celsius by 9/5 and add 32 to the product F = 9/5*C + 32 function fahrenheit(c) { return 9/5*c + 32; }

Liknelse: bakning Algoritm Representation Idé om hur man bakar äpplepaj Recept Implementering Bageri

Pseudokod Vanligaste representationen Hybrid mellan naturligt språk och programspråk procedure SeqSearch (List, Value) while ( entries left to be considered) do TestEntry next entry from List if ( Value = TestEntry ) then return success return search failed

Analys av algoritmer Korrekthet Löser algoritmen problemet? Ger den rätt resultat? Terminerar den? Effektivitet Hur lång tid tar den att exekvera? Är den skalbar: hur ökar exekveringstiden med storleken på indata?

Designstrategier för algoritmer Top Down/Bottom Up Uttömmande sökning (brute force) Giriga algoritmer (greedy) Söndra och härska (divide and conquer) Dynamisk programmering Heuristiker (t.ex. inom AI)

Tidskomplexitet Algoritmers körtid mäts i antal operationer: additioner tilldelningar jämförelser Inte i sekunder! Varför? För en given indatastorlek (t.ex. antal element i en lista), hur många operationer utförs? T(n) = f(n)

Exempel: SeqSearch procedure SeqSearch (List, Value) while ( entries left to be considered) do TestEntry next entry from List if ( Value = TestEntry ) then return success return search failed Om listan har n element behövs (i värsta fall) n uppslag n tilldelningar n jämförelser 1 returnering T(n) = 3n + 1 operationer! Kan det göras snabbare?

Binärsökning Om listan är sorterad 1 2 3 4 6 7 9 6 1 2 3 4 6 7 9 6 > 4 procedure BinSearch (List, Value) if( List isempty ) return fail else TestEntry middle entry of List if( Value = TestEntry ) return success 1 2 3 4 6 7 9 1 2 3 4 6 7 9 if( Value > TestEntry ) return BinSearch(RightHalfofList, Value) if( Value < TestEntry ) return BinSearch(LeftHalfofList, Value) 6 < 7 6 = 6

Binärsökning (forts.) Antalet halveringar av n saker = log 2 n Binärsökning kräver bara 5 log 2 n + 2 operationer i värsta fallet

Asymptotisk komplexitet Ordo (Big O) Vanligen räknar man inte exakta antal. Istället beräknar man den asymptotiska komplexiteten hur antalet operationer växer med storleken på indata! Exempel: Om vi dubblar antalet element, hur mycket längre tid tar det att sortera dem?

Ordobegreppet: Big O En funktion g(n) är O(f(n)) om det finns en konstant c>0 så att g(n) c f(n) för alla n n 0 0 f(n) g är uppåt begränsad av f g(n) n 0

Insättningssortering procedure InsertionSort( List ) N 2 while ( N LengthOfList ) do Select the N:th entry in the List as the pivot Move pivot to a temporary location leaving a hole while( (exists entry left of the hole ) and (entry > pivot) do Move the entry down into the hole Move the pivot into the remaining hole N N + 1

Sortering: Tidskomplexitet Insättningssortering, grov analys - Två nästlade for loopar med som mest n iterationer => T(n) = O(n 2 ) operationer Merge sort: T(n) = O(n log n) - Hur många operationer behövs för att sortera 2n element jämfört med n element med respektive algoritm? T(2n) =...

Lätta och svåra problem Vissa problem är olösbara (oavgörbara = undecidable) och vissa är lösbara men hopplöst svåra (ohanterbara = intractable) De enda kända algoritmerna har exponentiell tidskomplexitet: T(n) = O(2 n ), eller sämre.

Lätta och svåra problem Oavgörbara problem Haltproblemet... O(2 n ) O(n c ) O(n log n) O(log n)... Ohanterbara problem Hanterbara problem approximation TSP SAT... Sökning Sortering...

Exempel: Schemaläggning Du har fått n stycken aktiviteter att schemalägga under en dag. Inga aktiviteter får ske samtidigt, så några måste kanske hoppas över. Ditt jobb är nu att schemalägga så många aktiviteter som möjligt.

Schemaläggning 6:00 7:00 8:00 9:00 10:00 11:00 12:00 13:00 14:00 15:00 16:00

Idé: kortaste aktiviteter först: 3 6:00 7:00 8:00 9:00 10:00 11:00 12:00 13:00 14:00 15:00 16:00

Idé: Tidigast sluttid först: 4! 6:00 7:00 8:00 9:00 10:00 11:00 12:00 13:00 14:00 15:00 16:00

Idé: Tidigast sluttid först: 4! Optimal strategi! 6:00 7:00 8:00 9:00 10:00 11:00 12:00 13:00 14:00 15:00 16:00

Exempel: Handelsresandeproblemet (Travelling Saleseman Problem) Hitta den kortaste rutten mellan alla städer så att varje stad endast besöks en gång 5 km 5 6 10 6 4 9 7 8

Exempel: Handelsresandeproblemet TSP är urtypen för ett svårt problem TSP är ett så kallat NP komplett problem NP kompletta problem karakteriseras av att Inget problem har en effektiv lösning (än) Om ett problem kan lösas effektivt kan alla * Effektivt betyder att det kan lösas på tid som växer polynomiellt med antalet städer, i motsats till exponentiellt

Svåra problem in real life Praktiskt viktiga men svåra problem finns t.ex. inom områdena Industriell logistikoptimering Schemaläggning Ruttoptimering (TSP) Packningsoptimering Kryptologi Data Mining Genetik

Beslutsproblem Beslutsproblem har ja/nej svar Ex. SAT: Satisfierbarhet hos logiska uttryck. Givet ett uttryck A(x 1,,x n ) med sanningsvariablerna x 1,,x n, finns det en tilldelning av sanningsvärden T/F till x 1,,x n så att A blir sann? Ex. {x 1 =T, x 2 =F, x 3 =T} satisfierar uttrycket x 1 & (x 2 x 3 ) Ex. Uttrycket x &!x är inte satisfierbart.

Svårighetsklasserna P, NP, NPC Beslutsroblem i klassen P kan lösas av en deterministisk maskin i polynomiell tid Beslutsproblem i klassen NP: kan lösas av en ickedeterministisk orakelmaskin i polynomiell tid (ingen sådan maskin är känd) lösningen kan kontrolleras i polynomiell tid Öppen fråga sedan länge: Är P = NP? P NP P = NP

NP fullständiga problem: NPC De svåraste problemen i NP finns i klassen NPC. Ett problem π 1 inp tillhör NPC om vilket annat NPCproblem som helst (π 2 ) kan översättas till π 1 i polynomiell tid π 1 NP f π 2 π 2 NP π 1 1 NPC f NPC... men vilket var det första kända NPC problemet?

Cook s teorem Stephen Cook, Leonid Leven, 1971 Teorem: SAT är NP-fullständigt. Bevis: Visa att ett godtyckligt problem i NP kan översättas i polynomiell tid av en deterministisk maskin till SAT.

P = NP = NPC? Detfinnsingetkäntfall där ett NPC problem kan översättas i polynomiell tid till ett problem iklassenp. Då kunde ju även NPC problemet lösas i polynomiell tid och alla andra NPC problem också! f f π 1 π 2 P NP NPC π 1 π 2 P = NP = NPC

Datastrukturer Abstrakta datatyper En Abstrakt DataTyp (ADT) ärendatasamling med specifika åtkomstmönster för elementen. Exempel: Kö: FIFO = First In First Out Stack: LIFO = Last In First Out Träd: Binärt sökträd, kodningsträd, abstrakt syntaxträd Syfte: Underlätta effektiv dataåtkomst för algoritmer

Datastrukturer Abstrakta datatyper En datastruktur är en lagringsteknik för data som används för att implementera en Abstrakt datatyp. Exempel: Fält Länkad lista Träd Begreppen används något flytande. Ofta menar vi ADT när vi säger datastruktur, det beror på abstraktionsnivån.

Datastrukturer & algoritmer Algoritm + passande ds. => Snabbt program Algoritm + dålig ds. => Långsamt program Ibland designas algoritmer runt en specifik datastruktur. Ibland uppfinns nya datastrukturer för att göra en algoritm effektivare. Rätt datastruktur ger mer läsbar algoritm!

Datastrukturer och ADT:er Hashtabell Oordnad mängd Fält Stack Länkad lista FIFO kö Dictionary Träd Prioritetskö Graf Kodningsträd Binärt sökträd (ordnad mängd) Abstrakt syntaxträd

Stack (LIFO) Operationer - push lägg till överst - pop ta bort och returnera översta Exempel: - Skriva ut listor baklänges Hålla reda på funktionsanrop ijava Anrop: f() g() h() f() g() h() Retur:

Kö (FIFO) Operationer - enqueue lägg till först - dequeue ta bort och returnera sista Exempel: - Skrivarkö, grafsökning

Associationslista (Dictionary) Operationer - insert associera nyckeln K med värdet V - lookup hämta värdet som har nyckeln K Exempel: - Tabeller, avbildningar Koppla ihop personnummer med personuppgifter insert(k,v) Key Value K V lookup(k) V

Träd Allmäna datastrukturer med många tillämpningar Rotnod Noder och länkar Intern nod Föräldrar och barn Löv Subträd Löv Löv

Binärt sökträd (ordnad mängd) Vanlig form av träd. Snabb insättning och borttagning i självsorterande binära trädstrukturer. Max 2 barn per nod. Vänster = mindre, Höger = större 10 < > 6 12 3 8 17 7

Binärsökning igen! procedure BinSearch( Tree, Value ) if( root pointer == null ) return Search failed else TestEntry value of root node if ( Value = TestEntry ) return Search successful if ( Value > TestEntry ) BinSearch( RightSubtree, Value ) else BinSearch( LeftSubtree, Value ) BinSearch(,7) 7 < 10 10 6 7 > 6 3 8 7 < 8 7 12 17

Sammanfattning Algoritmer är en viktig del av problemlösning Datastrukturer är nödvändiga verktyg för att implementera effektiva algoritmer Många problem har standardiserade lösningar Många problem är svåra att lösa effektivt