Tentamen i EDAF05 Algoritmer, datastrukturer och komplexitet 7 juni 2019, 8-13 Du får svara på engelska, på svenska, auf Deutsch, или по-русски. Examinator: Jonas Skeppstedt 30 av 60p behövs för betyg 3. Instruktioner Ta med sig. Som hjälpmedel får du använda en bok om datavetenskap och en ordbok. Det är tillåtet att ha gjort anteckningar i dessa böcker, men inga andra papper är tillåtna. Du får inte använda elektroniska hjälpmedel såsom bärbar dator eller mobiltelefon. Om du verkligen vill kan du ta med en fickräknare men jag tror inte du har någon nytta av en sådan. Svara frågor. Några frågor är flervalsfrågor. Markera rutan med ett kryss. Om du ångrar dig, fyll i hela rutan och skriv svarets bokstav i den vänstra marginalen. Skriv tydligt eftersom jag inte rättar oläslig text (detta är speciellt viktigt om du svarar på ryska). Var noga med att vara entydig så att det inte går att missförstå vad du menar. Poängsättning. För frågorna med fri text får man mellan noll och maxpoängen på den frågan. Skriv helst korta svar. Man kan dock få minuspoäng på flervalsfrågorna. Varje flervalsfråga har exakt ett rätt svar. För att få högst poäng ska du markera detta, och endast detta svarsalternativ. Ifall du är osäker kan du dock markera fler alternativ (men få färre poäng) och om du inte alls är säker är det bäst att inte markera något alternativ. Om du markerar alla eller inget alternativ blir det noll poäng. Det sämsta man kan göra är att markera alla utom det korrekta alternativet. T.ex antag att en fråga är värd högst 2 poäng och har k = 4 svarsalternativ (varav ett är korrekt). Om du endast markerar det rätta alternativet får du 2 poäng. Om du markerar två alternativ varav ett är rätt får du 1 poäng. Om du markerar tre alternativ varav ett är rätt får du 0.41 poäng. Om du markerar inget eller alla alternativ får du noll poäng. Om du markerar ett alternativ, och det är fel, får du 0.67 poäng. Om du markerar två alternativ, och båda är fel, får du 1 poäng. Om du markerar tre alternativ, och alla är fel, får du 1.25 poäng. Som specialfall, för en ja/nej-fråga, får du 1, 0 eller 1 poäng, beroende på om ditt svar är rätt, blankt eller fel. Den exakta formeln är: om en fråga har k alternativ och du markerade a rutor, blir din poäng log(k/a) om du markerade rätt alternativ och a log(k/a)/(k a) om du bara markerade fel alternativ. Jag har viktat frågorna med avseende på hur relevanta de är (inte nödvändigtvis deras svårighet) och angivit högsta poäng vid varje fråga. Om du vill läsa mer om varför detta system är rimligt, läs Gudmund Skovbjerg Frandsen, Michael I. Schwartzbach: A singular choice for multiple choice. 38(4): 34 38 (2006). T.ex blir det noll poäng i genomsnitt om du bara gissar. SIGCSE Bulletin 1
Transporter Mindre än en månad efter EU-valet i maj upptäcktes det att de nyvalda parlamentsledamöterna hade haft för lite fokus på miljöfrågor jämfört med deras fokus på andra mindre viktiga frågor. Detta ledde till nyval i juli i vilket Greta Thunbergs mycket populära parti vann mer än 70 % av parlamentsplatserna. En av hennes första beslut var att vidta åtgärder för att reducera CO 2 utsläpp orsakade av smutsiga transporter. Hennes förslag är helt enkelt att varje stad ska ersätta alla typer av transporter t till eller från sina grannar om t förorenar för mycket med rena transporter, genom att förbjuda de smutsiga. Därför vill hon få så många städer som möjligt att stödja hennes förslag. Hon upptäcker dock snabbt att alla städer hellre vill förorena luften och fortsätta som vanligt. Hennes strategi är därför att besöka städer och uppmuntra invånarna att stödja henne. Eftersom hon inte vill besöka alla städer och har begränsad tid börjar hon i Lund och ber studenter om hjälp med att skriva ett program för att välja städer att besöka (i vilken ordning som helst). Greta kommer sedan att besöka en stad varje helg (och åka tillbaka till Bryssel eller Strasbourg mellan besöken) tills alla transporter i EU är rena. Problem: Är det möjligt att få EU att endast använda rena transporter innan nästa val om n veckor under antagandet att hon besöker en stad varje vecka och efter hon besökt en stad kommer denna att stödja hennes förslag. Greta har en karta med alla vägar mellan städer. Example 1 Indata: Veckor till nästa val: 3 Städer: 4 1 -- 2 2 -- 3 3 -- 4 4 -- 1 Utdata: ja Det ingår inte i svaret men om Greta besöker vilka tre städer som helst och vi antar att de ändrar sig kommer alla transporter att vara rena. Example 2 Indata: Veckor till nästa val: 2 Städer: 6 1 -- 2 2 -- 3 3 -- 4 4 -- 5 5 -- 6 6 -- 3 Output: omöjligt 2
Städer För att hjälpa städer att förbättra luften lanserar Greta projektet hjälp din granne. Varje stad ska bli expert på ett av två kompetensområden, använda kunskapen i sin stad och sedan hjälpa grannstäder. Några städer ska fokusera på att rena luften med filter och kallas gula städer och andra ska minska utsläpp och kallas blåa städer. Problem: Givet en karta med vägar mellan städer, är det möjligt att tilldela varje stad antingen gul eller blå märkning utan att två grannstäder får samma färg? Exempel För båda indata till Transporter är svaret ja, men inte för indatan nedan. Indata: Städer: 6 1 -- 2 2 -- 3 3 -- 4 4 -- 5 5 -- 6 6 -- 1 6 -- 2 6 -- 3 Utdata: omöjligt 3
Bussar Autonoma självkörande bussar skulle kunna vara ett bra alternativ att undersöka, sa Greta till sin minister för smart teknik. Sverige har redan minst pilotprojekt för detta, svarade ministern. Jag undrar hur många rader med säten sådana bussar borde ha? frågade Greta. Med för få är det onödigt och uppenbarligen ger vägkurvor och antalet intresserade resenärer en övre gräns. Ministern, skulle du vilja välja en lämplig stad och beräkna hur stora bussar det skulle vara bra att ha där sa Greta till ministern. OK,... svarade ministern och började genast planera. Jag ska be min stab i uppgift att beräkna effekten på miljön med olika busstorlekar. Naturligtvis måste bussarna vara bekväma så att folk kommer att använda dem... tänkte ministern. Efter några dagar kom ministern tillbaka och visade upp beräkningarna. Givet en tabell där rad i visar den förväntade positiva effekten på miljön om en buss har i rader med säten, och vi anslår totalt n rader med säten för projektet, kan vi skriva ett program för att ta reda på de bästa storlekarna att använda. Vad bra! Är du klar med programmet? frågade Greta. Snart, tror jag. Problem Givet en tabell med n rader, 1 n 1000, där varje rad i anger den förväntade positiva effekten på miljön som man får genom att tillverka en buss med i rader med säten, avgör vilka bussar som borde tillverkas för att få maximal nytta för miljön, givet att du har n rader med säten till förfogande. Exampel Indata: Totalt antal rader med säten: 5 antal rader med säten i en buss nytta 1 1 2 4 3 5 4 7 5 4 Utdata: tillverka 1 buss med 2 rader och 1 buss med 3 rader för att få positiv effekt 9. Att istället tillverka en buss med 5 rader skulle bara ge positiv effekt 4. 4
Cykla Efter några månader i Strasbourg och Bryssel beräknade Greta vilken miljöpåverkan det har att flytta all personal mellan städerna varje månad och diskuterade med partikollegor hur de kunde använda resurserna som går åt för detta på ett bättre sätt eller om detta faktiskt är det bästa för världen (vilket de vid första åtanke misstänker att det inte är). För att få allmänheten engagerad i denna fråga bestämde de sig för att cykla från Bryssel till Strasbourg, vilket är ett avstånd på cirka 540 km på vägar lämpliga för detta. De bestämde sig för att alltid cykla söderut i meningen att om de är på en plats u kan de endast cykla till en plats v som är på en koordinat söder om u (men en del av en väg får mellan u och v får gå i nordlig riktning). Dessutom bestämde de sig för att cykla på olika vägar för att så många människor som möjligt ska se dem, och de vill vara så många som möjligt som cyklar. Det finns ingen gräns på hur många som kan komma till samma plats men de måste då använda olika vägar till och från denna plats. Hon vänder sig nu till sin nyutnämnde algoritmsakkunnige för att ta reda på vilka cykelplaner de ska göra. Problem: Gör en plan för att cykla från Bryssel till Strasbourg enligt reglerna ovan så att så många som möjligt kan vara med. Exempel Indata: En lista med platser med ett namn och en (x, y) koordinat (där högre värden på x betyder längre österut och högre värden på y betyder längre norrut). Den första raden är Bryssel (dvs. A) och den sista är Strasbourg (dvs. F), följt av vägar mellan platserna. Alla vägar är dubbelriktade. A: 4,5 B: 3,4 C: 3,2 D: 5,3 E: 6,2 F: 7,1 A -- B A -- E B -- C C -- D D -- E D -- F E -- F Utdata: 1 person En person som cyklar från A till B till C kommer inte att kunna fortsätta till D eftersom D är norr om C så bara en person som cyklar från A till E till F kommer att kunna nå F. 5
Stadssiluett För att använda solenergi mer effektivt kan vi sätta fast solpaneler inte bara på taken utan även på sidorna på byggnader, speciellt eftersom vi är långt ifrån ekvatorn sade Greta. Därför, för att effektivt kunna placera ut nya byggnader och deras paneler är det lämpligt att ha en ritning över alla nuvarande byggnader. Ministern för smarta teknologier kunde dock inte komma på hur en sådan skulle kunna göras och förvånad över detta bad Greta ministern att först försöka göra en enklare tvådimensionell ritning. OK, jag ska göra det svarade ministern. Figure 1: Denna figur innehåller mer komplicerade objekt än för detta problem men stadssiluetten är där svart och vitt möts. Problem: Givet en mängd byggnader, vilka från sidan alla ser ut som rektanglar, skapa en sekvens av linjesegment så att sekvensen visar stadssiluetten för alla byggnaderna. Varje byggnad är beskriven av sin lägre vänstra och sin övre högra koordinat, i två dimensioner. Två byggnader kan överlappa varandra, dvs, helt eller delvis skymma en annan byggnad. Indata består av rader med tre tal: den vänstra x-koordinaten, den högra x-koordinaten och den högra y-koordinaten. Den vänsta y-koordinaten är alltid noll. Så 1,2,3 betyder en rektangel som beskrivs av koordinaterna x = 1, y = 0 och x = 2, y = 3. Den högra x-koordinaten är alltid större än den vänstra x-koordinaten och den högra y-koordinaten är alltid större än noll. Exempel indata: 0,4,3 0,2,2 1,3,4 3,6,4 Exempel utdata: 0,0-0,3-1,3-1,4-2,4-2,3-3,3-3,4-6,4-6,0 6
Tentamensfrågor Pseudokod. Pseudokod är vanigtvis att föredra över källkod i något programspråk. Syftet är, så klart, att beskriva viktiga ideer så enkelt som möjligt. Skriv inte kod som parsar indata utan säg istället, t.ex. lägg varje ord från indata i ett fält (om du vill göra det). Algoritmanalys 1. Låt f (n) = 2 n. Sant eller falskt? (a) (2p) f (n) = O(2 2n ) A sant B falskt 2. Låt f (n) = 2 n+1. Sant eller falskt? (a) (2p) f (n) = O(2 n ) A sant B falskt 3. Låt f (n) = 2 2n. Sant eller falskt? (a) (2p) f (n) = O(2 n ) A sant B falskt 4. En fördel med Hollow heaps över vanliga fältbaserade heapar är att man kan sätta in ett nytt element på konstant värstafallstid i en Hollow heap. Sant eller falskt? (a) (1p) A sant B falskt 5. Betrakta funktionen pow, som beräknar a n för n 0. int pow(int a, int n) { if (n == 0) return 1; else if (n % 2 == 0) return pow(a, n/2) * pow(a, n/2); else return a * pow(a, n/2) * pow(a, n/2); } (a) (3p) Tidskomplexiteten för pow är välj den minsta korrekta uppskattningen. A O(log n) B O(n) C O(n log n) C O(n 2 ) 7
6. Grafsökning. Ett av problemen är lämpligt att lösa med enkel grafsökning. (a) (4p) Vilket? (b) (3p) Motivera ditt svar. 7. Söndra-och-härska. Ett av problemen är lämpligt att lösa med hjälp av söndra-och-härska. (a) (4p) Vilket? (b) (2p) Förklara kortfattat, i en mening och ingen kod, en enkel algoritm med tidskomplexiteten O(n 2 ) som löser problemet. (c) (4p) Förklara kortfattat, i en mening och ingen kod, en snabbare algoritm som löser problemet. Motivera varför denna algoritm är snabbare än O(n 2 ) algoritmen och ange dess tidskomplexitet. 8. Dynamisk programmering. Ett av problemen är lämpligt att lösa med dynamisk programmering. (a) (4p) Vilket? (b) (7p) Beskriv din lösning i pseudokod. (c) (4p) Vad är tidskomplexiteten för din lösning? 9. Nätverksflöde. Ett av problemen är lämpligt att lösa genom en reduktion till nätverksflöde. (a) (4p) Vilket? (b) (4p) Förklara hur och visa med ett exempel. 10. Beräkningskomplexitet. Ett av problemen är NP-fullständigt 1. (a) (4p) Vilket? Kalla det P 1. (b) (2p) Det enklaste sättet att se det är att reducera från P 2 där P 2 är A k-färgning B 3-SAT C Hamiltonsk cykel D Nodövertäckning E Oberoende mängder (c) (1p) och visa: A P 1 P P 2 B P 2 P P 1 (d) (3p) Visa reduktionen på ett separat papper. Gör det både i det generella fallet och för ett litet men komplett exempel. Var speciellt noga med vilken instans som är given och vilken instans som konstrueras av reduktionen, parametrarna för instansen du skapar (t.ex antal noder, kanter, mängder eller färger) i termer av parametrarna för den ursprungliga instansen, vad en lösning i den skapade instansen betyder i termer av den ursprungliga instansen, osv. Börja ditt svar med orden Givet en instans av problemet..., Njut av sommaren! 1 Om P = NP så är alla problemen i tentan NP-fullständiga. Så för att undvika hypotetiskt korrekta men onödiga svar, antar denna fråga att P NP. 8
Noter och felaktigheter Jag har uppenbarligen ingen aning om Greta Thunbergs synpunkter på någonting i denna tenta. Också uppenbart har denna tenta inga politiska budskap. 9