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



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

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

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

Data- och programstrukturer

Tentamen i Algoritmer & Datastrukturer i Java

Symboliska konstanter const

Tentamen Datastrukturer, DAT037 (DAT036)

Föreläsning 9 Innehåll

TDDC74 Programmering: Abstraktion och modellering Tentamen, onsdag 9 juni 2016, kl 14 18

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

Tentamen Datastrukturer för D2 DAT 035

Tentamen i Algoritmer & Datastrukturer i Java

Tentamen Datastrukturer (DAT036)

TENTAMEN: Algoritmer och datastrukturer. Läs detta! Uppgifterna är inte avsiktligt ordnade efter svårighetsgrad.

Föreläsning Datastrukturer (DAT036)

Föreläsning 5. Träd Binära träd Binärt sökträd som ADT Implementering av binärt sökträd Travestera binärt sökträd Sökning Insättning/borttagning

Föreläsning 14 Innehåll

Tentamen Datastrukturer (DAT036/DAT037/DIT960)

if (n==null) { return null; } else { return new Node(n.data, copy(n.next));

BINÄRA TRÄD. (X = pekarvärdet NULL): struct int_bt_node *pivot, *ny; X X X 12 X X 12 X X -3 X X

Tentamen Datastrukturer (DAT037)

Kompilatorer och interpretatorer

Dugga Datastrukturer (DAT036)

Föreläsning 9 Datastrukturer (DAT037)

Tentamen DE12, IMIT12, SYST12, ITEK11 (även öppen för övriga)

Tentamen Datastrukturer (DAT036)

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

OMTENTAMEN I DATASTRUKTURER OCH ALGORITMER DVG B kl. 09:00 14:00

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

Det är principer och idéer som är viktiga. Skriv så att du övertygar rättaren om att du har förstått dessa även om detaljer kan vara felaktiga.

Lösningar Datastrukturer TDA

Grundläggande programmering med C# 7,5 högskolepoäng

Föreläsning 7. Träd och binära sökträd

Tentamen Datastrukturer D DAT 035/INN960

TDDC74 Programmering: Abstraktion och modellering Tentamen, lördag 27 augusti 2016, kl 8 12

TDDC74 Programmering: Abstraktion och modellering Datortenta , kl 14-18

TENTAMEN I DATASTRUKTURER OCH ALGORITMER DVG B kl. 14:00-19:00

Inlämningsuppgift MiniPlotter

TDDC74 Programmering: Abstraktion och modellering Datortenta , kl 14-18

Tentamen TEN1 HI

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

Föreläsning 4. Kö Implementerad med array Implementerad med länkad lista Djup kontra bredd Bredden först mha kö

Tentamen ges för: Tentamensdatum: Tid:

Tentamen i. TDDC67 Funktionell programmering och Lisp

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

TDDC30 Programmering i Java, datastrukturer och algoritmer

Programmering II (ID1019) :00-12:00

DAI2 (TIDAL) + I2 (TKIEK)

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

Lösningsförslag till exempeltenta 1

Programmering II (ID1019) :00-17:00

Föreläsning 4 Datastrukturer (DAT037)

Föreläsning 7 Innehåll. Rekursion. Rekursiv problemlösning. Rekursiv problemlösning Mönster för rekursiv algoritm. Rekursion. Rekursivt tänkande:

Programmering för Språkteknologer II. Innehåll. Associativa datastrukturer. Associativa datastrukturer. Binär sökning.

Tentamen *:58/ID100V Programmering i C Exempel 3

Skriv i mån av plats dina lösningar direkt i tentamen. Skriv ditt kodnummer längst upp på varje blad.

Recap Mera om nya typer Kort Fält. Programmering. Sommarkurs Verónica Gaspes. IDE-sektionen.

Föreläsning 7. Träd och binära sökträd

TDDC74 Programmering, abstraktion och modellering. Tentamen

Länkade strukturer, parametriserade typer och undantag

Länkade listor kan ingå som en del av språket, dock ej i C Länkade listor är ett alternativ till:

Lösningsförslag till tentamen Datastrukturer, DAT037,

Tentamen (del 2) (4 högskolepoäng) i Programkonstruktion och datastrukturer (1DL201)

Tentamen Datastrukturer, DAT037 (DAT036)

Provmoment: Omtentamen 1 (dvs salstentamen 2) för kursen under LP4, TS1A, 21TS1U (VT14P4) Tentamen ges för: För fastighetsmäklare (FM12)

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

TENTAMEN: Algoritmer och datastrukturer. Läs detta!

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

Johan Karlsson Datavetenskap för teknisk kemi, 10p, moment 1 Datavetenskap Umeå Universitet. Tentamen

Tillämpad Programmering (ID1218) :00-13:00

TDDC91 & TDDE22 & 725G97 Datastrukturer och algoritmer Datortentamen (DAT1) , 08 12

Grundläggande programmering med C# 7,5 högskolepoäng. Provmoment: Ladokkod: Tentamen ges för: TEN1 NGC011 ADAEK17, ASYST17 samt öppen för alla

Lägg uppgifterna i ordning. Skriv uppgiftsnummer och din anmälningskod överst i högra hörnet på alla papper.

Tentamen, Algoritmer och datastrukturer

Underkänt 0-29oäng Godkänt poäng Väl godkänt poäng

Föreläsning Datastrukturer (DAT036)

Tentamen Programmeringsteknik II och NV2 (alla varianter) Skriv bara på framsidan av varje papper.

Programkonstruktion och. Datastrukturer

public boolean containskey(string key) { return search(key, head)!= null; }

Föreläsning 9 Innehåll

Tentamen Datastrukturer D DAT 036/INN960

TDDC30/725G63. Objektorienterad programmering i Java, datastrukturer och algoritmer

Försättsblad till skriftlig tentamen vid Linköpings Universitet

Tentamen Datastrukturer D DAT 035/INN960

Provmoment: TEN1 Ladokkod: NGC011 Tentamen ges för: Tentamen DE14, IMIT14 och SYST14 samt öppen för alla

Föreläsning 4 Datastrukturer (DAT037)

TDDC74 Programmering: Abstraktion och modellering Tenta, kl 14 18, 11 juni 2014

Lösningsförslag. Programmeringsmetodik, KV: Java och OOP. 17 januari 2004

Datastrukturer i kursen. Föreläsning 8 Innehåll. Träd rekursiv definition. Träd

Tentamen Datastrukturer D DAT 035/INN960 (med mycket kortfattade lösningsförslag)

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

KTH, NADA, Vahid Mosavat. 1. Flervalsfrågor (5p)

Provmoment: Omtentamen 2 (dvs salstentamen 3) för kursen under LP4, TS1A, 21TS1U (VT14P4) Tentamen ges för: För fastighetsmäklare (FM12)

Tildatenta Lösningsskiss

DAT043 Objektorienterad Programmering

Tentamen i Algoritmer & Datastrukturer i Java

tentaplugg.nu av studenter för studenter

Sökning. Översikt. Binärt sökträd. Linjär sökning. Binär sökning. Sorterad array. Linjär sökning. Binär sökning Hashtabeller

TDDC74 Programmering: Abstraktion och modellering Tentamen, lördag 29 augusti 2015, kl 8 12

Föreläsningsanteckningar, Introduktion till datavetenskap HT S4 Datastrukturer. Tobias Wrigstad

Transkript:

Data- och Programstrukturer Provmoment: Ladokkod: Tentamen ges för: Tentamen NDP011 Systemarkitektprogrammet 7,5 högskolepoäng Namn: (Ifylles av student) Personnummer: (Ifylles av student) Tentamensdatum: 2014-06-04 Tid: 09.00 13.00 Hjälpmedel: Inga hjälpmedel Totalt antal poäng på tentamen: För att få respektive betyg krävs: G >= 22 VG >= 34 45 poäng Allmänna anvisningar: Numrera sidorna samt börja varje ny uppgift på nytt blad. Skriv personnummer på försättsblad och alla inlämnade sidor. Var tydliga, kortfattade och konkreta i era svar. Skriv tydligt (oläsligt = fel)! På programmeringsuppgifterna är principen viktigare än syntaxen. Poängavdrag kan ges för onödigt komplicerade eller ostrukturerade lösningar. Kommandon från bibliotek (även Roberts) får normalt användas fritt. Om du är osäker skriv ner vad kommandot förväntas göra. Inkluderingar behöver aldrig anges om det inte framgår av frågan. Rättningstiden är som längst tre veckor Viktigt! Glöm inte att skriva namn på alla blad du lämnar in. Lycka till! Ansvarig lärare: Anders Gidenstam Karl Jansson Telefonnummer: 033 435 4214 033 435 4399

1. Definiera och förklara följande: a) Lastfaktor är ett begrepp som används i kontexten av en hashtabell. Definiera vad lastfaktorn för en hashtabell är och Förklara hur den kan påverkar hashtabellen positivt och/eller negativt. (2p) b) Definiera de grundläggande delar och steg som krävs för att skapa en rekursiv funktion. (1p) c) Ett binärt sökträd är beroende av att trädet är balanserat för att upprätthålla en god tidskomplexitet. Stämmer detta också för en hög (eng. heap) eftersom denna också har en trädstruktur? Förklara varför eller varför inte trädbalans också är relevant för högar. (1p) 2

2. Spelet Nim går ut på att plocka 1-3 mynt ifrån en stapel av mynt och undvika att vara den som tvingas plocka upp det sista myntet. En AI till spelet kan implementeras rekursivt med följande funktioner: #define NOGOODMOVE -1 #define MAXTAKE 3 int findgoodmove(int ncoins){ int ntaken; for(ntaken=1;ntaken<=maxtake; ntaken++){ if(isbadposition(ncoins-ntaken)) return ntaken; return NOGOODMOVE; bool IsBadPosition(int ncoins){ if(ncoins==1) return true; return(findgoodmove(ncoins) == NoGoodMove); int choosecomputermove(int ncoins){ int ntaken; ntaken=findgoodmove(ncoins); if(ntaken==nogoodmove) ntaken=1; return ntaken; Visa i ord och bild hur följande anrop till choosecomputermove beräknas: choosecomputermove(4); En lämplig nivå är att visa vilka funktionsanrop som sker, deras argument samt returvärden. (3p) 3

3. En nod i en labyrint definieras på följande sätt: typedef struct maznode{ maznode connections[4]; bool visited; bool exitnode; *maznode; Om en viss koppling (connections[x]) är en vägg så definieras detta med en NULL-pekare. Skriv en rekursiv funktion som hittar en exit-nod givet en start-nod med följande funktionsprototyp: maznode findexit(maznode node); Om ingen exit-nod kan hittas skall NULL returneras. Fältet visited i maznode skall användas för att undvika onödiga rekursiva anrop. Ni behöver inte definiera en labyrint, enbart funktionen för att söka i en. Ni får använda hjälpfunktioner och liknande, problemet går dock att lösa med endast en rekursiv funktion. (7p) 4

4. Betrakta följande rekursiva funktion: int BinarySearch(string key, string array[],int low, int high) { int mid, cmp; if (low > high) return (-1); mid = (low + high) / 2; cmp = StringCompare(key, array[mid]); if (cmp == 0) return (mid); if (cmp < 0) { return (BinarySearch(key, array, low, mid - 1)); else { return (BinarySearch(key, array, mid + 1, high)); a) Funktionen ovan är svans-rekursiv (eng. tail-recursive). Definiera vad som menas med att en rekursiv funktion är svans-rekursiv och Förklara vilka fördelar detta medför för kompilatorn. (3p) b) Beskriv i en mening den rekursiva idén bakom den ovanstående funktionen. (1p) c) Ange tidskomplexiteten (i form av ett Ordo-uttryck) för BinarySearch med avseende på N där N är antalet element i arrayen som sökningen utförs på. (2p) 5

5. En symboltabell (eng. dictionary/map) är en abstrakt samlingsdatatyp (ADT) med (bland annat) operationerna void Insert(symtabADT table, string key, void *value) Sätter in angivet nyckel, värde par (key, value) i symboltabellen. Om nyckeln redan finns så uppdateras det associerade värdet till value. void* Lookup(symtabADT table, string key) Slår upp nyckeln (key) i symboltabellen och returnerar värdet som hör ihop med den eller konstanten NOT_FOUND om värdet inte finns. a) Förklara i ord och bild hur man kan implementera en symboltabell med ovanstående två operationer med en hashtabell (eng. hash table) som växer vid behov. Ange och motivera även respektive operations tidskomplexitet (worst-case) uttryckt i antalet element i symboltabellen, N. (3p) b) Förklara i ord och bild hur man kan implementera en symboltabell med ovanstående två operationer med ett balanserat binärt sökträd (eng. balanced binary search tree). Ange och motivera även respektive operations tidskomplexitet (worst-case) uttryckt i antalet element i symboltabellen, N. (3p) Tips a) och b): En före och efter bild av hur datastrukturen ser ut i minnet med förklaring av ej uppenbara förändringar är en lagom nivå för att visa hur en operation fungerar i uppgift a) och b), kod behövs inte där. c) Ange en typedeklaration i C för symtabcdt och eventuella hjälpstrukturer som behövs för en symboltabell implementerad som en hashtabell som växer vid behov i C. (2p) d) Implementera funktionen void Insert(symtabADT table, string key, void *value) för en symboltabell implementerad som en hashtabell i C. Du kan anta att den interna funktionen int Hash(string s, int nbuckets); beräknar hashkoden (mellan 0 och nbuckets - 1) för nyckelsträngen s. Var noggrann med avseende på specialfall och minneshantering. (5p) 6

6. En kalkylapplikation skall hantera beräkning av godtyckliga heltalsuttryck beskrivna av grammatiken E -> T1 + E E -> T1 E E -> T1 T1 -> T2 * T T1 -> T2 / T T1 -> T2 T2 -> (E) T2 -> integer Ett exempel på heltalsuttryck är (1 + 7) * 3 + 1 som evaluerar till 25. En modul har skapats för att implementera en abstrakt datatyp expadt för att representera abstrakta syntaxträd för heltalsuttryck. typedef enum { ConstantType, CompoundType exptypet; typedef struct expcdt *expadt; // Konstruktorfunktioner expadt NewConstantExp(int i); expadt NewCompoundExp(char op, expadt lhs, expadt rhs); // Selektorfunktioner exptypet ExpType(expADT exp); int ExpConstant(expADT exp); char ExpOperation(expADT exp); expadt ExpLHS(expADT exp); expadt ExpRHS(expADT exp); a) Föreslå en konkret representation för värden av typ expcdt i form av en typdefinition i C för en struct av formen tagged union som passar med gränssnittet ovan. (4p) 7

b) Implementera funktionen int evalexp(expadt exp); som beräknar heltalsvärdet av ett abstrakt syntaxträd för ett heltalsuttryck enligt ovan. Funktionen skall arbeta mot gränssnittet för expadt utan kännedom om den faktiska implementationen. (4p) c) En modul för att parsa en sekvens av token till ett abstrakt syntaxträd innehåller följande parser-funktioner: expadt ReadE(scannerADT scanner); expadt ReadT1(scannerADT scanner); expadt ReadT2(scannerADT scanner); som tar hand om respektive symbol med motsvarande namn i grammatiken ovan. Din uppgift är att implementera funktionen expadt ReadE(scannerADT scanner); som skall arbeta mot gränssnittet för expadt utan kännedom om den faktiska implementationen. Om ett syntaxfel upptäcks skall funktionen void Error(string msg) anropas vilken antas avbryta programmet. Du skall också anta att de andra funktionerna (readt1 och readt2) är färdiga och kan användas vid behov. (4p) scanneradt stöder (bl.a.) följande operationer: string ReadToken(scannerADT scanner); bool MoreTokensExist(scannerADT scanner); void SaveToken(scannerADT scanner, string token); 8