i=1 c i = B och c i = a i eller c i = b i för 1 i n. Beskriv och analysera en algoritm som löser detta problem med hjälp av dynamisk programmering.
|
|
- Marie Axelsson
- för 8 år sedan
- Visningar:
Transkript
1 Algoritmer och Komplexitet ht 8 Övning 3+4 Giriga algoritmer och Dynamisk programmering Längsta gemensamma delsträng Strängarna ALGORITM och PLÅGORIS har den gemensamma delsträngen GORI Denlängsta gemensamma delsträngen hos dessa strängar har alltså längd 4 I en delsträng måste tecknen ligga i en sammanhängande följd Konstruera en effektiv algoritm som givet två strängar a a 2 a m och b b 2 b n beräknar och returnerar längden hos den längsta gemensamma delsträngen Algoritmen ska bygga på dynamisk programmering och gå i tid O(nm) Talföljder Givet är två följder av positiva heltal a,a 2,,a n och b,b 2,, b n där alla tal är mindre än n 2 samt ett positivt heltal B där B n 3 Problemet är att avgöra om det finns någon talföljd c,c 2,,c n så att n i= c i = B och c i = a i eller c i = b i för i n Beskriv och analysera en algoritm som löser detta problem med hjälp av dynamisk programmering Tala också om hur man ska utvidga algoritmen så den också talar om hur lösningen ser ut, alltså om c i = a i eller c i = b i för i n Proteinvikning Ett protein är en lång kedja av aminosyror Proteinkedjan är inte rak som en pinne utan hopvikt på ett intrikat sätt som minimerar den potentiella energin Man vill väldigt gärna kunna räkna ut hur ett protein kommer att vika sig I denna uppgift ska vi därför studera en enkel modell av proteinvikning där aminosyrorna är antingen hydrofoba eller hydrofila Hydrofoba aminosyror tenderar att klumpa ihop sig För enkelhets skull ser vi proteinet som en binär sträng där ettor motsvarar hydrofoba aminosyror och nollor hydrofila aminosyror Strängen (proteinet) ska sedan vikas i ett tvådimensionellt kvadratiskt gitter Målet är att få dom hydrofoba aminosyrorna att klumpa ihop sig, det vill säga att få så många ettor som möjligt att ligga nära varandra Vi har alltså ett optimeringsproblem där målfunktionen är antalet par av ettor som ligger intill varandra i gittret (lodrätt eller vågrätt) utan att vara intill varandra i strängen Du ska konstruera en algoritm som med hjälp av dynamisk programmering konstruerar en optimal dragspelsvikning av en given proteinsträng av längd n En dragspelsvikning är en vikning där strängen först går en sträcka rakt nedåt, sedan en sträcka rakt uppåt, sedan en sträcka rakt nedåt, och så vidare I en sådan vikning kan man notera att lodräta par av intilliggande ettor alltid kommer i följd i strängen, så det är bara vågräta par av ettor som bidrar till målfunktionen I följande figur är strängen dragspelsvikt på ett sådant sätt att målfunktionen blir 4
2 Definition av problemet Proteindragspelsvikning: Inmatning: En binär sträng med n tecken Problem: Hitta den dragspelsvikning av indatasträngen som ger det största värdet på målfunktionen, alltså det största antalet par av ettor som ligger bredvid varandra men inte direkt efter varandra i strängen Konstruera och analysera tidskomplexiteten för en algoritm som löser proteindragspelsvikningsproblemet med dynamisk programmering Du får gärna använda dig av nedanstående algoritm, som beräknar antalet par ettor i ett varv (dvs mellan två sträckor) i en dragspelsvikning som ligger bredvid varandra (men inte direkt efter varandra i strängen) Anta att proteinet lagras i en array p[n] Parametrarna a och b anger index i arrayen för den första sträckans ändpunkter Parametern c anger index för den andra sträckans slutpunkt Se figuren nedanför till höger a profit(a,b,c) = shortest min(b-a,c-(b+)); s ; for i to shortest do if p[b-i]= and p[b++i]= then s s+; return s; c b b+ Not: Proteinvikningsproblemet är ett viktigt algoritmiskt problem som studeras i bioinformatiken Det behandlas tillsammans med många andra problem med biologisk anknytning i den valfria kursen Algoritmisk bioinformatik som går i period 4 varje år Analysator för kontextfri grammatik En kontextfri grammatik brukar användas för att beskriva syntax för bland annat programspråk En kontextfri grammatik i Chomskynormalform beskrivs av en mängd slutsymboler T (som brukar skrivas med små bokstäver), en mängd ickeslutsymboler N (som brukar skrivas med stora bokstäver), startsymbolen S (en av ickeslutsymbolerna i mängden N), en mängd omskrivningsregler som antingen är på formen A BC eller A a, där A, B, C N och a T Om A N så definieras L(A) genom L(A) ={bc : b L(B) och c L(C) där A BC {a : A a 2
3 Språket som genereras av grammatiken definieras nu som L(S), vilket alltså är alla strängar av slutsymboler som kan bildas med omskrivningskedjor som börjar med startsymbolen S Exempel: Betrakta grammatiken med T = {a, b, N = {S, A, B, R, startsymbolens och reglerna S AR, S AB, A a, B b, R SB Vi kan se att strängen aabb tillhör språket som genereras av grammatiken med hjälp av följande kedja av omskrivningar: S AR ar asb asb aabb aabb aabb I själva verket kan man visa att det språk som genereras av grammatiken är precis alla strängar som består av k stycken a följt av k stycken b där k är ett positivt heltal Din uppgift är att konstruera och analysera en effektiv algoritm som avgör ifall en sträng tillhör det språk som genereras av en grammatik Indata är alltså en kontextfri grammatik på Chomskynormalform samt en sträng av slutsymboler Utdata är sant eller falskt beroende på om strängen kunde genereras av grammatiken eller inte Ange tidskomplexiteten för din algoritm uttryckt i antalet regler m i grammatiken och längden n av strängen Mer om grammatiker kan man läsa i kursen Artificiella språk och syntaxanalys Lösningar Lösning till Längsta gemensamma delsträng Låt M[i, j] vara antal bokstäver till vänster om (och inklusive) a i som överensstämmer med lika många bokstäver till vänster (och inklusive) b j Längden av den längsta gemensamma strängen är då det största talet i matrisen M M kan definieras rekursivt på följande sätt: M[i, j] = om i =eller j =, M[i,j ] + om a i = b j, annars Följande algoritm beräknar hela M och returnerar det största talet i M max for j to n M[,j] for i to m M[i, ] for j to n if a i = b j then M[i, j] M[i,j ] + if M[i, j] >maxthen max M[i, j] else M[i, j] return max Tiden domineras av den nästlade for-slingan och är alltså Θ(nm) Lösning till Talföljder Vi skapar en boolesk n B-matris M somfrånbörjanärfylldmednollorenettaim[k, s] ska betyda att det finns något val av c,,c k så att k i= c i = s Rekursionsekvationen för M[k, s] blir: om k =och (s = a eller s = b ), M[k, s] = om k> och (M[k,s a k ]=eller M[k,s b k ]=), annars 3
4 Beräkningen börjar med att M[,a ] och M[,b ] sätts till Därefter sätter man ettor i M[2,a + a 2 ], M[2,a + b 2 ], M[2,b + a 2 ] och M[2,b + b 2 ] i den andra raden av matrisen, sedan sätter man ettor i den tredje raden och så vidare Om det hamnar en etta i M[n, B] så är svaret på problemet ja Algoritmen kan se ut så här i C: int ExistsC(int n, int a[], int b[], int B) { char M[n + ][B + ]; /* Dynamiska matriser är ett tillägg i gcc */ int i, j; for (i = ; i <= n; i++) for (j = ; j <= B; j++) M[i][j] = ; M[][a[]] = M[][b[]] = ; for (i = 2; i <= n; i++) for (j = ; j <= B; j++) { if (j - a[i] > && M[i - ][j - a[i]]) M[i][j] = ; if (j - b[i] > && M[i - ][j - b[i]]) M[i][j] = ; return M[n][B]; Satserna inuti den dubbla forslingan utförs (n )B gånger och i dom satserna utförs högst 4 jämförelser och 2 tilldelningar, dvs ett konstant antal Hela algoritmen går alltså i O(n 2 )+O((n )B) =O(n 2 + nb) O(n 4 ) Genom att gå bakifrån (från den n-te raden och uppåt) och undersöka i vilka positioner det finns ettor kan man lista ut en lösning Ettan i M[n, B] måste ha satts dit på grund av att det finns en etta i antingen M[n,B a n ] eller M[n,B b n ] Kom ihåg vilken av dessa det är Om det står en etta i båda positionerna är det bara att välja en av dom (eftersom bara en enda lösning efterfrågas) Fortsätt på samma sätt från den valda positionen ända tills rad har nåtts Implementationen i C ser ut på följande sätt void WriteC(int n, int a[], int b[], int B) { int c[n + ], pos; /* samma satser som i proceduren ExistsC ovan ska in här*/ pos = B; for (i = n; i > ; i++) { if (pos - a[i] > && M[i - ][pos - a[i]]) c[i] = a[i]; else c[i] = b[i]; pos -= c[i]; c[] = pos; printf("lösningen är %d", c[]); for (i = 2; i <= n; i++) printf(" + %d", c[i]); Lösning till Proteinvikning Låt q a,b vara det maximala värdet på målfunktionen man kan få för en vikning av delen p[an] av proteinet, där den första sträckan i vikningen har ändpunkterna a och b Vi kan uttrycka q a,b rekursivt på följande sätt: q a,b = max (profit(a, b, c)+q b+,c) b+<c n Basfallen är q a,n =för a<nsvarethittarvisedansom max q,b <b n Nu gäller det bara att beräkna q a,b enligt dessa formler i rätt ordning: 4
5 for a to n- do q[a,n] ; for b n- downto 2 do for a to b- do t -; for c b+2 to n do v profit(a,b,c)+q[b+,c]; if v>t then t v; q[a,b] t; max ; for b 2 to n do if q[,b]>max then max q[,b]; return max; Eftersom vi som mest har tre nästlade for-slingor och ett anrop till profit tar tid O(n) blir tidskomplexiteten uppenbarligen O(n 4 ) Lösning till Analysator för kontextfri grammatik Vi använder dynamisk programmering ungefär som i problemet där man letar efter optimal matriskedjemultiplikationsordning Här ska vi istället bestämma i vilken ordning och på vilken delsträng reglerna ska tillämpas Indata är en uppsättning regler R och en vektor w[n] som alltså indexeras från till n Låt oss bygga upp en matris M[n,n] där elementet M[i,j] anger dom ickeslutsymboler från vilka man med hjälp av kedjor av omskrivningar kan härleda delsträngen w[ij] Rekursiv definition av M[i,j]: { {X :(X w[i]) R om i = j M[i, j] = {X :(X AB) R k : A M[i, k ] B M[k, j] om i<j Eftersom varje position i matrisen är en mängd av ickeslutsymboler så måste vi välja en lämplig datastruktur också för detta Låt oss representera en mängd av ickeslutsymboler som en bitvektor som indexeras med ickeslutsymboler betyder att symbolen är med i mängden och att den inte är med i mängden Exempel: Om M[i,j][B]=så är ickeslutsymbolen B med i mängden M[i,j], vilket betyder att det finns en kedja av omskrivningsregler från B till delsträngen w[ij] Algoritm som beräknar matrisen M[i,j] och returnerar sant ifall strängen tillhör språket som genereras av grammatiken: for i to n do M[i,i] ; /* alla bitar nollställs */ för varje regel X w[i] do M[i,i][X] ; for len 2 to n do for i to n-len+ do j i+len-; M[i,j] ; for k i+ to j do för varje regel X AB do if M[i,k-][A]= and M[k,j][B]= then M[i,j][X] ; return M[,n][S]= ; Tid: O(n 3 m) Minne: O(n 2 m) (eftersom m är en övre gräns för antalet ickeslutsymboler) 5
Dynamisk programmering
DD2354, Algoritmer och komplexitet, 27 Uppgifter till övning 4 Dynamisk programmering Talföljder Givet är två följder av positiva heltal a,a 2,,a n och b,b 2,, b n där alla tal är mindre än n 2 samt ett
Dynamisk programmering
Algoritmer, datastrukturer och komplexitet, hösten 27 Uppgifter till övning 4 Dynamisk programmering På denna övning är det också inlämning av skriftliga lösningar av teoriuppgifterna till labb 2 och muntlig
Algoritmer, datastrukturer och komplexitet
Algoritmer, datastrukturer och komplexitet Övning 4 Anton Grensjö grensjo@csc.kth.se 25 september 215 Anton Grensjö ADK Övning 4 25 september 215 1 / 28 Översikt Kursplanering F9: Dynamisk programmering
Föreläsning 5: Dynamisk programmering
Föreläsning 5: Dynamisk programmering Vi betraktar en typ av problem vi tidigare sett: Indata: En uppsättning intervall [s i,f i ] med vikt w i. Mål: Att hitta en uppsättning icke överlappande intervall
Dekomposition och dynamisk programmering
Algoritmer, datastrukturer och komplexitet, hösten 2016 Uppgifter till övning 3 Dekomposition och dynamisk programmering Max och min med dekomposition I vektorn v[1..n] ligger n tal. Konstruera en dekompositionsalgoritm
Föreläsning 7: Syntaxanalys
DD2458, Problemlösning och programmering under press Föreläsning 7: Syntaxanalys Datum: 2007-10-30 Skribent(er): Erik Hammar, Jesper Särnesjö Föreläsare: Mikael Goldmann Denna föreläsning behandlade syntaxanalys.
Algoritmer, datastrukturer och komplexitet
Övningsuppgifter i Algoritmer, datastrukturer och komplexitet hösten 2015 Övning 1: Algoritmanalys 2 Övning 2: Datastrukturer och grafer 6 Övning 3: Dekomposition och dynamisk programmering 10 Övning 4:
Algoritmer, datastrukturer och komplexitet
Algoritmer, datastrukturer och komplexitet Övning 7 Anton Grensjö grensjo@csc.kth.se 14 oktober 2015 Anton Grensjö ADK Övning 7 14 oktober 2015 1 / 28 Översikt Kursplanering Ö6: Algoritmkonstruktion F19:
Algoritmer, datastrukturer och komplexitet
Övningsuppgifter i Algoritmer, datastrukturer och komplexitet hösten 2015 Övning 1: Algoritmanalys 2 Övning 2: Datastrukturer och grafer 6 Övning 3: Dekomposition och dynamisk programmering 10 Övning 4:
Tommy Färnqvist, IDA, Linköpings universitet
Föreläsning Metoder för algoritmdesign TDDD86: DALP Utskriftsversion av föreläsning i Datastrukturer, algoritmer och programmeringsparadigm 7 december 015 Tommy Färnqvist, IDA, Linköpings universitet.1
Algoritmer, datastrukturer och komplexitet
Algoritmer, datastrukturer och komplexitet Övning 6 Anton Grensjö grensjo@csc.kth.se 4 oktober 2017 1 Idag Algoritmkonstruktion (lite blandat) Redovisning och inlämning av labbteori 3 2 Uppgifter Uppgift
Reguljära uttryck Grammatiker Rekursiv nedåkning Allmänna kontextfria grammatiker. Syntaxanalys. Douglas Wikström KTH Stockholm
Syntaxanalys Douglas Wikström KTH Stockholm popup-help@csc.kth.se Reguljära uttryck Reguljära uttryck förutsätter att en mängd bokstäver är givna, ett så kallat alfabet, som oftast betecknas med Σ. Uttryck
Komplexitetsklasser och repetition
Algoritmer, datastrukturer och komplexitet, hösten 2016 Uppgifter till övning 12 Komplexitetsklasser och repetition Uppgifter på komplexitetsklasser co-np-fullständighet Ett diskret tekniskt diagnosproblem
Algoritmer, datastrukturer och komplexitet
Algoritmer, datastrukturer och komplexitet Övning 6 Anton Grensjö grensjo@csc.kth.se 9 oktober 2015 Anton Grensjö ADK Övning 6 9 oktober 2015 1 / 23 Översikt Kursplanering Ö5: Grafalgoritmer och undre
Föreläsning 7: Syntaxanalys
DD2458, Problemlösning och programmering under press Föreläsning 7: Syntaxanalys Datum: 2009-10-27 Skribent(er): Carl-Fredrik Sundlöf, Henrik Sandström, Jonas Lindmark Föreläsare: Fredrik Niemelä 1 Syntaxanalys
SCB :-0. Uno Holmer, Chalmers, höger 2 Ex. Induktiv definition av lista. // Basfall
Rekursiva funktioner Föreläsning 10 (Weiss kap. 7) Induktion och rekursion Rekursiva funktioner och processer Weiss 7.1-3 (7.4, 7.5.3 utgår) Fibonaccital (7.3.4) Exempel: Balansering av mobil (kod se lab
Sökning och sortering
Sökning och sortering Programmering för språkteknologer 2 Sara Stymne 2013-09-16 Idag Sökning Analys av algoritmer komplexitet Sortering Vad är sökning? Sökning innebär att hitta ett värde i en samling
Algoritmer, datastrukturer och komplexitet
Algoritmer, datastrukturer och komplexitet Övning 1 Anton Grensjö grensjo@csc.kth.se 14 september 2015 Anton Grensjö ADK Övning 1 14 september 2015 1 / 22 Översikt Kursplanering F1: Introduktion, algoritmanalys
Programkonstruktion och Datastrukturer
Programkonstruktion och Datastrukturer VT 2012 Tidskomplexitet Elias Castegren elias.castegren.7381@student.uu.se Problem och algoritmer Ett problem är en uppgift som ska lösas. Beräkna n! givet n>0 Räkna
Algoritmer, datastrukturer och komplexitet
Algoritmer, datastrukturer och komplexitet Övning 8 Anton Grensjö grensjo@csc.kth.se 10 november 2015 Anton Grensjö ADK Övning 8 10 november 2015 1 / 34 Översikt Kursplanering F21: Introduktion till komplexitet
Föreläsning 9: Turingmaskiner och oavgörbarhet. Turingmaskinen. Den maximalt förenklade modell för beräkning vi kommer använda är turingmaskinen.
Föreläsning 9: Turingmaskiner och oavgörbarhet Turingmaskinen Den maximalt förenklade modell för beräkning vi kommer använda är turingmaskinen. Data är ett oändligt långt band där nollor och ettor står
Tommy Färnqvist, IDA, Linköpings universitet
Föreläsning 1 Algoritmiska paradigm TDDC70/91: DALG Utskriftsversion av föreläsning i Datastrukturer och algoritmer 15 oktober 013 Tommy Färnqvist, IDA, Linköpings universitet 1.1 Innehåll Innehåll 1 Dekomposition
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
Algoritmer och datastrukturer H I 1 0 2 9 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 1 Inledande om algoritmer Rekursion Stacken vid rekursion Rekursion iteration Möjliga vägar
Programmering, grundkurs, 8.0 hp HI1024, HI1900 etc., Tentamen TEN1. Måndagen den 10 januari 2011,
Programmering, grundkurs, 8.0 hp HI1024, HI1900 etc., Tentamen TEN1 Måndagen den 10 januari 2011, 8.15 12.15 Tentamen består av två delar, del A och del B. Del A innehåller 10 kryssfrågor på olika teman
Föreläsning 5: Grafer Del 1
2D1458, Problemlösning och programmering under press Föreläsning 5: Grafer Del 1 Datum: 2006-10-02 Skribent(er): Henrik Sjögren, Patrik Glas Föreläsare: Gunnar Kreitz Den här föreläsningen var den första
Exempel: Förel Rekursion III Nr 14. Uno Holmer, Chalmers,
Exempel: Kappsäcksproblemet Backtracking Dynamisk programmering Föreläsning (Weiss kap..-) Kan man ur en grupp föremål F,,F N med vikterna V,,V N välja ut en delgrupp som väger exakt M kilo? Exempel: föremål
Uppgift 1 (grundläggande konstruktioner)
Uppgift 1 (grundläggande konstruktioner) a) Skriv ett program som låter användaren mata in 7 heltal och som gör utskrifter enligt nedanstående körexempel. Mata in 7 heltal: 1 0 0 3 1 1 1 Tal nr 2 var en
Asymptotisk komplexitetsanalys
1 Asymptotisk komplexitetsanalys 2 Lars Larsson 3 4 VT 2007 5 Lars Larsson Asymptotisk komplexitetsanalys 1 Lars Larsson Asymptotisk komplexitetsanalys 2 et med denna föreläsning är att studenterna skall:
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 7 Innehåll Rekursion Rekursivt tänkande: Hur många år fyller du? Ett år mer än förra året! Rekursion Rekursiv problemlösning Binärsökning Generiska metoder Rekursiv problemlösning: Dela upp
Magnus Nielsen, IDA, Linköpings universitet
Föreläsning 7 Introduktion till sortering TDDC91,TDDE22,725G97: DALG Utskriftsversion av föreläsning i Datastrukturer och algoritmer 24 september 2018 Magnus Nielsen, IDA, Linköpings universitet 7.1 1
Algoritmer, datastrukturer och komplexitet
Algoritmer, datastrukturer och komplexitet Övning 10 Anton Grensjö grensjo@csc.kth.se 9 november 2017 1 Idag En konstruktionsreduktion Fler bevis av NP-fullständighet 2 Teori Repetition Ett problem tillhör
String [] argv. Dagens Agenda. Mer om arrayer. Mer om arrayer forts. String [] argv. argv är variabelnamnet. Arrayer och Strängar fortsättning
Dagens Agenda String [] argv String [] argv Arrayer och Strängar fortsättning Booleska operatorer if, for, while satser Introduktion till algoritmer public static void main(string [] argv) argv är variabelnamnet
TDDI16 Datastrukturer och algoritmer. Algoritmanalys
TDDI16 Datastrukturer och algoritmer Algoritmanalys 2017-08-28 2 Översikt Skäl för att analysera algoritmer Olika fall att tänka på Medelfall Bästa Värsta Metoder för analys 2017-08-28 3 Skäl till att
Turingmaskiner och oavgörbarhet. Turingmaskinen. Den maximalt förenklade modell för beräkning vi kommer använda är turingmaskinen.
Turingmaskiner och oavgörbarhet Turingmaskinen Den maximalt förenklade modell för beräkning vi kommer använda är turingmaskinen. Data är ett oändligt långt band där nollor och ettor står skrivna: Oändligt
Algoritmanalys. Inledning. Informationsteknologi Malin Källén, Tom Smedsaas 1 september 2016
Informationsteknologi Malin Källén, Tom Smedsaas 1 september 2016 Algoritmanalys Inledning Exempel 1: x n När vi talade om rekursion presenterade vi två olika sätt att beräkna x n, ett iterativt: x n =
Datatyper och kontrollstrukturer. Skansholm: Kapitel 2) De åtta primitiva typerna. Typ Innehåll Defaultvärde Storlek
De åtta primitiva typerna Java, datatyper, kontrollstrukturer Skansholm: Kapitel 2) Uppsala Universitet 11 mars 2005 Typ Innehåll Defaultvärde Storlek boolean true, false false 1 bit char Tecken \u000
Algoritmer, datastrukturer och komplexitet
Algoritmer, datastrukturer och komplexitet Övningsmästarprovsövning 2 Anton Grensjö grensjo@csc.kth.se 20 november 2017 1 Dagordning 1. Genomgång av uppgiftens lösning 2. Genomgång av bedömningskriterier
n (log n) Division Analysera skolboksalgoritmen för division (trappdivision). Använd bitkostnad.
Algoritmer och Komplexitet ht 08. Övning 1 Algoritmanalys Ordo Jämför följande par av funktioner med avseende på hur dom växer då n växer. Tala i varje fall om ifall f(n) Θ(g(n)), f(n) O(g(n)) eller f(n)
Föreläsning 5 Innehåll
Föreläsning 5 Innehåll Algoritmer och effektivitet Att bedöma och jämföra effektivitet för algoritmer Begreppet tidskomplexitet Datavetenskap (LTH) Föreläsning 5 VT 2019 1 / 39 Val av algoritm och datastruktur
Introduktion till algoritmer - Lektion 4 Matematikgymnasiet, Läsåret 2014-2015. Lektion 4
Introduktion till algoritmer - Lektion 4 Matematikgymnasiet, Läsåret 014-015 Denna lektion ska vi studera rekursion. Lektion 4 Principen om induktion Principen om induktion är ett vanligt sätt att bevisa
Tommy Färnqvist, IDA, Linköpings universitet
Föreläsning 8 Sortering och urval TDDC70/91: DALG Utskriftsversion av föreläsning i Datastrukturer och algoritmer 1 oktober 2013 Tommy Färnqvist, IDA, Linköpings universitet 8.1 Innehåll Innehåll 1 Sortering
Algoritmer, datastrukturer och komplexitet
Algoritmer, datastrukturer och komplexitet Övning 12 Anton Grensjö grensjo@csc.kth.se 10 december 2015 Anton Grensjö ADK Övning 12 10 december 2015 1 / 19 Idag Idag Komplexitetsklasser Blandade uppgifter
Grundläggande datalogi - Övning 9
Grundläggande datalogi - Övning 9 Björn Terelius January 30, 2009 Ett formellt språk är en (oftast oändlig) mängd strängar. Språket definieras av en syntax som är en samling regler för hur man får bilda
Algoritmanalys. Genomsnittligen behövs n/2 jämförelser vilket är proportionellt mot n, vi säger att vi har en O(n) algoritm.
Algoritmanalys Analys av algoritmer används för att uppskatta effektivitet. Om vi t. ex. har n stycken tal lagrat i en array och vi vill linjärsöka i denna. Det betyder att vi måste leta i arrayen tills
Programmering II (ID1019) :00-11:00
ID1019 Johan Montelius Programmering II (ID1019) 2015-06-11 08:00-11:00 Instruktioner Du får inte ha något materiel med dig förutom skrivmateriel. Mobiler etc, skall lämnas till tentamensvakten. Svaren
PROV I MATEMATIK Automatateori och formella språk DV1 4p
UPPSALA UNIVERSITET Matematiska institutionen Salling (070-6527523) PROV I MATEMATIK Automatateori och formella språk DV1 4p 19 mars 2004 SKRIVTID: 15-20. POÄNGGRÄNSER: 18-27 G, 28-40 VG. MOTIVERA ALLA
DD1361 Programmeringsparadigm. Formella Språk & Syntaxanalys. Per Austrin
DD1361 Programmeringsparadigm Formella Språk & Syntaxanalys Föreläsning 3 Per Austrin 2015-11-13 Huvudkoncept hittils: Snabb repetition Formellt språk en mängd strängar Reguljära språk den klass av formella
Tentamen i Algoritmer & Datastrukturer i Java
Tentamen i Algoritmer & Datastrukturer i Java Hjälpmedel: Skrivhjälpmedel, miniräknare. Ort / Datum: Halmstad / 2008-05-27 Skrivtid: 4 timmar Kontakt person: Nicolina Månsson, tel. 035-167487 Poäng / Betyg:
Algoritmer och effektivitet. Föreläsning 5 Innehåll. Analys av algoritmer. Analys av algoritmer Tidskomplexitet. Algoritmer och effektivitet
Föreläsning 5 Innehåll Algoritmer och effektivitet Algoritmer och effektivitet Att bedöma, mäta och jämföra effektivitet för algoritmer Begreppet tidskomplexitet Undervisningsmoment: föreläsning 5, övningsuppgifter
Tentamen i Grundläggande Programvaruutveckling, TDA548
Tentamen i Grundläggande Programvaruutveckling, Joachim von Hacht/Magnus Myreen Datum: 2016-12-20 Tid: 08.30-12.30 Hjälpmedel: Engelskt-Valfritt språk lexikon Betygsgränser: U: -23 3: 24-37 4: 38-47 5
Datorlära 6. Arbeta med strängar Inmatning med tangentbordet Bygga ett program med inmatning, funktioner, osv
Datorlära 6 Arbeta med strängar Inmatning med tangentbordet Bygga ett program med inmatning, funktioner, osv 1 Arbeta med Strängar Strängar skapas med text inom citattecken, enkla eller dubbla.!>> str=
Dugga Datastrukturer (DAT036)
Dugga Datastrukturer (DAT036) Duggans datum: 2012-11-21. Författare: Nils Anders Danielsson. För att en uppgift ska räknas som löst så måste en i princip helt korrekt lösning lämnas in. Enstaka mindre
public static void mystery(int n) { if (n > 0){ mystery(n-1); System.out.print(n * 4); mystery(n-1); } }
Rekursion 25 7 Rekursion Tema: Rekursiva algoritmer. Litteratur: Avsnitt 5.1 5.5 (7.1 7.5 i gamla upplagan) samt i bilderna från föreläsning 6. U 59. Man kan definiera potensfunktionen x n (n heltal 0)
Programmering för språkteknologer II, HT2014. Rum
Programmering för språkteknologer II, HT2014 Avancerad programmering för språkteknologer, HT2014 evelina.andersson@lingfil.uu.se Rum 9-2035 http://stp.ling.uu.se/~evelina/uv/uv14/pst2/ Idag - Sökalgoritmer
b) S Ø aa, A Ø aa» bb, B Ø aa» bc, C Ø ac» bc» 2. Låt L vara språket över 8a< som nedanstående NFA accepterar.
Salling, 070-6527523 TID : 9-14 HJÄLPMEDEL : Inga BETYGSGRÄNSER : G 18p, VG 28p SKRIV TYDLIGT OCH MOTIVERA NOGA! PROV I MATEMATIK AUTOMATEORI & FORMELLA SPRÅK DV1, 4 p 20 MARS 2002 1. Språket L över alfabetet
Föreläsning 5 Innehåll. Val av algoritm och datastruktur. Analys av algoritmer. Tidsåtgång och problemets storlek
Föreläsning 5 Innehåll Val av algoritm och datastruktur Algoritmer och effektivitet Att bedöma och jämföra effektivitet för algoritmer Begreppet tidskomplexitet Det räcker inte med att en algoritm är korrekt
Länkade listor kan ingå som en del av språket, dock ej i C Länkade listor är ett alternativ till:
Länkade listor i C Länkade listor kan ingå som en del av språket, dock ej i C Länkade listor är ett alternativ till: Dynamiskt allokerad array Arrayer allokerade på stacken Kan alltså användas till att
TDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 5 Jonas Lindgren, Institutionen för Datavetenskap, LiU
TDDC30 Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 5 Jonas Lindgren, Institutionen för Datavetenskap, LiU På denna föreläsning: Algoritmanalys Tidskomplexitet, Rumskomplexitet
Föreläsning 13. Dynamisk programmering
Föreläsning 13 Dynamisk programmering Föreläsning 13 Dynamisk programmering Fibonacci Myntväxling Floyd-Warshall Kappsäck Handelsresandeproblemet Uppgifter Dynamisk programmering Dynamisk programmering
Skriv i mån av plats dina lösningar direkt i tentamen. Skriv ditt kodnummer längst upp på varje blad.
5(16) Tentamen på kurserna Programmeringsteknik med C och Matlab Programmering i C Tid: 2/11-11, kl. 9-13 Lärare: Jonny Pettersson Totalt: 60 poäng Betyg 3: 30 poäng Betyg 4: 39 poäng Betyg 5: 48 poäng
Lösningar till tentauppgifterna sätts ut på kurssidan på nätet idag kl 19. Omtentamen i Programmering C, 5p, fristående, kväll, 040110.
1(8) ÖREBRO UNIVERSITET INSTITUTIONEN FÖR TEKNIK Lösningar till tentauppgifterna sätts ut på kurssidan på nätet idag kl 19. Denna tenta kommer att vara färdigrättad On 14/1-04 och kan då hämtas på mitt
Rekursion och induktion för algoritmkonstruktion
Informationsteknologi Tom Smedsaas 22 januari 2006 Rekursion och induktion för algoritmkonstruktion Att lösa ett problem rekursivt innebär att man uttrycker lösningen i termer av samma typ av problem som
732G Linköpings universitet 732G11. Johan Jernlås. Översikt. Repetition. Muddy. Funktioner / metoder. Punktnotation. Evalueringsordning
Varför? 732G11 Linköpings universitet 2011-02-08 Varför? 1 2 3 Varför? 4 5 Medelvärde av 5000 tal Varför? while-loopen int nrofints = 5000; int [] integers = new int [ nrofints ]; int pos = 0; while (
Lösningar Datastrukturer TDA
Lösningar Datastrukturer TDA416 2016 12 21 roblem 1. roblem 2. a) Falskt. Urvalssortering gör alltid samma mängd av jobb. b) Sant. Genom att ha en referens till sista och första elementet, kan man nå både
Föreläsning 1: Dekomposition, giriga algoritmer och dynamisk programmering
2D1458, Problemlösning och programmering under press Föreläsning 1: Dekomposition, giriga algoritmer och dynamisk programmering Datum: 2007-09-04 Skribent(er): Anders Malm-Nilsson och Niklas Nummelin Föreläsare:
Rekursion och induktion för algoritmkonstruktion
Informationsteknologi Tom Smedsaas, Malin Källén 20 mars 2016 Rekursion och induktion för algoritmkonstruktion Att lösa ett problem rekursivt innebär att man uttrycker lösningen i termer av samma typ av
BINÄRA TRÄD. (X = pekarvärdet NULL): struct int_bt_node *pivot, *ny; X X X 12 X X 12 X X -3 X X
Algoritmer och Datastrukturer Kary FRÄMLING/Göran PULKKIS (v23) Kap. 7, Sid 1 BINÄRA TRÄD Träd används för att representera olika slags hierarkier som ordnats på något sätt. Den mest använda trädstrukturen
Datastrukturer, algoritmer och programkonstruktion (DVA104, VT 2015) Föreläsning 6
Datastrukturer, algoritmer och programkonstruktion (DVA104, VT 2015) Föreläsning 6? DAGENS AGENDA Komplexitet Ordobegreppet Komplexitetsklasser Loopar Datastrukturer Några nyttiga regler OBS! Idag jobbar
Lösningar till uppgifterna sätts ut på kurssidan på nätet idag kl 13.00. Omtentamen i Programmering C, 5p, A1, D1, E1, Fri, Pr1, Te/Ek1, 040607.
1(8) ÖREBRO UNIVERSITET INSTITUTIONEN FÖR TEKNIK Lösningar till uppgifterna sätts ut på kurssidan på nätet idag kl 13.00. Denna tenta kommer att vara färdigrättad On 9/6 och kan då hämtas på mitt tjänsterum,
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
Innehåll Föreläsning 12 Sökträd Sökning Sökning och Sökträd 383 384 Binärt sökträd Används för sökning i linjära samlingar av dataobjekt, specifikt för att konstruera tabeller och lexikon. Organisation:
Idag: Reguljära språk Beskrivs av Reguljära uttryck DFA Grammatik
Idag: Reguljära språk Beskrivs av Reguljära uttryck DFA Grammatik Först några definitioner: Alfabet = en ändlig mängd av tecken. Ex. {0, 1}, {a,b}, {a, b,..., ö} Betecknas ofta med symbolen Σ Sträng =
Programmering II (ID1019) :00-12:00
ID1019 Johan Montelius Programmering II (ID1019) 2015-03-13 09:00-12:00 Instruktioner Du får inte ha något materiel med dig förutom skrivmateriel. Mobiler etc, skall lämnas till tentamensvakten. Svaren
Objektorienterad modellering och diskreta strukturer. 13. Problem. Sven Gestegård Robertz. Datavetenskap, LTH
Objektorienterad modellering och diskreta strukturer 13. Problem Sven Gestegård Robertz Datavetenskap, LTH 2014 Rekaputilation Vi har talat om satslogik och härledning predikatlogik och substitution mängder
Alfabeten, strängar och språk. String
Alfabeten, strängar och språk Objektorienterad modellering och diskreta strukturer / design Språk och reguljära uttryck Ett alfabet är en ändlig icketom mängd vars element kallas symboler. Lennart Andersson
TDDC74 Lab 04 Muterbara strukturer, omgivningar
TDDC74 Lab 04 Muterbara strukturer, omgivningar 1 Översikt I den här laborationen kommer ni att lära er mer om: Tillstånd, och skillnader mellan ren funktionell programmering och imperativ. Skillnaden
Datastrukturer och algoritmer
Datastrukturer och algoritmer Föreläsning 5 Algoritmer & Analys av Algoritmer Algoritmer Vad är det? Innehåll Mer formellt om algoritmer beräkningsbarhet Att beskriva algoritmer Analysera algoritmer Exekveringstid,
Tentamen i Grundläggande Programvaruutveckling, TDA548
Tentamen i Grundläggande Programvaruutveckling, Joachim von Hacht/Magnus Myreen Datum: 2017-08-14 Tid: 14.00-18.00 Hjälpmedel: Lexikon Engelskt-Valfritt språk. Betygsgränser: U: -23 3: 24-37 4: 38-47 5
Introduktion till programmering SMD180. Föreläsning 9: Tupler
Introduktion till programmering Föreläsning 9: Tupler 1 1 Sammansatta datatyper Strängar Sekvenser av tecken Icke muterbara Syntax: "abcde" Listor Sekvenser av vad som helst Muterbara Syntax: [1, 2, 3]
Bakgrund och motivation. Definition av algoritmer Beskrivningssätt Algoritmanalys. Algoritmer. Lars Larsson VT 2007. Lars Larsson Algoritmer 1
Algoritmer Lars Larsson VT 2007 Lars Larsson Algoritmer 1 1 2 3 4 5 Lars Larsson Algoritmer 2 Ni som går denna kurs är framtidens projektledare inom mjukvaruutveckling. Som ledare måste ni göra svåra beslut
Tentamen i. TDDC67 Funktionell programmering och Lisp
1 Linköpings tekniska högskola Institutionen för datavetenskap Anders Haraldsson Tentamen i TDDC67 Funktionell programmering och Lisp och äldre kurser TDDC57 Programmering, Lisp och funktionell programmering
Tentamen. Datalogi I, grundkurs med Java 10p, 2D4112, Lördagen den 30 november 2002 kl , salar E33, E34
Tentamen Datalogi I, grundkurs med Java 10p, 2D4112, 2002-2003 Lördagen den 30 november 2002 kl 9.00 14.00, salar E33, E34 Inga hjälpmedel 30 poäng ger säkert godkänt, 40 poäng ger betyg 4 50 poäng ger
Kappa 2014, lösningsförslag på problem 5
Kappa 2014, lösningsförslag på problem 5 Lag Spyken Roger Bengtsson, Sten Hemmingsson, Magnus Jakobsson, Susanne Tegler Problemet I det här problemet betraktas m n stora rektangulära rutnät, där m avser
Klassdeklaration. Metoddeklaration. Parameteröverföring
Syntax: Class Declaration Modifier Class Body Basic Class Member Klassdeklaration class Class Member Field Declaration Constructor Declaration Method Declaration Identifier Class Associations Motsvarar
Tentamen, Algoritmer och datastrukturer
UNDS TEKNISKA ÖGSKOA (6) Institutionen för datavetenskap Tentamen, Algoritmer och datastrukturer 23 8 29, 8. 3. Anvisningar: Denna tentamen består av fem uppgifter. Totalt är skrivningen på 36 poäng och
Föreläsning 11 - Automater, textsökning, tillstånd
Föreläsning 11 - Automater, textsökning, tillstånd Automater Textsökning KMP-automat (Knuth-automat) Boyer-Moore Rabin-Karp Sökning på webben Automater En portkodsautomat med nio knappar kan se ut så här:
Programmera i C Varför programmera i C när det finns språk som Simula och Pascal??
Programmera i C Varför programmera i C när det finns språk som Simula och Pascal?? C är ett språk på relativt låg nivå vilket gör det möjligt att konstruera effektiva kompilatorer, samt att komma nära
Introduktion till formella metoder Programmeringsmetodik 1. Inledning
Introduktion till formella metoder Programmeringsmetodik 1. Inledning Fokus på imperativa program (ex. C, Java) program betyder härefter ett imperativt program Program bestäms i en abstrakt mening av hur
Föreläsning 8: Aritmetik och stora heltal
2D1458, Problemlösning och programmering under press Föreläsning 8: Aritmetik och stora heltal Datum: 2006-11-06 Skribent(er): Elias Freider och Ulf Lundström Föreläsare: Per Austrin Den här föreläsningen
Värmedistribution i plåt
Sid 1 (6) Värmedistribution i plåt Introduktion Om vi med konstant temperatur värmer kanterna på en jämntjock plåt så kommer värmen att sprida sig och temperaturen i plåten så småningom stabilisera sig.
Föreläsning 3-4 Innehåll. Diskutera. Metod. Programexempel med metod
Föreläsning 3-4 Innehåll Diskutera Vad gör programmet programmet? Föreslå vilka satser vi kan bryta ut till en egen metod. Skriva egna metoder Logiska uttryck Algoritm för att beräkna min och max Vektorer
TDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 6 Jonas Lindgren, Institutionen för Datavetenskap, LiU
TDDC30 Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 6 Jonas Lindgren, Institutionen för Datavetenskap, LiU På denna föreläsning: Sortering Selectionsort, Bubblesort,
e 3 e 2 e 1 Kapitel 3 Vektorer i planet och i rummet precis ett sätt skrivas v = x 1 e 1 + x 2 e 2
Kapitel 3 Vektorer i planet och i rummet B e 3 e 2 A e 1 C Figur 3.16 Vi har ritat de riktade sträckor som representerar e 1, e 2, e 3 och v och som har utgångspunkten A. Vidare har vi skuggat planet Π
Imperativ programmering. Föreläsning 2
Imperativ programmering 1DL126 3p Föreläsning 2 Imperativ programmering Kännetecken för imperativa språk: Programmet består av en serie instruktioner. Olika språk har olika uppsättningar av instruktioner.
Föreläsning 1. Introduktion. Vad är en algoritm?
Några exempel på algoritmer. Föreläsning 1. Introduktion Vad är en algoritm? 1. Häll 1 dl havregryn och ett kryddmått salt i 2 1 2 dl kallt vatten. Koka upp och kocka gröten ca 3minuter. Rör om då och
Föreläsning 3-4 Innehåll
Föreläsning 3-4 Innehåll Skriva egna metoder Logiska uttryck Algoritm för att beräkna min och max Vektorer Datavetenskap (LTH) Föreläsning 3-4 HT 2017 1 / 36 Diskutera Vad gör programmet programmet? Föreslå
Programmeringsteknik för Ingenjörer VT06. Föreläsning 10
Programmeringsteknik för Ingenjörer VT06 Föreläsning 10 Dagens föreläsning Repetition Strukturer Programmeringsteknik för ingenjörer, VT06 2 Deklaration: char name1[10]; char *name2; Repetition - Strängar
Tentamen TEN1 HI
Tentamen TEN1 HI1029 2014-03-14 Skrivtid: 8.15-13.00 Hjälpmedel: Referensblad (utdelas), papper (tomma), penna Logga in med tentamenskontot ni får av skrivvakten. Det kommer att ta tid att logga in ha
Övning från förra gången: readword
(9 september 2010 T4.1 ) Övning från förra gången: readword /** readword.c * * int readword(char w[], int n) { * * Läser tecken tills en bokstav påträffas. * Läser och lagrar sedan högst n-1 bokstäver