Dynamisk Programmering
|
|
- Alf Lindberg
- för 8 år sedan
- Visningar:
Transkript
1 Kapitel 11 Dynamisk Programmering När man väl har förstått idén bakom dynamisk programmering så är tekniken ganska enkel för att lösa problem och skapa algoritmer. Men det hindrar dock inte att det hela från början ter sig närmast magiskt. Det bästa sättet att lära sig hantera dynamisk programmering torde vara att studera ett antal exempel och det ska vi göra här Fibonacci s talföljd Vi återknyter här bekantskapen med Fibonacci s talföljd från första föreläsningen där vi studerade följande rekursiva funktion. 1 long fib(long n){ 2 if (n==0 n==1) 3 return 1; 4 else 5 return fib(n 1)+fib(n 2); 6 } Vi konstaterade där att, för att bestämma f n anropades funktionen fib total 2 f n 1 gånger. För till exempel f 33 = kommer fib att anropas gånger, vilket är oacceptabelt, speciellt med tanke på att vi känner till formeln f n = ( 1+ ) (n+1) 5 1 ( ) (n+1) Tittar vi på ett träd över anropen så förstår vi varför anropen blir så många. Vi ser också att samma jobb görs flera gånger. 1
2 11.1. FIBONACCI S TALFÖLJD Figur 11.1: För f 5 görs 15 anrop där bland annat f 2 beräknas tre gånger. Tre gånger i trädet i figur 11.1 beräknas f 2. En idé med dynamisk programmering är att lagra beräknade delresultat i en tabell. Vid varje anrop av funktionen kan vi då slå upp om värdet redan finns noterat. Om så är fallet har vi direkt resultatet. På så sätt kan vi klippa i trädet och vårt anropsträd kommer i stället att se ut så här. Figur 11.2: Varje löv i trädet har nu ett unikt värde Vi hamnar nu på 9 anrop i stället för 15. Inte så stor skillnad kan tyckas men för f 33 behövs nu bara 65 anrop i stället för tidigare Vad vi behöver är alltså en tabell t med lika många celler som det största n för vilket vi vill bestämma f n. Vid uppstart initierar vi tabellen med t[0] = 1 och t[1] = 1 (de två kända värdena) och med 1 för resten. Algorithm : FIBDYN(n) if tab[n] 0 then return (tab[n]) f1 FIBDYN(n 1) tab[n 1] f1 else f2 FIBDYN(n 2) tab[n 2] f2 return (f1+f2); Det finns två typer av dynamisk programmering DP: Håkan Strömberg 2 KTH Syd
3 KAPITEL 11. DYNAMISK PROGRAMMERING Vi bygger upp lösningar av delproblem från mindre till större, bottom up. Eller så kan vi spara resultat i en tabell som vi slår upp i efter behov, top down med memoization Exemplet ovan med Fibonacci s talföljd är ett exempel på top down. Detta exempel på samma talföljd kan klassificeras som bottom up. 1 int fib3(int n){ 2 int f1=1,f2=1,f3=1,i; 3 for(i=3;i<=n;i++){ 4 f3=f1+f2; 5 f1=f2; 6 f2=f3; 7 } 8 return f3; 9 } H Den enklaste och snabbaste av alla sätt att ta renda på f n om vi bortser från formeln. Helt klart handlar det här om bottom up Myntväxling I samband med glupska algoritmer, bekantade vi oss med ett exempel, som gick ut på att minimera antalet sedlar och mynt för att räkna upp ett givet belopp. Vi nämnde då att den glupska algoritmen vi där använde inte fungerade för alla uppsättningar av mynt och efterlyste då ett alternativt sätt att lösa problemet. Till exempel med följande söndra och härska-algoritm. Algorithm : CHANGE(belopp) min belopp for i { 1 to antal if mynt[i] = belopp do then return (1) for i 1 to belopp/2 n CHANGE(i)+ CHANGE(belopp i) do if n < min then min n return (min) Håkan Strömberg 3 KTH Syd
4 11.3. RIKTAD GRAF UTAN CYKLER Indata är mynt, som är en array som håller antal valörer. Algoritmen fungerar, men den tar alldeles för lång tid på sig. Vi förstår att många anrop upprepas under arbetets gång och tankarna går därför till dynamisk programmering. Vi förstärker därför algoritmen: Algorithm : CHANGE2(belopp) if lista[belopp] 0 then return (lista[belopp]) min belopp for i { 1 to antal if mynt[i] = belopp do then return (1) for i 1 to belopp/2 n CHANGE2(i)+ CHANGE2(belopp i) do if n < min then min n lista[belopp] min return (min) Här tillkommer en global array, lista, som har lika många element som det största belopp vi tänker räkna upp. Arrayen nollställer vi från början. Varje gång algoritmen returnerar ett funnet minimum uppdateras dessutom lista, för kommande behov. Vi räknar antalet anrop för de två algoritmerna med belopp=29 och mynt={1,5,10,20,50,100,500,1000} För CHANGE görs anrop och för CHANGE2 görs 387. Så små skillnader kan det vara mellan en oanvändbar och en snabb algoritm! 11.3 Riktad graf utan cykler Figur 11.3: I figur 11.3 ser vi en riktad graf utan cykler, en så kallad DAG. (directed acyclic graph). En graf av den typen kan ordnas utefter en linje så att alla bågar går från vänster till höger. Detta är ett viktigt sätt att betrakta problem som går att lösa med dynamisk programmering. Håkan Strömberg 4 KTH Syd
5 KAPITEL 11. DYNAMISK PROGRAMMERING Om uppgiften kopplad till grafen består i att finna den kortaste vägen från A till F och till exempel betraktar nod E så kan det minsta avståndet till E skrivas mindist(e) = min(mindist(b), mindist(c)) Börjar vi i A, som har mindist = 0 kan vi successivt hitta minsta avståndet till B,C,D,E,F genom formeln ovan. Om vi har alla avstånden lagrade i a[6][6] och placerar i de celler i matrisen som saknar direkt förbindelse. Så löser vi detta problem med koden: 1 int a[6][6]={{1000, 3, 7, 8,1000,1000}, 2 {1000,1000, 4,1000, 9,1000}, 3 {1000,1000,1000, 2, 6,1000}, 4 {1000,1000,1000,1000,1000, 6}, 5 {1000,1000,1000,1000,1000, 4}, 6 {1000,1000,1000,1000,1000,1000}}; 7 int i,j; 8 int d[6]={0,1000,1000,1000,1000,1000}; 9 for(i=0;i<6;i++) 10 for(j=0;j<i;j++) 11 d[i]=min(d[i],d[j]+a[j][i]); 1000 räcker gott och väl som oändligheten i detta exempel. Man får akta sig för att använda INT_MAX, eftersom det kommer att adderas ett tal till detta och då uppstår overflow Myntväxling för sista gången Med denna metod löser vi vårt, numera gamla, myntväxlingsproblem med följande idé. Vi tänker oss mynten 1,3 och 5 i en okänd valuta och vill ta reda på det minsta antalet mynt för belopp från 1 till Vi startar i tredje raden med att placera ut ett mynt av varje valör. I fjärde raden lägger vi till valören 1 till alla belopp som kräver ett mynt och skriver in 2 på motsvarande plats. I Håkan Strömberg 5 KTH Syd
6 11.5. FLOYD-WARSHALL nästa rad lägger vi till valören 3 till alla belopp som kräver ett mynt. Om vi hamnar på 0 skriver vi in 2 där. Till sist, i den avdelningen, lägger vi till valören 5 till alla belopp som kräver ett mynt. I nästa avdelning lägger vi till valörerna 1,3,5 till belopp som kräver två mynt och om vi då hamnar på 0 skriver vi in 3 i den cellen. Till sist har alla 0:or försvunnit och problemet är löst. UPPGIFT 11.1 Myntväxling för sista gången. Lös problemet från kapitel 10 om myntväxling av svenska mynt med den ovan diskuterade tekniken och jämför resultaten Floyd-Warshall Figur 11.4: Algoritmen Floyd-Warshall är en konkurrent till Dijktstra s algoritm. Den bestämmer kortaste avståndet till alla par av noder i en viktad graf med n noder. I dist har vi lagrat alla vikter (avstånd) mellan närliggande noder. Detta är all kod vi behöver: 1 void floyd(int dist[ ][101],int n){ 2 int i,j,k; 3 for(k=1;k<=n;k++) 4 for(i=1;i<=n;i++ ) 5 for(j=1;j<=n;j++) 6 dist[i][j]=min(dist[i][j],dist[i][k]+dist[k][j]); 7 } Håkan Strömberg 6 KTH Syd
7 KAPITEL 11. DYNAMISK PROGRAMMERING Vi genomför ett exempel med endast fyra noder efter figur 11.5, som leder till efterföljande avståndsmatris. Figur 11.5: Vi förstår att denna algoritm arbetar efter bottom up. Här några av värden hos i,j och k då distansmatrisen får ett nytt värde. k i j resultat Resultatet blir till slut Vi förstår att detta är en bottom-up lösning. Håkan Strömberg 7 KTH Syd
8 11.6. LONGEST INCREASING SUBSEQUENCE 11.6 Longest increasing subsequence Figur 11.6: Ur ett given följd av tal a 1,a 2...a n, ska vi välja tal i följden, så att a k1 < a k2 <... < a km och så att m blir så stort som möjligt. Om talen är 5,2,8,6,3,6,9,7, har vi i figur 11.6 markerat alla sådana följder. Den längsta innehåller de fyra talen 2,3,6,9. Problemet kan lösas med följande kod: 1 int lcs(int a[ ],int N){ 2 int best, prev,i,j,max=0; 3 best=(int )malloc(sizeof(int) N); 4 prev=(int )malloc(sizeof(int) N); 5 for(i=0;i<n;i++) {best[i] = 1; prev[i] = i;} 6 for(i=1;i<n;i++) 7 for(j=0;j<i;j++) 8 if(a[i]>a[j] && best[i]<best[j]+1) 9 best[i]=best[j]+1,prev[i]=j; 10 for(i=0;i<n;i++) 11 if(max<best[i]) 12 max=best[i]; 13 free(best); 14 free(prev); 15 return max; 16 } H Vi använder oss av dynamiska arrayer, som vi under exekveringen kan skapa i lämplig storlek. Arrayen best används endast för att senare kunna få fram talen i den längsta sekvensen. 5 De två arrayerna initieras. 6-9 I yttre loopen går man igenom ett tal a i i taget i sekvensen. I den inre tittar man på de tal a j, som står till vänster om det aktuella talet. För alla tal a j < a i tar man reda på, vilket av talen, som har störst värde i best[j], vilket är samma sak som den Håkan Strömberg 8 KTH Syd
9 KAPITEL 11. DYNAMISK PROGRAMMERING längsta stigande sekvensen. best[j] + 1 blir värdet för best[i] eftersom sekvensen har utökats med ett tal. I prev[i] lagrar vi j index till detta tal Knapsack II Även i detta exempel återkommer vi till en gammal bekant, men nu i ny skepnad. Vi har som tidigare en ryggsäck med en given volym c, till detta n olika objekt b i,1 i n. Varje objekt har ett värde v i och en volym w i. Skillnaden är att det finns ett obegränsat antal av varje objekt b i. man nu inte kan dela objekten, som man fick göra i förra exemplet. ryggsäcken inte behöver bli full. Målet är fortfarande att ge ryggsäcken ett så dyrbart innehåll som möjligt. Vi studerar ett konkret exempel (se figur 11.7). För detta exempel kan vi ställa upp en optimeringsfunktion maximera a 1 v 1 +a 2 v 2 +a 3 v 3 +a 4 v 4 +a 5 v 5 så att a 1 w 1 +a 2 w 2 +a 3 w 3 +a 4 w 4 +a 5 w 5 c Eller i klartext maximera a 1 4+a 2 5+a 3 10+a 4 11+a 5 13 så att a 1 3+a 2 4+a 3 7+a 4 8+a a i,1 i 5 är antalet objekt av de fem olika typerna som vi ska välja. Figur 11.7: Av varje objekt finns det ett obegränsat antal. Hur värdefull kan innehållet i ryggsäcken bli? Ett enkelt och osofistikerat sätt att lösa det här problemet är en funktion med fem forloopar, där varje loop behandlar ett objekt. Loopvariabeln går från 0 till det maximalt möjliga antalet av detta objekt. Håkan Strömberg 9 KTH Syd
10 11.7. KNAPSACK II Minsta antal Största antal Den inre delen av dessa nästlade loopar, den där vi tar reda på om rekordet har slagits, kommer att exekveras = 540 gånger. För denna metod kan vi bestämma den övre gränsen för antalet varv till ( ) c n T(n) = +1 min(v) Det betyder att om vi har en ryggsäck med c = 100 och n = 10 objekt med minsta volymen v min = 3, så är T(10) Då är inte längre den här metoden möjlig att använda. Vad kan då dynamisk programmering göra för oss? Indata består av två arrayer size och value, data för objekten. Sedan behöver vi en tabell, cost. Tabellen ska ha plats för c värden och nollställs före start. I nedanstående algoritm kommer vi att bestämma den värdefullaste packningen för alla storlekar på ryggsäckar 1... c. Tabellen best håller reda på vilka objekt som plockats ned i ryggsäcken. Algorithm : KNAPSACK( ) for j 1 to n for i 1 to c if i size[j] 0 do if cost[i] do { < cost[i size[j]] + value[j] then cost[i] cost[i size[j]]+value[j] then best[i] = j Vi följer exekveringen för vårt exempel och uppdaterar hela tiden cost. volym värde Den yttre loopen går igenom samtliga objekt. Under första varvet är inget annat objekt än b 1 inblandat. Vilket betyder att vi så långt, kommer att få en lösning för detta enda objekt. Hur många vi får ner i ryggsäckar med volymen från 1 till 17 ser vi i första raden i tabellen. Håkan Strömberg 10 KTH Syd
11 KAPITEL 11. DYNAMISK PROGRAMMERING Under andra varvet behandlas b 2. När den andra loopen nått fram till storleken 4 hos ryggsäcken ryms för första gången ett objekt b 2. Det bästa värdet vi tidigare hade för denna storlek var 4. Då måste det vara bättre att placera en b 2 i säcken och därmed få värdet 5. Detta gäller även för storleken 5. Däremot kan en b 2 inte konkurrera med 2 stycken b 1 för storleken 6. Andra raden visar de bästa värdena med två objekt inblandade. Tabellen fylls alltså på radvis. För att fylla i en ny ruta tänker man så här: Bästa värdet för den här storleken är just nu cost[i]. Värdet cost[i-size[j]] är det bästa värdet (hittills) för en ryggsäck med storleken i-size[j]. Om vi nu i stället lägger till ett objekt b j, som ju kommer att få plats, får vi då ett bättre värde för cost[i]? Om svaret är ja på den frågan uppdaterar vi cost[i] med detta nya värde. Observera att det till vårt exempel finns två lösningar {1,3,3} och {4,5}. Av allt att döma kommer denna algoritm att kunna exekveras på tiden O(c n), vilket för vårt exempel blir 17 5 = 85. För exemplet där c = 100 och n = 10 kommer det hela att gå ungefär gånger snabbare om vi jämför med vårt naiva förslag i inledningen, som alltså skulle innehålla 10 for-loopar. UPPGIFT 11.2 Implementera Knapsack och använd best för att skriva ut vad ryggsäcken innehåller. Ta också reda på om det är viktigt att objekten är sorterade efter stigande volym? Låt programmet fråga efter kappsäckens storlek och antalet objekt vars värde och volym sedan slumpas fram Matrismultiplikation Det är med glädje jag nu presenterar ett exempel hämtat från den linjära algebran. Det handlar om matrismultiplikation som vi först repeterar. För två matriser A(n m) och B(p q) kan produkten C = AB endast bildas om m = p. Matrisen C får dimensionerna C(n q). Om från A(3 2) och B(2 2) vi vill bilda AB går det i detalj till så här: a 11 a 12 a 21 a 22 a 31 a 32 ( b11 b 12 b 21 b 22 ) a 11 b 11 +a 12 b 21 a 11 b 12 +a 12 b 22 a 21 b 11 +a 22 b 21 a 21 b 12 +a 22 b 22 a 31 b 11 +a 32 b 21 a 31 b 12 +a 32 b 22 Det behövs här 12 multiplikationer för att nå resultatet. Hur många multiplikationer behövs det då för att bilda A(12 18)B(18 23) eller mer generellt A(n m)b(m p)? För den första multiplikationen behövs = 4968 multiplikationer och den generella formeln är nmp. Eftersom den associativa lagen gäller vid matris multiplikation ger (AB)C samma resultat som A(BC) och ((AB)(CD)) ger samma resultat som (A(B(CD))). Men hur är det med antalet multiplikationer vid olika val av multiplikationsordning? Vi studerar följande Håkan Strömberg 11 KTH Syd
12 11.8. MATRISMULTIPLIKATION exempel. a 11 a 12 a 21 a 22 a 31 a 32 a 41 a 42 ( ) b11 b 12 b 13 b 21 b 22 b 23 Vi skulle lika gärna kunna skriva c 11 c 21 ( ) ( ) ( ) e d 11 d 11 e 12 f11 f 12 f e c 21 e 22 f 21 f 22 f (4 2)(2 3)(3 1)(1 2)(2 2)(2 3) eller till och med r = [4,2,3,1,2,2,3] utan att tappa någon information. På hur många sätt kan nu slutprodukten nås? På inte mindre är 42 olika sätt som vi får genom formeln för Catalanska tal. C n = 1 ( ) 2(n 1) n n 1 där n står för antalet matriser i uttrycket. Bland dessa (((((AB)C)D)E)F) ((((AB)(CD))E)F) ((AB)(((CD)E)F)) Hur många multiplikationer kräver dessa tre olika sätt? 84, 94 respektive 96. Med andra ord vill man spara in multiplikationer så är det väsentligt i vilken ordning matriserna multipliceras samman. Vårt problem är nu förstås att hitta det mest ekonomiska schemat för arbetet. Det bästa för detta exempel är för övrigt ((A(BC))((DE)F)) för vilket det endast krävs 36 multiplikationer. Vi tillgriper dynamisk programmering och inför följande algoritm. Algorithm : MATMULT( ) for i { 1 to N for j i+1 to N do do cost[i, j] MAXINT for i 1 to N do cost[i,i] 0 for j 1 to N 1 for i 1 to N j for k i+1 to i+j t cost[i,k 1]+cost[k,i+j]+ do +r[i] r[k] r[i+j+1] do do if t < cost[i,i+j] then { cost[i,i+j] t best[i,i+j] k Håkan Strömberg 12 KTH Syd
13 KAPITEL 11. DYNAMISK PROGRAMMERING B C D E F A B C D 4 10 E 12 Algoritmen bestämmer först antalet multiplikationer för de fem kombinationerna AB, BC, CD, DE, EF. Dessa kan ju endast utföras på ett sätt. Antalet lagras i huvuddiagonalen i tabellen ovan. Därefter bestäms alla möjliga kombinationer av tre matriser ABC, BCD, CDE, DEF. För att bestämma till exempel till ABC använder man sig av informationen från AB och BC. Algoritmen väljer den bästa av (AB)C och A(BC). Det vill säga att multiplicera det redan uträknade AB med C eller att multiplicera A med BC. Värdena från dessa beräkningar lagras i nästa diagonal. I nästa steg bearbetas ABCD, BCDE och CDEF och så vidare till sista steget, ABCDEF. Slutresultatet hamnar högst upp i högra hörnet av tabellen, 36. Med hjälp av denna lilla funktion får vi så till sist en trevlig utskrift av svaret: 1 void order(int i,int j){ 2 if(i==j) 3 printf("%c",64+i); 4 else{ 5 printf("("); 6 order(i,best[i][j] 1); 7 printf("*"); 8 order(best[i][j],j); 9 printf(")"); 10 } 11 } Håkan Strömberg 13 KTH Syd
14 11.8. MATRISMULTIPLIKATION Figur 11.8: UPPGIFT 11.3 Kalles väg till skolan. När Kalle ska gå till skolan (rutan märkt S i figuren), startar han promenaden i rutan märkt H. Eftersom Kalle vill ha omväxling försöker han i det längsta att varje morgon ta en ny väg till skolan (se exempel i figuren på en av hans möjliga vägar). Han går aldrig längre än han behöver och väljer därför bara att gå i östlig eller sydlig riktning (sydöstlig riktning är omöjlig). På vägen kan finnas oframkomliga gator (rutor med mönster av tegel). Frågan är nu: Hur många olika vägar det finns för Kalle att ta sig till skolan? Skriv ett program som först frågar efter stadens storlek (antal rader och antal kolumner, dessa tal kan vara olika men är 100). I nästa fråga ska man ange hur många oframkomliga vägar staden innehåller och därefter var, var och en av dessa är belägna, genom att först ange rutans rad och därefter dess kolumn. Programmet ska sedan bestämma antalet olika vägar mellan H och S där varje steg måste vara en förflyttning i antingen östlig eller sydlig riktning och där man inte får beträda oframkomliga rutor. Indata: Den rektangulära stadens storlek genom antalet rader och kolumner. Antalet oframkomliga gator och var dessa är belägna genom att först ange raden och sedan kolumnen. Utdata: Ett tal som anger antalet olika vägar från H till S. UPPGIFT 11.4 Taltriangeln igen. Skriv ett program som löser taltriangeln från Kapitel 5 med dynamisk programmering. Håkan Strömberg 14 KTH Syd
15 KAPITEL 11. DYNAMISK PROGRAMMERING 11.9 En gammal tentamen Figur 11.9: UPPGIFT 11.5 Hur många regioner. Kartan i figur 11.9 visar ett landskap indelat i 6 regioner. En region består av ett antal sammanhållna kvadrater, i och för sig, hur komplicerade som helst. För att en kvadrat ska tillhöra en region krävs att kvadraten har en gemensam sida med regionen. Skriv ett program som bestämmer hur många regioner ett givet landskap har. Givet filen landskap.txt, som inleds med ett tal som anger hur många rader n 20 den har. Därefter följer n rader med versala bokstäver valda från A...Z. Alla rader är lika långa med 80 tecken. Ett körningsexempel: Landskapet har 6 regioner Håkan Strömberg 15 KTH Syd
16 11.9. EN GAMMAL TENTAMEN Figur 11.10: UPPGIFT 11.6 Dominosumma. Till vänster i figur ser vi de 28 brickor som ingår i ett dominoset. Betraktar vi varje bricka, där en bricka kan vridas 180, som ett tal ser vi fem exempel till höger i figuren. Genom att placera de 28 brickorna under varandra får vi lika många tal att summera. Längst ned till höger ser vi, på ett liknande sätt, addition av 3 brickor. Skriv ett program som frågar efter en önskad summa och som bestämmer för hur många olika upplägg denna summa kan erhållas. Ett körningsexempel: eller Summa? 1059 Summan kan uppnås på Summa? 1059 Summan kan uppnås på Problemet kan sägas ha två svar, beroende på om man anser att man får en nytt upplägg varje gång man vrider en dubbelbricka! Välj själv vilket svar ditt program ska ge. Håkan Strömberg 16 KTH Syd
17 KAPITEL 11. DYNAMISK PROGRAMMERING Figur 11.11: UPPGIFT 11.7 Plocka äpplen I figur ser vi en äppelträdgård. Trädgårdsmästaren ska nu plocka så många äpplen han kan och samtidigt följa dessa regler: Trädgårdsmästaren startar i rutan högst upp till vänster Arbetet är klart då han når rutan längst ned till höger Från aktuell ruta får han förflytta sig till en intilliggande ruta som har en sida gemensam med aktuell ruta Han får inte återvända till tidigare besökt ruta Han får inte besöka de rutor som består av en mur (grå rutor). Filen tradgard.txt inleds med ett tal n 15, som anger trädgårdens storlek, alltid kvadratisk. Därefter följer n rader med n tal på varje. Talet 1 anger att i denna ruta finns ett äpple, talet 2 anger att denna ruta består av ett hinder, mur och talet 0 anger att rutan är tom (en del av trädgårdens stigar). Skriv ett program som bestämmer det största antalet äpplen trädgårdsmästaren kan plocka. Ett körningsexempel: Han kan plocka 11 äpplen Håkan Strömberg 17 KTH Syd
18 11.9. EN GAMMAL TENTAMEN Figur 11.12: UPPGIFT 11.8 Laguttagning En fotbollstränares uppgift är inte bara att ta ut de bästa spelarna, utan också att ge dem rätt placering på planen. Inför tisdagens match har därför tränaren värderat var och en av hans 10 spelare (målvakten undantagen) utefter deras förmåga att spela i försvaret, på mittfältet och i anfallet. Han har givit var och en tre värdepoäng v,0 v 50. Laget använder sig av uppställningen 4 3 3, det vill säga 4 spelare i försvaret, 3 på mittfältet och 3 i anfallet. Skriv ett program som bestämmer den högsta totalpoäng laget kan få genom att placera rätt spelare i rätt lagdel. Filen laget.txt innehåller 20 rader med data om de 10 spelarna. Varje spelare tar upp två rader, först namnet ( 24 tecken). På nästa rad de tre poängen, i tur och ordning för försvar, mittfält och anfall. Ett körningsexempel: Laget högsta poäng är 266 Mer i detalj ser laget ut så här: Mikael_Lustig 25 Olof_Mellberg 30 Daniel_Majstorovic 28 Oscar_Wendt Anders_Svensson 27 Kim_Källström 23 Ola_Toivonen Sebastian_Larsson 25 Johan_Elmander 29 Zlatan_Ibrahimovic 35 Håkan Strömberg 18 KTH Syd
19 KAPITEL 11. DYNAMISK PROGRAMMERING Figur 11.13: UPPGIFT 11.9 Två korta vägar. Vid viktiga transporter har man bestämt att det ska tas fram två olika rutter mellan de städer, mellan vilka transporten ska ske. I första hand vill man använda den kortaste vägen. I andra hand vill man ta fram den kortaste vägen där ingen av de städer som ingår i den första rutten finns med, förutom, förstås, de städer där transporten startar och slutar. Skriv ett program som bestämmer längden hos de två rutterna. Filen transport.txt inleds med ett tal som anger hur många städer n < 100 som finns på kartan. På nästa rad anges hur många vägar m det finns. På följande m rader finns tre tal. De två första anger mellan vilka städer vägen går. Det tredje talet anger avståndet. Ett körningsexempel: Från stad? 38 Till stad? 19 Den första rutten har längden 3179 Den andra rutten har längden 4995 Den första rutten går genom städerna: 38,39,41,42,43,37,46,19 Den andra går genom städerna: 38,57,53,54,55,51,44,47,45,18,19 Håkan Strömberg 19 KTH Syd
20 11.9. EN GAMMAL TENTAMEN Figur 11.14: UPPGIFT Placering av butiker. Ett företag ska lägga upp sin strategi vad gäller placeringen av ett antal butiker i några städer i en del av landet. Två butiker ska aldrig ligga i två grannstäder (städer förbundna med en direkt väg). Så länge man inte bryter mot denna regel vill man placera butiker i så många städer som möjligt, med så stor sammanlagd folkmängd som möjligt. Betraktar vi kartan i figur 11.14, där stad 1 har invånare och stad 2 har 35000, är de städerna i blått som valts ut, med en total folkmängd av Filen karta.txt inleds med ett tal som anger antalet städer (noder) n 20 på kartan. Därefter följer n rader med två heltal på varje, stadens nummer samt folkmängden i tusental. På nästa rad finns ett tal m, som anger hur många vägar kartan (bågar grafen) har. Därefter följer m rader med två heltal på varje, som anger mellan vilka städer vägen går. Ett körningsexempel: Affärer i 6 städer med en folkmängden Håkan Strömberg 20 KTH Syd
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
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 Dynamisk programmering Dynamisk programmering används typiskt
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
Föreläsning 11. Giriga algoritmer
Föreläsning 11 Giriga algoritmer Föreläsning 11 Giriga algoritmer Användning Växelproblemet Kappsäcksproblemet Schemaläggning Färgläggning Handelsresandeproblemet Giriga algoritmer (Greedy algorithms)
Föreläsning 12. Söndra och härska
Föreläsning 12 Söndra och härska Föreläsning 12 Söndra och härska Maximal delsekvens Skyline Closest pair Växel Uppgifter Söndra och härska (Divide and conquer) Vi stötte på dessa algoritmer när vi tittade
UPPGIFT 1 V75 FIGUR 1.
UPPGIFT 1 V75 FIGUR 1. Varje lördag året om spelar tusentals svenskar på travspelet V75. Spelet går ut på att finna sju vinnande hästar i lika många lopp. Lopp 1: 5 7 Lopp 2: 1 3 5 7 8 11 Lopp 3: 2 9 Lopp
Föreläsning 12. Söndra och härska
Föreläsning 12 Söndra och härska Föreläsning 12 Söndra och härska Maximal delsekvens Skyline Closest pair Växel Söndra och härska (Divide and conquer) Vi stötte på dessa algoritmer när vi tittade på sortering.
Föreläsning 11. Giriga algoritmer
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)
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
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
Uppgift 1. Kylskåpstransporter
Uppgift 1. Kylskåpstransporter 1. Här kan du se de två bilarna lastade med kylskåp på väg mot stormarknaden En fabrik som tillverkar kylskåp ska leverera ett större parti med n, 1 n 1000, kylar till en
UPPGIFT 1 VÄNSKAPLIGA REKTANGLAR
UPPGIFT 1 VÄNSKAPLIGA REKTANGLAR FIGUR 1. Dessa två rektanglar är vänskapliga. Den ena har samma mätetal för arean som den andra har för omkretsen och tvärtom. Rektangeln till vänster har omkretsen 2 4
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
Övningstenta 6. d b = 389. c d a b = 1319 b a
Övningstenta 6 Problem 1. Vilket är det största antalet olika element en symmetrisk matris A(n n kan ha? Problem. Bestäm de reella talen a,b,c och d då man vet att a b d c = 109 a c d b = 389 c d a b =
Moment 6.1, 6.2 Viktiga exempel Övningsuppgifter T6.1-T6.6
Moment 6., 6. Viktiga exempel 6.-6. Övningsuppgifter T6.-T6.6 Matriser Definition. En matris är ett schema med m rader och n kolonner eller kolumner, som vi kallar dem i datalogin innehållande m n element.
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
1, 2, 3, 4, 5, 6,...
Dagens nyhet handlar om talföljder, ändliga och oändliga. Talföljden 1,, 3, 4, 5, 6,... är det första vi, som barn, lär oss om matematik över huvud taget. Så småningom lär vi oss att denna talföljd inte
a = a a a a a a ± ± ± ±500
4.1 Felanalys Vill man hårddra det hela, kan man påstå att det inte finns några tal i den tillämpade matematiken, bara intervall. Man anger till exempel inte ett uppmätt värde till 134.78 meter utan att
UPPGIFT 1 TVÅPOTENSER. UPPGIFT 2 HISSEN I LUSTIGA HUSET.
UPPGIFT 1 TVÅPOTENSER. 2 ½ ¾ = 5575186299632655785383929568162090376495104 n = 142 är det minsta värde på n för vilket 2 Ò inleds med siffrorna 55. Uppgiften består i att skriva ett program som tar emot
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
1,3,5,7,9,...,99. Skriv ett program som genererar en multiplikationstabell med följande utseende
Arraymotion Skriv ett program som fyller en array med talen 1,3,5,7,9,...,99 och därefter skriver ut dem början på 99. Antal lika Skriv ett program som fyller två vektorer (arrayer) a och b med 100 slumptal
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
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
Föreläsningsanteckningar F6
Föreläsningsanteckningar F6 Martin Andersson & Patrik Falkman Kortaste vägen mellan en nod och alla andra noder Detta problem innebär att givet en graf G = (E,V) hitta den kortaste vägen över E från en
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
Fråga 13. Skriv en loop som fyller arrayen int v[100] med talen
Håkan Strömberg KTH STH 1 Fråga 1. Vilken är den största respektive minsta värde variabeln SUM kan erhålla genom följande rutin? srand(time(0)); for(k=1;k
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
3, 6, 9, 12, 15, 18. 1, 2, 4, 8, 16, 32 Nu är stunden inne, då vill vill summera talen i en talföljd
I föreläsning 18 bekantade vi oss med talföljder, till exempel eller 3, 6, 9, 1, 15, 18 1,, 4, 8, 16, 3 Nu är stunden inne, då vill vill summera talen i en talföljd och 3 + 6 + 9 + 1 + 15 + 18 1 + + 4
OBJEKTORIENTERAD PROGRAMVARUUTVECKLING
Institutionen för Data- och informationsteknik TENTAMEN OBJEKTORIENTERAD PROGRAMVARUUTVECKLING OBS! Det kan finnas kurser med samma eller liknande namn på olika utbildningslinjer. Denna tentamen gäller
Den räta linjens ekvation
Den räta linjens ekvation Här följer en dialog mellan studenten Tor-Björn (hädanefter kallad TB) och hans lärare i matematik Karl-Ture Hansson (nedan kallad KTH). När vi möter dem för första gången är
OBJEKTORIENTERAD PROGRAMVARUUTVECKLING. Övningstentamen 1
Institutionen för Data- och informationsteknik JSk TENTAMEN OBJEKTORIENTERAD PROGRAMVARUUTVECKLING Övningstentamen 1 OBS! Det kan finnas kurser med samma eller liknande namn på olika utbildningslinjer.
Den räta linjens ekvation
Den räta linjens ekvation Här följer en dialog mellan studenten Tor-Björn (hädanefter kallad TB) och hans lärare i matematik Karl-Ture Hansson (nedan kallad KTH). När vi möter dem för första gången är
UPPGIFT 1 WILL ROGERS FENOMEN
UPPGIFT 1 WILL ROGERS FENOMEN Will Rogers (1879-1935) var en amerikansk komiker känd för bland annat följande citat: When the Okies left Oklahoma and moved to California, they raised the average intelligence
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.
Föreläsning 9 Innehåll Mer om rekursion söndra-och-härska-algoritmer dynamisk programmering backtracking Orientering om versionshantering med git Söndra och härska Divide and conquer teknik för att konstruera
Tentamen, EDA501/EDAA20 Programmering M MD W BK L
LUNDS TEKNISKA HÖGSKOLA 1(6) Institutionen för datavetenskap Tentamen, EDA501/EDAA20 Programmering M MD W BK L 2017 05 31, 8.00 13.00 Anvisningar: Preliminärt ger uppgifterna 9 + 12 + 10 + 9 = 40 poäng.
Moment 5.5 Övningsuppgifter I 5.60a. 5.60b, 5.60.c, 61
Moment 5.5 Övningsuppgifter I 5.0a. 5.0b, 5.0.c, 1 Linjära ekvationssystem Vi har redan tidigare i kursen stött på linjära ekvationssystem. Nu är stunden kommen till en mera systematisk genomgång. Kvadratiska
UPPGIFT 1 LAMELLER. Minsta antalet hål: 1. Första lamellen? Andra lamellen? Minsta antalet hål: 3
UPPGIFT 1 LAMELLER FIGUR 1. Överst de två lamellerna som de ges till programmet. Underst samma två lameller när den ena förskjutits så att bästa läge uppkommit. I figur 1, övre delen, ser du två lameller,
Moment Viktiga exempel Övningsuppgifter
Moment Viktiga exempel Övningsuppgifter Inga Inga Inga Linjära ekvationssystem Vi har redan tidigare i kursen stött på linjära ekvationssystem. Nu är stunden kommen till en mera systematisk genomgång.
HI1024 Programmering, grundkurs TEN2 2014-03-13
HI1024 Programmering, grundkurs TEN2 2014-03-13 KTH STH Haninge 13.15-18.00 Tillåtna hjälpmedel: En A4 handskriven på ena sidan med egna anteckningar Kursboken C PROGRAMMING A Modern Approach K. N. King
kvoten mellan två på varandra följande tal i en talföljd är konstant alltid lika stor.
Turen har kommit till geometriska talföljder och summan av en geometrisk talföljd. Talföljden 1,, 4, 8, 16, 3,... är ett exempel på en geometrisk talföljd. Utmärkande för en geometrisk talföljd är att
Mathematica. Utdata är Mathematicas svar på dina kommandon. Här ser vi svaret på kommandot från. , x
Mathematica Första kapitlet kommer att handla om Mathematica det matematiska verktyg, som vi ska lära oss hantera under denna kurs. Indata När du arbetar med Mathematica ger du indata i form av kommandon
Tillämpad Programmering (ID1218) :00-13:00
ID1218 Johan Montelius Tillämpad Programmering (ID1218) 2014-03-13 09:00-13:00 Förnamn: Efternamn: Regler Du får inte ha något materiel med dig förutom skrivmateriel. Mobiler etc, skall lämnas till tentamensvakten.
Kompletterande lösningsförslag och ledningar, Matematik 3000 kurs A, kapitel 4. b) = 3 1 = 2
Kapitel.1 101, 102 Exempel som löses i boken 10 a) x= 1 11+ x= 11+ 1 = 2 c) x= 11 7 x= 7 11 = 77 b) x= 5 x 29 = 5 29 = 6 d) x= 2 26 x= 26 2= 1 10 a) x= 6 5+ 9 x= 5+ 9 6= 5+ 5= 59 b) a = 8a 6= 8 6= 2 6=
TATM79: Föreläsning 2 Absolutbelopp, summor och binomialkoefficienter
TATM79: Föreläsning 2 Absolutbelopp, summor och binomialkoefficienter Johan Thim 2 augusti 2016 1 Absolutbelopp Absolutbelopp Definition. För varje reellt x definieras absolutbeloppet x enligt { x, x 0
Sidor i boken f(x) = a x 2 +b x+c
Sidor i boken 18-151 Andragradsfunktioner Här ska vi studera andragradsfunktionen som skrivs f(x) = ax +bx+c där a, b, c är konstanter (reella tal) och där a 0. Grafen (kurvan) till f(x), y = ax + bx +
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
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.
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
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:
Anmälningskod: Lägg uppgifterna i ordning. Skriv uppgiftsnummer (gäller B-delen) och din kod överst i högra hörnet på alla papper
Tentamen Programmeringsteknik II 2018-10-19 Skrivtid: 8:00 13:00 Tänk på följande Skriv läsligt. Använd inte rödpenna. Skriv bara på framsidan av varje papper. Lägg uppgifterna i ordning. Skriv uppgiftsnummer
Tentamen TEN1 HI
Tentamen TEN1 HI1029 2015-03-17 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
TATM79: Föreläsning 2 Absolutbelopp, summor och binomialkoefficienter
TATM79: Föreläsning Absolutbelopp, summor och binomialkoefficienter Johan Thim 15 augusti 015 1 Absolutbelopp Absolutbelopp Definition. För varje reellt x definieras absolutbeloppet x enligt { x, x 0 x
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
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
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
UPPGIFT 1 TVETYDIGA DATUM
UPPGIFT 1 TVETYDIGA DATUM Datum skrivs på olika sätt i olika länder. Till exempel skulle datumet 03/05/01 i Sverige betyda 1 maj 2003, medan det i USA skulle vara 5 mars 2001 och i en del andra länder
Komposanter, koordinater och vektorlängd Ja, den här teorin gick vi igenom igår. Istället koncentrerar vi oss på träning inför KS3 och tentamen.
Sidor i boken 40-4 Komposanter, koordinater och vektorlängd Ja, den här teorin gick vi igenom igår. Istället koncentrerar vi oss på träning inför KS3 och tentamen. Läxa 1. En rät linje, L 1, skär y-axeln
Övningshäfte 2: Induktion och rekursion
GÖTEBORGS UNIVERSITET MATEMATIK 1, MMG200, HT2017 INLEDANDE ALGEBRA Övningshäfte 2: Induktion och rekursion Övning D Syftet är att öva förmågan att utgående från enkla samband, aritmetiska och geometriska,
TENTAMEN I PROGRAMMERING. På tentamen ges graderade betyg:. 3:a 24 poäng, 4:a 36 poäng och 5:a 48 poäng
TENTAMEN I PROGRAMMERING Ansvarig: Jan Skansholm, tel 7721012 Betygsgränser: Hjälpmedel: Sammanlagt maximalt 60 poäng. På tentamen ges graderade betyg:. 3:a 24 poäng, 4:a 36 poäng och 5:a 48 poäng Skansholm,
Användarhandledning Version 1.2
Användarhandledning Version 1.2 Innehåll Bakgrund... 2 Börja programmera i Xtat... 3 Allmänna tips... 3 Grunderna... 3 Kommentarer i språket... 4 Variabler... 4 Matematik... 5 Arrayer... 5 på skärmen...
Belopp Belopp > procent
Dagens problem Försäljarprovision Lönen för en försäljare är helt grundad på provision, direkt kopplad till den omsättning han lyckas skapa under en månad. Tabellen nedan anger procentsatser för olika
MMA132: Laboration 2 Matriser i MATLAB
MMA132: Laboration 2 Matriser i MATLAB Introduktion I den här labben skall vi lära oss hur man använder matriser och vektorer i MATLAB. Det är rekommerad att du ser till att ha laborationshandledningen
Funktioner. Räta linjen
Sidor i boken 14-143, 145-147 Funktioner. Räta linjen Här följer en dialog mellan studenten Tor-Björn (hädanefter kallad TB) och hans lärare i matematik Karl-Ture Hansson (nedan kallad KTH). När vi möter
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
x = som är resultatet av en omskrivning av ett ekvationssystemet som ursprungligen kunde ha varit 2x y+z = 3 2z y = 4 11x 3y = 5 Vi får y z
Ett nytt försök med att ta fram inversen till en matris Innan vi startar med att bestämma inversen till en matris måste vi veta varför vi skulle kunna behöva den. Vi har A x b som är resultatet av en omskrivning
Introduktion till programmering D0009E. Föreläsning 5: Fruktbara funktioner
Introduktion till programmering D0009E Föreläsning 5: Fruktbara funktioner 1 Retur-värden Funktioner kan både orsaka en effekt och returnera ett resultat. Hittills har vi ej definierat några egna funktioner
Föreläsning 10. Grafer, Dijkstra och Prim
Föreläsning 10 Grafer, Dijkstra och Prim Föreläsning 10 Grafer Representation av grafer Dijkstras algoritm Implementation av Dijkstras algoritm Minimium spanning tree Läsanvisning och uppgifter Broarna
Föreläsning 10. Grafer, Dijkstra och Prim
Föreläsning 10 Grafer, Dijkstra och Prim Föreläsning 10 Grafer Representation av grafer Dijkstras algoritm Implementation av Dijkstras algoritm Minimium spanning tree Läsanvisning och uppgifter Broarna
Föreläsning 5. Rekursion
Föreläsning 5 Rekursion Föreläsning 5 Algoritm Rekursion Rekursionsträd Funktionsanrop på stacken Binär sökning Problemlösning (möjliga vägar) Algoritm En algoritm är ett begränsat antal instruktioner/steg
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
Programmeringsolympiaden Kvalificering mars 2005 FIGUR 1.
UPPGIFT 1 TOMATER FIGUR 1. Ett intressant faktum är att omogna tomater mognar snabbare om man lägger in några redan mogna tomater bland dem. I denna uppgift ska du simulera denna process och räkna ut hur
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 (
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
ÖVNINGSTENTAMEN. HF1002, 6H3120, 6H3117 Diskret Matematik. Skrivtid 10:15-13:15. Torsdagen 20 maj Tentamen består av 4 sidor.
ÖVNINGSTENTAMEN HF1002, 6H3120, 6H3117 Diskret Matematik Skrivtid 10:15-13:15 Torsdagen 20 maj 2010 Tentamen består av 4 sidor Hjälpmedel Den kurslitteratur som använts under kursen, samt egna anteckningar,
Sidor i boken 8-9, 90-93
Sidor i boken 8-9, 90-93 Absolutbelopp Men först lite om Absolutbelopp., kallas absolutbeloppet av, och är avståndet för till origo på tallinjen. Som bekant är avståndet till origo för talet 4, 4. Detta
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
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
PROGRAMMERING-Java TENTAMINA
PROGRAMMERING-Java TENTAMINA Nicolina Månsson 2010-03-17 Tentamensinstruktioner Poängsättning Hela tentamen omfattar 42 poäng. Poäng för varje uppgift står angivet inom parentes före varje uppgift. - För
Beräkningsvetenskap föreläsning 2
Beräkningsvetenskap föreläsning 2 19/01 2010 - Per Wahlund if-satser if x > 0 y = 2 + log(x); else y = -1 If-satsen skall alltid ha ett villkor, samt en då det som skall hända är skrivet. Mellan dessa
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
Några svar till TDDC70/91 Datastrukturer och algoritmer
Några svar till TDDC70/91 Datastrukturer och algoritmer 2011--18 Följande är lösningsskisser och svar till uppgifterna på tentan. Lösningarna som ges här ska bara ses som vägledning och är oftast inte
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
UPPGIFT 1 EURO. Utdata: Två rader, som för indata ovan, ser ut som följer: Före resan: bank 1 Efter resan: bank 3
UPPGIFT 1 EURO Harry ska åka till Portugal och behöver växla till sig 500 Euro från svenska kronor. När han kommer tillbaka från Portugal kommer han att ha 200 Euro över som han vill växla tillbaka till
Föreläsning 6 Innehåll. Rekursion. Rekursiv problemlösning Mönster för rekursiv algoritm. Rekursiv problemlösning. Rekursion. Rekursivt tänkande:
Föreläsning 6 Innehåll Rekursion Begreppet rekursion Rekursiv problemlösning Samband mellan rekursion och induktion Söndra-och-härska-algoritmer Dynamisk programmering Undervisningsmoment: föreläsning
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.
Föreläsning 9 Innehåll Mer om rekursion söndra-och-härska-algoritmer dynamisk programmering backtracking Orientering om versionshantering med git Söndra och härska Divide and conquer teknik för att konstruera
Välkommen till Kängurutävlingen Matematikens hopp 17 mars Student för elever på kurs Ma 4 och Ma 5
Till läraren Välkommen till Kängurutävlingen Matematikens hopp 17 mars 2016 Student för elever på kurs Ma 4 och Ma 5 Tävlingen ska genomföras under perioden 17 mars 1 april. Uppgifterna får inte användas
Följande, ur problemsynpunkt enkla uppgifter, är till för att nöta in dagens teori.
Problem Nivå 1 Följande, ur problemsynpunkt enkla uppgifter, är till för att nöta in dagens teori. Problem 1 Skriv ett program som tar reda på hur många termer man måste ta med i serien för att summa ska
Introduktion till programmering SMD180. Föreläsning 5: Fruktbara funktioner
Introduktion till programmering Föreläsning 5: Fruktbara funktioner 1 Retur-värden Funktioner kan både orsaka en effekt och returnera ett resultat. Hittills har vi ej definierat några egna funktioner med
Programmering = modellering
Programmering = modellering Ett datorprogram är en modell av en verklig eller tänkt värld. Ofta är det komplexa system som skall modelleras I objektorienterad programmering består denna värld av ett antal
Switch, Array (fält) switch break, continue, goto (scary) Sammansatta tilldelningar Kommentarer Array Sortering
Switch, Array (fält) switch break, continue, goto (scary) Sammansatta tilldelningar Kommentarer Array Sortering switch int weekday; printf("mata in veckodagnummer 1-7: "); scanf("%d", &weekday); switch(weekday)
Föreläsning 6 Datastrukturer (DAT037)
Föreläsning 6 Datastrukturer (DAT037) Fredrik Lindblad 1 15 november 2017 1 Slides skapade av Nils Anders Danielsson har använts som utgångspunkt. Se http://www.cse.chalmers.se/edu/year/2015/course/dat037
Talmängder. Målet med första föreläsningen:
Moment 1..1, 1.., 1..4, 1..5, 1.. 1..5, 1..6 Viktiga exempel 1.7, 1.8, 1.8,1.19,1. Handräkning 1.7, 1.9, 1.19, 1.4, 1.9 b,e 1.0 a,b Datorräkning 1.6-1.1 Målet med första föreläsningen: 1 En första kontakt
Tentamen TANA17 Matematiska beräkningar Provkod: DAT1 Godkänd: 8p av totalt 20p Tid: 14:e januari klockan
MAI/Linköpings universitet Fredrik Berntsson Tentamen TANA17 Matematiska beräkningar Provkod: DAT1 Godkänd: 8p av totalt 20p Tid: 14:e januari klockan 8.00-12.00 Redovisning Lös först uppgifterna i Matlab.
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 =
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
Matematiska uppgifter
Elementa Årgång 67, 984 Årgång 67, 984 Första häftet 3340. a) Vilket av talen A = 984( + + 3 + + 984 ) är störst? b) Vilket av talen B 3 = 3 + 3 + 3 3 + + 984 3 är störst? A / = 984( + + 3 + + 984) B =
1 Reducerat faktorförsök rf f
1 REDUCERAT FAKTORFÖRSÖK RF F 1 Reducerat faktorförsök rf f Vi skall med tre faktorer och således 2 3 försök reducera till ett fullständigt 2 2 försök. 1.1 Tre faktorer Vi repeterar med ett tidigare fullständigt
TDDC74 Programmering: Abstraktion och modellering Tentamen, onsdag 9 juni 2016, kl 14 18
TDDC74 Programmering: Abstraktion och modellering Tentamen, onsdag 9 juni 2016, kl 14 18 Läs alla frågorna först, och bestäm dig för i vilken ordning du vill lösa uppgifterna. Skriv tydligt och läsligt.