Glupska algoritmer. Kapitel Mynt och sedlar
|
|
- Erika Nilsson
- för 8 år sedan
- Visningar:
Transkript
1 Kapitel 9 Glupska algoritmer Det vi här kallar glupsk algoritm heter på engelska greedy algorithm. Algoritmerna konstruerade efter denna idé är alltså snarare glupska än giriga! En glupsk algoritm startar med att söka lösningen till ett litet delproblem av hela problemet. På ett glupskt sätt gör algoritmen sitt val, enbart efter lokala omständigheter och utan att tänka på vad detta val kommer att betyda för den totala, slutliga lösningen. Detta arbetssätt kan leda till en optimal, en ganska bra eller en urusel lösning. Glupska algoritmer är oftast enkla att utveckla, enkla att implementera, enkla att analysera och är dessutom mycket snabba. Problemet är dock att det oftast är mycket svårt att bevisa att de är korrekta. Som tur är finns det några välkända algoritmer av detta slag, som är bevisade vara korrekta och som vi ska studera här. Förhoppningsvis ska dessa vara tillräckliga för att påvisa de glupska algoritmernas karaktär. 9.1 Mynt och sedlar Som första exempel på en glupsk algoritm ska vi diskutera följande problem: Figur 9.1: Alla valörer av svenska mynt och sedlar, utom 50-öringen ska användas i detta exempel 1
2 9.1. MYNT OCH SEDLAR I figuren ser du de svenska mynt och sedlar som används idag (utom 50-öringen). Hur många mynt och sedlar behöver man högst för att räkna upp ett givet belopp på x 1000 kr? Den metod som vi först kommer att tänka på fungerar alldeles utmärkt. Starta med den högsta valör som är x. Använd den valören så länge det är möjligt. Välj sedan den högsta valör som är det som återstår. Använd den så många gånger som möjligt. Och så vidare tills hela beloppet är uppräknat Viktigt är att myntet 1 kr finns med, annars skulle det finnas belopp som inte kunde uppnås. Alla andra mynt skulle man kunna avstå ifrån även om det skulle innebära att antalet mynt ökar. Algorithm 9.1.1: GREEDYVÄXEL(valörer, antal, belopp) n 0 for i antal downto 1 while { belopp valörer[i] do belopp belopp valörer[i] do n n+1 return (n) Valörer är en array som förstås innehåller de valörer som finns, sorterade i stigande värde. antal anger antalet valörer och belopp det belopp man med så få mynt som möjligt vill räkna upp. Kommer den här algoritmen alltid att fungera? Svaret är ja. För dessa valörer ger oss GREEDYVÄXEL alltid den optimala lösningen. Men hur är det då med andra uppsättningar av valörer? Svaret är: Nej vår glupska algoritm fungerar inte alltid för andra uppsättningar. Vad sägs till exempel om valörerna [1, 10, 25] och beloppet 30. Algoritmen ovan föreslår 25,1,1,1,1,1, alltså 6 mynt men vi kan se att 3 mynt räcker 10,10,10 är den optimala lösningen. Hur som helst är detta en mycket bra introduktion till glupska algoritmer. Men två frågor kvarstår: Hur löser vi problemet då GREEDYVÄXEL inte fungerar? Hur kan vi se när GREEDYVÄXEL inte fungerar? Den första frågan återkommer vi till i samband med dynamisk programmering och den andra frågan är för stor för vår kurs! UPPGIFT 9.1 Med svenska mynt och sedlar. Implementera GREEDYVÄXEL för de svenska valörerna och ta med programmet reda på vilka belopp b 1000, som kräver flest mynt och sedlar. Hur många dessa belopp är och hur många mynt och sedlar som behövs. Håkan Strömberg 2 KTH Syd
3 KAPITEL 9. GLUPSKA ALGORITMER 9.2 Schemaläggning 1 Vi har en mängd A av n aktiviteter a 1,a 2...a n, som vi vill schemalägga i en sal. Till varje aktivitet finns bestämd starttid s i och sluttid t i. Vårt mål är att placera in så många aktiviteter som möjligt. Självklart får inga aktiviteter tidsmässigt överlappa varandra. Här följer fyra tänkbara algoritmer för att lösa problemet. Endast en av dem ger en optimal lösning för alla tänkbara uppsättningar av indata. Algoritm 1 a) S mängden av schemalagda aktiviteter, som är tom från start b) Flytta till S, den aktivitet i i A, som har tidigaste starttiden s i. c) Stryk sedan ur A, alla aktiviteter ur S, som överlappar den just valda. d) Om A är tom finns resultatet i S annars gå till b) Algoritm 2 a) S mängden av schemalagda aktiviteter, som är tom från start b) Flytta till S, den aktivitet i i A, med kortaste tiden t i s i. c) Stryk sedan ur A, alla aktiviteter ur S, som överlappar den just valda. d) Om A är tom finns resultatet i S annars gå till b) Algoritm 3 a) S mängden av schemalagda aktiviteter, som är tom från start b) Flytta till S, den aktivitet i i A, som står i konflikt med (överlappas av) minst antal andra aktiviteter. c) Stryk sedan ur A, alla aktiviteter ur S, som överlappar den just valda. d) Om A är tom finns resultatet i S annars gå till b) Algoritm 4 a) S mängden av schemalagda aktiviteter, som är tom från start b) Flytta till S, den aktivitet i i A, som slutar först, har minsta t i c) Stryk sedan ur A, alla aktiviteter ur S, som överlappar den just valda. d) Om A är tom finns resultatet i S annars gå till b) Eftersom vi påstår att den bästa algoritmen ovan alltid ger det optimala resultatet räcker det med ett motexempel för tre av de givna algoritmerna för att komma fram till rätt svar. I figur 9.2 ser vi ett motexempel, som får oss att förkasta algoritm 1. Längst ned har vi tidsaxeln. Direkt ovanför har vi den aktivitet vi enligt algoritmen ska välja. Detta leder till att de två andra aktiviteterna slås ut. Resultatet blir alltså 1 aktivitet i stället för det uppenbarliga 2. I figur 9.3 visas ett exempel där algoritm 2 inte ger det optimala resultatet. Vi väljer den kortaste aktiviteten, som slår ut den de två andra! Håkan Strömberg 3 KTH Syd
4 9.3. SCHEMALÄGGNING 2 Figur 9.2: Figur 9.3: Algoritm 3 är det bästa förslaget hittills och det är ganska knepigt att hitta motexempel, men figur 9.4 visar ett. Väljer vi aktiviteten närmast tidsaxeln, som ju endast har två överlappningar, får vi sedan plats med endast två ytterligare aktiviteter. Det är alltså Algoritm 4 som är bäst och som alltid ger optimalt resultat. Vi bryr oss inte om att bevisa detta, men kan enkelt se att den fungerar för våra tre exempel ovan. 9.3 Schemaläggning 2 Ett nytt schemaläggningsproblem med en mängd A av n aktiviteter a 1,a 2...a n, som vi alla vill schemalägga. Men denna gång har flera salar till vårt förfogande. Till varje aktivitet finns som förut bestämda starttider s i och sluttider t i. Vårt mål är minimera antalet salar vi behöver. Detta betyder förstås att två aktiviteter som överlappar aldrig kan hamna i samma sal. Vi studerar exemplet i figur 9.5. Vi förstår direkt att man måste ta till minst 3 salar eftersom det på flera ställen finns tre aktiviteter som överlappar varandra. Man klarar sig alltid med d salar, där d står för den största antalet aktiviteter som överlappar varandra om man följer denna algoritm. Figur 9.4: Håkan Strömberg 4 KTH Syd
5 KAPITEL 9. GLUPSKA ALGORITMER Figur 9.5: A är en matris med tre kolumner. Den första innehåller s i, den andra t i och den sista kommer att innehålla tilldelad sal. Algorithm 9.3.1: SCHEMALÄGGNING(A, n, d) Sortera de n aktiviteterna i A efter stigande s i for i 1 to n for j 1 to d do sal[j] 1 for j { 1 to i 1 if A[j][sluttid] > A[i][starttid] do do then sal[a[j][sal] 0 j 1 while sal[j] = 0 do j j+1 A[i][sal] j I figur 9.6 kan vi se hur de 11 aktiviteterna hamnar i 3 olika salar. Figur 9.6: Håkan Strömberg 5 KTH Syd
6 9.4. MCSP, MINIMUM COST SPANNING TREE 9.4 MCSP, Minimum cost spanning tree Vi presenterar MCSP genom ett exempel. I figur 9.7 ser vi en karta över 10 städer. Mellan en del städer finns en rät linje, en väg. Hela systemet av vägar sammanbinder alla städer. Man önskar konstruera vägnätet på ett så ekonomiskt sätt som möjligt. Man vill minimera den sammanlagda vägsträckan. En väg dras alltid rätlinjigt mellan två städer. Lösningen till detta problem är en graf. Om den innehåller n städer finns det n 1 bågar. Lösningen kallas det minsta uppspännande trädet Figur 9.7: En karta över 10 städer Det program vi vill ha, ska ta emot uppgift om antalet städer och deras koordinater. Vi kan för enkelhet skull begränsa oss till heltalskoordinater, både för x och y, i intervallet [0,100]. Programmet ska sedan finna det kortaste vägnätet genom följande algoritm: Välj en stad A, vilken som helst. Sök reda på den stad B, som ligger närmast A. Förbind A och B med en väg. Sök upp den stad C, som ligger närmast någon av städerna A och B. Förbind C med en väg till närmaste stad, A eller B. Nu består vägnätet av tre städer och två vägar. Nästa stad som ska förbindas är den stad som ligger närmast någon av de tre städerna A, B eller C. Fortsätt denna procedur tills alla städer är anslutna. I verkligheten skulle man kunna finna ännu bättre lösningar än vad denna algoritm ger, genom att lägga in vägkorsningar eller knutpunkter på lämpliga platser på kartan. Detta problem kallas Steiner tree problem och är ett helt annat problem. Det är alltså inte tillåtet, att i denna uppgift, lägga till nya punkter på kartan! Håkan Strömberg 6 KTH Syd
7 KAPITEL 9. GLUPSKA ALGORITMER Figur 9.8: Ett exempel som vill visa hur algoritmen fungerar UPPGIFT 9.2 Avståndstabell I ett område finns 10 tätorter. A till J. Man ska nu förbinda dem med genom ett vägnät. Givet är en avståndstabell kan man kan utläsa avståndet mellana alla par av orter. Bestäm med hjälp av penna och papper längden hos det kortaste vägnätet. A B C D E F G H I J A B C D E F G H I J UPPGIFT 9.3 Program för MCSP. Skriv ett program i java som implementerar MCSP. Programmet ska demonstrera MCSP grafiskt. Från en koordinat-fil, som man ska kunna välja från programmet, visas först punkterna på skärmen. För varje knapptyckning visas så en ny väg tills hela trädet finns på skärmen. På hemsidan finns ett fult program MCSP som vill visa idén. Håkan Strömberg 7 KTH Syd
8 9.5. KORTASTE VÄGEN 9.5 Kortaste vägen Även nästa problem hör till grafteorin. Denna gång handlar det om att bestämma kortaste vägen mellan två städer (noder) i ett land där vissa städer är förbundna med vägar. Till varje väg (båge) mellan två städer är längden given. Algoritmen som den beskrivs i matematikboken Algorithm 9.5.1: DIJKSTRA(w, a, z, L) L[a] 0 for alla noder x a do L[x] T mängd av alla noder while z T välj v T med minsta L[v] T T {v} do for varje x T förbunden med v do L[x] min(l[x],l[v]+w(v,x)) w innehåller vikten (längden) för en båge mellan två städer. a är startnod och z är slutnod. I L kommer resultatet att lagras. Ett exempel förklarar hur algoritmen fungerar. Figur 9.9: Att hitta den kortaste vägen från A till H utan algoritm är inte svårt. Men hur hittar man den med hjälp av Dijkstra s algoritm? Här ser vi huvudprogrammet som anropar Dijkstras algoritm. Grafen som beräknas är samma som i figuren. Håkan Strömberg 8 KTH Syd
9 KAPITEL 9. GLUPSKA ALGORITMER 1 int main(void){ 2 char graph[ ][3]={{ A, B,2},{ A, F,1},{ B, D,2},{ D, F,1}, 3 { B, C,2},{ B, E,4},{ C, E,3},{ C, H,1}, 4 { D, E,4},{ E, G,7},{ G, H,6},{ F, G,5}}; 5 int path[256],i; 6 dijkstra(graph,12,8, A, H,path); 7 printf("%d\n",path[ H ]); 8 } 9 10 void dijkstra(char graph[ ][3],int ne,int nv,char start,char stop,int path[ ]){ 11 int t[256],i,j,v,x,min; 12 for(i= A ;i<= A +nv;i++){ 13 path[i]=int MAX; 14 t[i]=1; 15 } 16 path[start]=0; while(t[stop]){ 19 min=int MAX; 20 for(i= A ;i<= A +nv;i++) 21 if(t[i] && path[i]<min){ 22 v=i; 23 min=path[i]; 24 } 25 t[v]=0; for(j=0;j<ne;j++){ 28 x= 1; 29 if(graph[j][0]==v) x=graph[j][1]; 30 if(graph[j][1]==v) x=graph[j][0]; 31 if(x>=0 && path[x]>path[v]+graph[j][2]) 32 path[x]=path[v]+graph[j][2]; 33 } 34 } 35 } Parametrarna är i tur och ordning själva grafen (graph) som innehåller nodnummer och vägsträckans längd. Antalet vägar (ne) och antalet städer (nv). start anger numret på staden varifrån resan startar och stop anger var resan tar slut. I path rapporteras resultatet. UPPGIFT 9.4 Program för Dijkstra s algoritm. Skriv ett program i java som demonstrerar Dijkstra s algoritm grafiskt. Programmet ska slumpa fram ett antal noder (dess skärmkoordinater) och ett lämpligt antal bågar. Användaren väljer mellan vilka två noder man önskar kortaste avståndet. Som sedan visas grafiskt. På hemsidan finns Kortaste vägen som demo. Öppna en av filerna. Klicka på två noder och välj Djupet först. Man ska få samma svar om man väljer Closest Path. Håkan Strömberg 9 KTH Syd
10 9.6. KNAPSACK PROBLEM Figur 9.10: Här följer vi Dijkstra s algoritm steg för steg för att hitta den kortaste vägen från A till E. Som ett resultat på vägen har vi fått den kortaste vägen från A till alla andra noder. 9.6 Knapsack Problem Till detta problem hör n objekt av något slag b 1,b 2,...,b n och ryggsäck eller kont med volymen C. Varje objekt b i har en volym w i och ett värde v i för i = 1,...,n. Målet är nu att fylla ryggsäcken med en så värdefull last som möjligt. Observera att det är möjligt att lägga endast en del av ett objekt i säcken. Då f i b i läggs till lasten för 0 f i 1 innebär det att det totala värdet ökar med f i v i samtidigt som lastens totala volym ökar med f i w i. Vi söker en lösning till problemet maximera n i=1 f iv i under villkoret n i=1 f iw i C 0 f i 1, i = 1,...,n Här har vi tre olika idéer: Vi lägger så mycket vi kan av det dyraste objektet i kappsäcken, därefter så mycket Håkan Strömberg 10 KTH Syd
11 KAPITEL 9. GLUPSKA ALGORITMER vi kan av det näst dyraste och så vidare tills kappsäcken är fylld. Vi lägger till så mycket vi kan av det minsta objektet. Därefter så mycket vi kan, av det näst minsta och så vidare tills kappsäcken är fylld. Vi räknar ut och sorterar objekten efter volymspris (till exempel kr/l) v i /w i. I tur och ordning lägger vi sedan till lasten så mycket vi kan av det objekt som har högst volympris. Därefter adderas så mycket som möjligt av objektet med näst högsta volympriset och så vidare tills ryggsäcken är full. Endast en av dessa ger alltid den korrekta lösningen. För de båda första förslagen kan vi finna exempel som visar att idéerna inte leder till den optimala lösningen. Algorithm 9.6.1: KNAPSACK(V, W, C, F) for i 1 to n do F[i] 0 återstår C i 1 if W[1] C then fårplats true else fårplats false while fårplats and i n F[i] 1 do återstår återstår W[i] i i+1 if W[i] återstår then fårplats true else fårplats false if i n then F[i] återstår/w[i] V[1...n] är en array som innehåller objektens värden. W[1...n] är en array som innehåller objektens volymer. Både V och W är sorterade så att V[1]/W[1] V[2]/W[2]... V[n]/W[n]. C är ryggsäckens volym. F[1...n] är algoritmens utdata, som innehåller hur stora andelar 0 F[i] 1 av varje objekt som tagits med. 9.7 Perfekt matchning Till vänster i figur 9.11 ser vi en oriktad graf med 8 noder. Till höger ser vi samma graf där noderna parats samman två och två. För att genomföra detta har vi valt ut lämpliga bågar. Detta arrangemang kallas för en matchning. Eftersom samtliga noder ingår i matchningen Håkan Strömberg 11 KTH Syd
12 9.7. PERFEKT MATCHNING Figur 9.11: kallas den perfekt matchning. För en godtycklig graf är det inte alltid möjligt att finna en perfekt matchning. Däremot finns det alltid en maximal matchning. Det vill säga en matchning där det ingår så många noder som möjligt. Normalt är det, för en godtycklig graf, ett svårt problem att finna en maximal matchning (som likväl kan vara en perfekt). Här ska vi bestämma oss för grafer där antalet noder V = 2n (alltså ett jämnt antal noder) och där varje nod v har ett gradtal deg(v) n. (Gradtalet hos en nod v är det antal bågar som utgår från den noden). Vi ser att grafen i figur 9.11 uppfyller dessa villkor och påstår, utan att bevisa, att det alltid finns en perfekt matchning för denna typ av grafer och att det finns en glupsk algoritm som finner denna matchning. Så här kan vi beskriva den: Vi startar med att välja ut bågar, sådana att de binder ihop noder som tidigare inte varit inblandade. De berörda noderna och bågarna bildar en ny, från början tom, graf M. Valet av bågar sker i godtycklig ordning. Har vi riktig tur löser vi problemet redan i denna fas. Men anta nu att vi kommit en bit på vägen och inte kan lägga till någon mer båge. Då finns det åtminstone två noder v 1 och v 2, som inte tillhör M. Dessa två noder har tillsammans 2n bågar, som alla går till en nod som finns i M. (v 1,v 2 ) finns ju inte. Eftersom antalet bågar i M är < n och antalet bågar som utgår från v 1 och v 2 är 2n, så måste det finnas en båge (u 1,u 2 ) i M, sådan att det i G finns (u 1,v 1 ),(u 1,v 2 ) och (u 2,v 1 ). Om vi då tar bort bågen (u 1,u 2 ) och ersätter den med (u 1,v 2 ) och (u 2,v 1 ) har vi kommit närmare lösningen. UPPGIFT 9.5 Perfekt matchning Översätt resonemanget i avsnittet om perfekt matchning, till ett program som löser problemet med en glupsk algoritm. På filerna matchning1.txt och matchning2.txt finns data som beskriver grafer av den speciella typ som krävs för att algoritmen ska fungera. Första raden anger antalet noder. Andra raden antalet bågar. På efterföljande rader finns två tal som beskriver en båge mellan två noder. Håkan Strömberg 12 KTH Syd
13 KAPITEL 9. GLUPSKA ALGORITMER Att färglägga en karta Att färglägga en karta med n länder så att inga läder med gemensam gräns får samma färg, kan klaras av med hjälp av en glupsk algoritm, utan att för den skull finna det minsta antalet färger som behövs för att utföra arbetet. Här har vi två kartor I figuren ser vi till vänster en karta med överdrivet många färger. Till höger har vi klarat av målandet med endast tre färger, vilket man enkelt kan se, är det minsta antal som behövs. Hur ska då datastrukturen se ut? Givet är en fil kartan.txt som innehåller uppgifter om alla gränder. Filen inleds med ett tal som anger antalet länder n, därefter ett tal som anger antalet gränser m. På efterföljande m rader innehåller alla två tal. Numren på två länder mellan vilken det går en gräns Här följer algoritmen: 1 #include <stdio.h> 2 #define MAX 20 3 void mala(int antal,int granser[][max],int karta[],int lander[]){ 4 int farger[max]={0},i,j; 5 for(i=1;i<=antal;i++){ 6 for(j=1;j<=antal;j++) 7 farger[j]=0; 8 for(j=1;j<=antal;j++) 9 if(granser[i][j] && lander[j]!=0) 10 farger[lander[j]]=1; 11 j=1; 12 while(farger[j]) 13 j++; 14 lander[i]=j; 15 } 16 } Håkan Strömberg 13 KTH Syd
14 9.7. PERFEKT MATCHNING 1 int main(void){ 2 int granser[max][max]={0},karta[max]={0}; 3 int antal,i,f,t,lander[max]={0},nlander,ngranser; 4 FILE *fil; 5 fil=fopen("kartan.txt","rt"); 6 fscanf(fil,"%d",&nlander); 7 fscanf(fil,"%d",&ngranser); 8 for(i=0;i<ngranser;i++){ 9 fscanf(fil,"%d %d",&f,&t); 10 granser[f][t]=1; 11 granser[t][f]=1; 12 } 13 fclose(fil); 14 mala(nlander,granser,karta,lander); 15 for(i=1;i<=nlander;i++) 16 printf("land %d Farg %d\n",i,lander[i]); 17 } Egyptiska bråk Alla rationella tal kan skrivas a b, där a,b Z. Vi koncentrerar oss här på rationella tal 0 < a b < 1 och påstår att de alla kan skrivas som en summa av bråk med täljaren 1. Till exempel: 7 11 = Utvecklingen kan skapas med hjälp av en greedy algoritm. Observera dock att denna algoritm varken ger det minsta antalet termer eller minimerar nämnarens storlek. Ett problem är att nämnaren kan bli så stor att den inte ryms i ett int eller ens long long int även då nämnre och täljare är relativt små. Till exempel kan = som är resultatet från vår greedy algoritm, också skrivas = Håkan Strömberg 14 KTH Syd
15 KAPITEL 9. GLUPSKA ALGORITMER 1 #include <stdio.h> 2 #define T 7 3 #define N void findnext(long long t,long long n,long long *n2){ 6 *n2=n/t; 7 while(*n2*t<n) 8 (*n2)++; 9 } void swap(long long *a,long long *b){ 12 int tmp=*a; 13 *a=*b; 14 *b=tmp; 15 } long long gcd(long long a,long long b){ 18 if(b>a) 19 swap(&a,&b); 20 if (b==0){ 21 return a; 22 } 23 else{ 24 return gcd(b,a%b); 25 } 26 } 1 void sub(long long *t,long long *n,long long n2){ 2 long long t3,n3,g; 3 t3=*t*n2-*n; 4 n3=*n*n2; 5 g=gcd(t3,n3); 6 *t=t3/g; 7 *n=n3/g; 8 } 9 10 int main(void){ 11 long long t=t,n=n,n2; 12 while(t!=0){ 13 findnext(t,n,&n2); 14 printf("1/%lld+",n2); 15 sub(&t,&n,n2); 16 } 17 } long long klarar max , unsigned, , som skulle kunna hjälpa oss en liten bit till. Uttalas 18 triljoner 446 biljarder 744 biljoner 73 miljarder 709 miljoner 551 tusen 615 Håkan Strömberg 15 KTH Syd
16 9.7. PERFEKT MATCHNING UPPGIFT 9.6 Program för Knapsack. Skriv ett program som implementerar Knapsack efter algoritmen ovan. Programmets indata ska läsas från fil. Filen ska inledas med C, ryggsäckens volym. På nästa rad anges antal objekt n 50. Därefter följer n rader där varje rad innehåller två positiva heltal v i och w i Utdata är en lista, som innehåller ordningsnumret för de objekt, som ingår i den fullpackade ryggsäcken. För det sista objektet anges dessutom vilken andel som ingår, ett reellt tal. UPPGIFT 9.7 Optimal tape-storage problem. Givet i denna uppgift är n filer f 1...f n. Till var och en av filerna är storleken (i byte) s i...s n given. Dessa filer ska läsas till ett magnetband på ett tidsmässigt så ekonomiskt sätt som möjligt. För att läsa en viss fil f i från bandet (vi antar att bandet är återspolat från start) måste man först läsa förbi eventuella filer som ligger före. Den totala kostnaden blir därför summan av alla filstorlekar före och inklusive den fil som ska läsas. Konstruera en glupsk algoritm som föreslår i vilken ordning filerna ska skrivas på bandet för att framtida läsningar ska bli optimal. Föreslå också en algoritm för att dela upp filerna på två band. Tiden mäts från det att rätt band sitter i bandstationen. UPPGIFT 9.8 Färjan En färja som kan ta n bilar behöver t minuter för att korsa floden, låta bilarna köra av och återvända till färjläget för ny pålastning. Filen bilar.txt inleds tre tal n,t,b, där b anger hur många bilar som kommer att anlända. Därefter följer b tider, heltal 1000, i stigande ordning, angivna i hela minuter, som anger då bilarna anländer. Kan du komma på en glupsk algoritm som beräknar den den tid, då arbetet tidigast kan vara avklarat? UPPGIFT 9.9 Schemaläggning. På ett universitet ska ett antal föreläsningar hållas. Varje föreläsning har en starttid och en sluttid. Man vill nu placera så många som möjligt i Stora Hörsalen. Konstruera och implementera en glupsk algoritm som löser problemet. Indata finns på en fil, som inleds med ett tal n 50 som anger antalet föreläsningar. Därefter följer n rader där varje rad innehåller två heltal starttid och sluttid, där sluttiden alltid är större än starttiden. Ingen speciell ordning mellan raderna kan förutsättas. Utdata är ordningsnumren (motsvarande i indatafilen) av de utvalda föreläsningarna i den ordning de ska hållas med angivande av start- och sluttid. Observera alltså att det är antalet föreläsningar som ska maximeras inte den totala beläggningstiden. Använd datafilen schema.dat för test. Håkan Strömberg 16 KTH Syd
17 KAPITEL 9. GLUPSKA ALGORITMER UPPGIFT 9.10 Golfhålet Figur 9.12: Figuren visar en del av en golfbana! Utslaget sker från någon av de nio rutorna i den grå kvadraten till vänster (tee). Från den ruta man väljer kan bollen sedan slås i åtta olika riktningar (N, NÖ, Ö, SÖ, S, SV, V, NV), så många rutor som talet i utgångsrutan anger. Detta under förutsättning att bollen hamnar inom banans geometri. Från den ruta i vilken bollen stannar går spelet sedan vidare i en av de åtta riktningarna med en slaglängd som motsvarar talet i den rutan. Målet är att med så få slag som möjligt nå hålet märkt H i figuren. Skriv ett program som tar emot data om banans geometri och som enligt reglerna ovan bestämmer det minsta antal slag som krävs för att komma från tee till hål Indata: Programmet startar med att fråga efter indatafilens namn: Filnamn: uppg6.dat Filen inleds med en rad innehållande 6 tal: Banans bredd (antal rader b,3 b 40), banans längd (antal kolumner l, 4 l 60), rad och kolumn övre vänstra hörnet hos tee (alltid 3 3) och rad och kolumn för hålets placering. Följande b rader innehåller l siffror som anger slaglängden från denna ruta. För vårt exempel: Utdata: Programmet skriver ut det minsta antalet slag som behövs för att nå hålet Hålet kan klaras av på 3 slag Håkan Strömberg 17 KTH Syd
18 9.7. PERFEKT MATCHNING UPPGIFT 9.11 Sammanslagning av valdistrikt I landet finns n valdistrikt. Kartan visar hur många röster det finns i varje distrikt. Man vill nu slå samman dem till m < n distrikt, så att antalet röster blir så jämnt fördelat som möjligt. Ett krav är dock att var och en av de m större distrikten är sammanhängande. Föreslå en glupsk algoritm! Håkan Strömberg 18 KTH Syd
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)
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
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)
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
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
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
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 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 Broarna i Königsberg, Euler, 17 Grafer
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
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
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
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
HI1024, Programmering, grundkurs, 8hp KTH STH TENTAMEN. HI1024:TEN2 - Praktisk tentamen Tid: Fredagen den 21 oktober 2011,
KTH STH TENTAMEN HI1024:TEN2 - Praktisk tentamen Tid: Fredagen den 21 oktober 2011, 8.15-13.15 Gamla kurskoder: HI1900, 6E2950, etc. Examinator: Johnny Panrike Rättande lärare: Nicklas Brandefelt, Johnny
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
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,
Föreläsning 4: Giriga algoritmer. Giriga algoritmer
Föreläsning 4: Giriga algoritmer Giriga algoritmer Denna typ av algoritmer arbetar efter följande princip: Gör i varje situation det som är lokalt optimalt, d.v.s. bäst för stunden. Några exempel vi redan
Föreläsning 7 Datastrukturer (DAT037)
Föreläsning 7 Datastrukturer (DAT037) Fredrik Lindblad 1 2016-11-21 1 Slides skapade av Nils Anders Danielsson har använts som utgångspunkt. Se http://www.cse.chalmers.se/edu/year/2015/course/dat037 Förra
Föreläsning Datastrukturer (DAT036)
Föreläsning Datastrukturer (DAT036) Nils Anders Danielsson 2013-11-18 Idag Mer om grafer: Minsta uppspännande träd (för oriktade grafer). Prims algoritm. Kruskals algoritm. Djupet först-sökning. Cykel
Algoritmer, datastrukturer och komplexitet
Algoritmer, datastrukturer och komplexitet Övning 10 Anton Grensjö grensjo@csc.kth.se 18 november 2015 Anton Grensjö ADK Övning 10 18 november 2015 1 / 20 Översikt Kursplanering Ö9: NP-fullständighetsbevis
Föreläsning Datastrukturer (DAT037)
Föreläsning Datastrukturer (DAT037) Nils Anders Danielsson 2015-11-23 Idag Mer om grafer: Minsta uppspännande träd (för oriktade grafer). Djupet först-sökning. Minsta uppspännande träd Träd (utan rot)
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
TNK049 Optimeringslära
TNK49 Optimeringslära Clas Rydergren, ITN Föreläsning 7 Nätverksoptimering Billigaste uppspännande träd (MST) Billigaste väg (SP) Projektnätverk Minkostnadsflödesproblem Agenda Terminologi för grafer/nätverk
Föreläsning 5: Giriga algoritmer. Kruskals och Prims algoritmer
Föreläsning 5: Giriga algoritmer Kruskals och Prims algoritmer Spännande träd: Om G är en sammanhängande graf så är ett spännande träd ett träd som innehåller alla noder i V (G). Viantarattviharkantvikterw(e)
Föreläsning 5: Giriga algoritmer. Kruskals och Prims algoritmer
Föreläsning 5: Giriga algoritmer Kruskals och Prims algoritmer Spännande träd: Om G är en sammanhängande graf så är ett spännande träd ett träd som innehåller alla noder i V (G). Viantarattviharkantvikterw(e)
Dynamisk Programmering
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
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
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
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
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
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 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
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
Föreläsning 8 Datastrukturer (DAT037)
Föreläsning 8 Datastrukturer (DAT037) Fredrik Lindblad 1 2016-11-23 1 Slides skapade av Nils Anders Danielsson har använts som utgångspunkt. Se http://www.cse.chalmers.se/edu/year/2015/course/dat037 Förra
Tentamen Datastrukturer för D2 DAT 035
Tentamen Datastrukturer för D2 DAT 035 17 december 2005 Tid: 8.30-12.30 Ansvarig: Peter Dybjer, tel 7721035 eller 405836 Max poäng på tentamen: 60. (Bonuspoäng från övningarna tillkommer.) Betygsgränser:
Datastrukturer och Algoritmer D0041D
Luleå Tekniska Universitet 19 mars 2014 Laborationsrapport Laboration 3 Datastrukturer och Algoritmer D0041D Primms Algoritm Namn E-mail Magnus Björk magbjr-3@ltu.student.se Handledare Felix Hansson Primms
Föreläsning 4: Kombinatorisk sökning
DD2458, Problemlösning och programmering under press Föreläsning 4: Kombinatorisk sökning Datum: 2009-09-25 Skribent(er): Kristina Nylander, Dennis Ekblom, Marcus Öman Föreläsare: Fredrik Niemelä 1 Introduktion
Ö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,
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
Kaliningrad) låg vid bägge sidor av floden Pregel samt på
Grunder i matematik och logik (2018) Grafteori Marco Kuhlmann Grafteori är det område inom matematiken som undersöker egenskaper hos grafer. Inom grafteorin har begreppet graf en annan betydelse än graf
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
Föreläsning 12+13: Approximationsalgoritmer
Föreläsning 12+13: Approximationsalgoritmer Många av de NP-fullständiga problemen är från början optimeringsproblem: TSP, Graph Coloring, Vertex Cover etc. Man tror att P NP och att det alltså inte går
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.
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
Dagens Teori. Figur 12.1:
Dagens Teori 12.1 Grafer Del II 12.1.1 Grafer i Mathematica Definition Genom paketen Combinatorica och GraphUtilities får vi tillgång till en mängd rutiner och fördefinierade grafer för lösandet av problem
Johan Karlsson Datavetenskap för teknisk kemi, 10p, moment 1 Datavetenskap Umeå Universitet. Tentamen
Tentamen för teknisk kemi, 10p, moment 1 29 november 1999 Skrivtid 9-15 Hjälpmedel: av följande böcker. - U. Bilting och J. Skansholm: Vägen till C - A. Kelley & I. Pohl: A Book on C Maxpoäng: Gräns för
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
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
6 Derivata och grafer
6 Derivata och grafer 6.1 Dagens Teori När vi plottar funktionen f(x) = x + 1x 99x 8 med hjälp av dosan kan man få olika resultat beroende på vilka intervall man valt. 00000 100000-00 -100 100 00-100000
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 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,
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
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
Föreläsning 9: NP-fullständighet
Föreläsning 9: NP-fullständighet Olika typer av problem: 1. Beslutsproblem: A(x) =Ja. 2. Optimeringsproblem: A(x) =m Vanligen max/min. 3. Konstruktionsproblem: A(x) =En struktur. Vanligen lösningen till
Föreläsning 6. Slumptal Testa slumptal Slumptal för olika fördelningar Grafer Datastrukturen graf
Föreläsning 6 Slumptal Testa slumptal Slumptal för olika fördelningar Grafer Datastrukturen graf Repetition En dator kan inte generera slumptal då den är helt deterministisk, däremot kan den generera pseudo-slumptal
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.
Talmängder N = {0,1,2,3,...} C = {a+bi : a,b R}
Moment 1..1, 1.., 1..4, 1..5 Viktiga exempel 1., 1.4, 1.8 Övningsuppgifter I 1.7, 1.8, 1.9 Extrauppgifter 1,,, 4 Den teori och de exempel, som kommer att presenteras här, är normalt vad jag kommer att
Föreläsning Datastrukturer (DAT036)
Föreläsning Datastrukturer (DAT036) Nils Anders Danielsson 2012-11-13 Idag Mer om grafer: Topologisk sortering. Kortaste vägen. Bredden först-sökning. Dijkstras algoritm. Floyd-Warshall. Topologisk sortering
Ö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,
y y 1 = k(x x 1 ) f(x) = 3 x
Räta linjen på olika former Här ska vi bara påpeka att förutom k-form, den som vi är mest vana vid y = k y + m finns också allmän form: ax + by + c = 0 där a och b är konstanter, som inte någon står för
Uppgifter till praktiska tentan, del A. (7 / 27)
Uppgifter till praktiska tentan, del A. (7 / 27) I. Sortering/Sökning: III II. Representation/Omvandling/format/protokoll: II III. Strukturering: II I alla problem, där bokstäver förekommer, antar vi att
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
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
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
Laboration: Whitebox- och blackboxtesting
Tilda11 höstterminen 2011 Laboration: Whitebox- och blackboxtesting Mål med laborationen Du ska lära dig begreppen white-box testing och black-box testing Du ska öva dig på att konstruera testfall Du ska
Algoritmer och datastrukturer, föreläsning 11
lgoritmer och datastrukturer, föreläsning 11 enna föreläsning behandlar grafer. En graf har en mängd noder (vertex) och en mängd bågar (edge). Ett exempel är: E F G H Z enna graf har följande mängd av
Problemlösning. Veckodagsproblemet Gissa talet Siffersumman
Problemlösning Veckodagsproblemet Gissa talet Siffersumman Veckodagsproblemet Vi vill skriva ett program som kan berätta för oss vad det är för veckodag om x dagar. Arbetsgång Förstå problemet Strukturera
Programmering A C# VT 2010. Ett kompendie över Programmering A (50p) i c# Stefan Fredriksson 2010 02 08
Programmering A C# VT 2010 Ett kompendie över Programmering A (50p) i c# Stefan Fredriksson 2010 02 08 Innehåll Hjälp och referenser... 3 Kap 1 Introduktion... 3 Steg för steg... 3 Kapitel 2 Variabler...
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
Tentamen Datastrukturer, DAT037 (DAT036)
Tentamen Datastrukturer, DAT037 (DAT036) Datum, tid och plats för tentamen: 2017-08-17, 8:30 12:30, M. Ansvarig: Fredrik Lindblad. Nås på tel nr. 031-772 2038. Besöker tentamenssalarna ca 9:30 och ca 11:00.
Föreläsning 1. Introduktion och sökning i graf. Vad är en algoritm?
Föreläsning 1. Introduktion och sökning i graf Vad är en algoritm? Först: Vad är ett problem? Består av indata och ett mål. Indata: [En beskrivning av en struktur.] Mål: [Kan vara Ja/Nej, ett tal eller
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 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:
KTH STH TENTAMEN. HI1024:TEN2 - Praktisk tentamen Tid: 8-13, den 18 februari 2012
KTH STH TENTAMEN HI1024:TEN2 - Praktisk tentamen Tid: 8-13, den 18 februari 2012 Gamla kurskoder: HI1900, 6E2950, etc. Examinator: Johnny Panrike Rättande lärare: Nicklas Brandefelt, Johnny Panrike och
Grafer, allmänt. Med datastrukturen graf menas vanligen: en mängd av noder (vertices) och en mängd av bågar (edges).
Grafer, allmänt Allmänt Med datastrukturen graf menas vanligen: en mängd av noder (vertices) och en mängd av bågar (edges). En graf kan vara riktad (directed) eller oriktad (undirected). En graf kan vara
Föreläsning Datastrukturer (DAT036)
Föreläsning Datastrukturer (DAT036) Nils Anders Danielsson 2013-11-13 Idag Grafer: Terminologi. Datastrukturer. Topologisk sortering. Kortaste vägen. Bredden först-sökning. Dijkstras algoritm. (Vi får
Giriga algoritmer och dynamisk programmering
Föreläsning 1 Giriga algoritmer och dynamisk programmering Douglas Wikström KTH Stockholm popup-help@csc.kth.se Dagens citat Using the wrong algorithm to solve a problem is like trying to cut a steak with
Lösningar och kommentarer till uppgifter i 3.1
Lösningar och kommentarer till uppgifter i.1 102 b) TB: Kör de med dessa uppgifter i det här kapitlet också? Det gör inget, jag börjar bli ganska bra på det. Vi har funktionen fx) = x x 2 24x + 1 och man
f(x) = x 2 g(x) = x3 100
När vi nu ska lära oss att skissa kurvor är det bra att ha en känsla för vad som händer med kurvan när vi sätter in stora tal. Inledningsvis är det ju polynom vi ska studera. Här ska vi se vad som händer
Regler. Betygssättning
Regler Student får lämna salen tidigast en timme efter tentans start. Vid toalettbesök eller rökpaus ska pauslista utanför salen fyllas i. All form av kontakt mellan studenter under tentans gång är strängt
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
Bakgrund. Bakgrund. Bakgrund. Håkan Jonsson Institutionen för systemteknik Luleå tekniska universitet Luleå, Sverige
Är varje påstående som kan formuleras matematiskt*) alltid antingen sant eller falskt? *) Inom Institutionen för systemteknik Luleå tekniska universitet Luleå, Sverige Exempel: 12 = 13 nej, falskt n! >
Föreläsning Datastrukturer (DAT037)
Föreläsning Datastrukturer (DAT037) Nils Anders Danielsson 2015-11-20 Idag Grafer: Terminologi. Datastrukturer. Topologisk sortering. Kortaste vägen. Bredden först-sökning. Dijkstras algoritm. (Vi får
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
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
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
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
Problemlösning. Veckodagsproblemet Gissa talet Siffersumman
Problemlösning Veckodagsproblemet Gissa talet Siffersumman Veckodagsproblemet Vi vill skriva ett program som kan berätta för oss vad det är för veckodag om x dagar. Arbetsgång Förstå problemet Strukturera
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.
Lösning till fråga 5 kappa-06
Lösning till fråga 5 kappa-06 Figurer till uppgift a) ligger samlade efter uppgiften. Inledning Betrakta först N punkter som tillhör den slutna enhetskvadraten inlagd i ett koordinatsystem enligt figur
Instruktioner - Datortentamen TDDD73 Funktionell och imperativ programmering i Python
Instruktioner - Datortentamen TDDD73 Funktionell och imperativ programmering i Python Hjälpmedel Följande hjälpmedel är tillåtna: Exakt en valfri bok, t.ex. den rekommenderade kursboken. Boken får ha anteckningar,
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 (
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 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
UPPGIFT 2 KVADRATVANDRING
UPPGIFT 1 LYCKOTAL Lyckotal är en serie heltal, som hittas på följande sätt. Starta med de naturliga talen: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13... Sök upp det första talet i serien, som är större
4 Fler deriveringsregler
4 Fler deriveringsregler 4. Dagens Teori Derivatan av potensfunktioner. Potensfunktioner med heltalsexponenter, som du redan kan derivera, kallas polynomfunktioner, som till exempel: f(x) = 2x4 x3 + 2x
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
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