Föreläsningar dec 3, dec 4 v 49. GT Chapter 5 GT Chapter 6

Relevanta dokument
TDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 4 Erik Nilsson, Institutionen för Datavetenskap, LiU

Föreläsning 1 Datastrukturer (DAT037)

TDDE10 m.fl. Objektorienterad programmering i Java Föreläsning 6 Erik Nilsson, Institutionen för Datavetenskap, LiU

Föreläsning 3. Stack

Föreläsning 3: Abstrakta datastrukturer, kö, stack, lista

Föreläsning 6: Introduktion av listor

Föreläsning 8: Exempel och problemlösning

Föreläsning 3. Stack

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

Listor. Koffman & Wolfgang kapitel 2, avsnitt , och 2.9

TDDE10 m.fl. Objektorienterad programmering i Java Föreläsning 6 Erik Nilsson, Institutionen för Datavetenskap, LiU

Tentamen Programmering fortsättningskurs DIT950

Länkade strukturer, parametriserade typer och undantag

Föreläsning 4. ADT Kö Kö JCF Kö implementerad med en cirkulär array Kö implementerad med en länkad lista

Föreläsning 2 Datastrukturer (DAT037)

Vad kännetecknar en god klass. Vad kännetecknar en god klass. F12 Nested & Inner Classes

Föreläsning 2. Länkad lista och iterator

Föreläsning 2 Datastrukturer (DAT037)

Att skriva till och läsa från terminalfönstret

Länkade strukturer. (del 2)

TENTAMEN PROGRAMMERING I JAVA, 5P SOMMARUNIVERSITETET

1. Compute the following matrix: (2 p) 2. Compute the determinant of the following matrix: (2 p)

Tentamen i Algoritmer & Datastrukturer i Java

SI-pass 4. Johan Brook och Jesper Persson. 25 september Diskutera och svara på om påståendena nedan är äkta sanningar eller listiga lögner.

Tentamen. 2D4135 vt 2005 Objektorienterad programmering, design och analys med Java Lördagen den 28 maj 2005 kl

Föreläsning 2. Länkad lista och iterator

TDDC30. Kursledning Kursledare: Jonas Lindgren. Labassistent: Jonas Lindgren Labassistent: Niklas Holma Labassistent: Erik Nilsson

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

Tommy Färnqvist, IDA, Linköpings universitet

Föreläsning 3 Datastrukturer (DAT037)

Föreläsning 3 Datastrukturer (DAT037)

Föreläsning jan 15 v3, jan 22 v4. GT Chapter 6, GT Chapter 7 Hemuppgifter redovisning v4, v5.

Recitation 4. 2-D arrays. Exceptions

Dagens program. Programmeringsteknik och Matlab. Objektorienterad programmering. Vad är vitsen med att ha både metoder och data i objekten?

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

Programmering för språkteknologer II, HT2011. Rum

EDAA20 Föreläsning Klassen ArrayList. Viktiga operationer på ArrayList. Generisk klass

Tentamen i Grundläggande Programvaruutveckling, TDA548

TDA550 Objektorienterad programvaruutveckling IT, forts. kurs Övning vecka 5

Datastrukturer, algoritmer och programkonstruktion (DVA104, VT 2015) Föreläsning 6

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

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

Föreläsning 4 Innehåll

Datastrukturer. föreläsning 3. Stacks 1

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

Tentamen Objekt-orienterad programmering i Java, 5p distanskurs

Idag. Javas datatyper, arrayer, referenssemantik. Arv, polymorfi, typregler, typkonvertering. Tänker inte säga nåt om det som är likadant som i C.

Objektorienterad programmering i Java

Ett problem. Kontrollstrukturer och arrayer. Arrayer. Lösningen. Arrayer och hakparanteser. Exempel int[] results; results = new int[10]; // 0..

1. Varje bevissteg ska motiveras formellt (informella bevis ger 0 poang)

Tentamen i Algoritmer & Datastrukturer i Java

PROGRAMMERING-JAVA TENTAMINA

Föreläsning 4. ADT Kö Kö JCF Kö implementerad med en cirkulär array Kö implementerad med en länkad lista Läsanvisningar och uppgifter

Föreläsning Datastrukturer (DAT036)

Att deklarera och att använda variabler. Föreläsning 10. Synlighetsregler (2) Synlighetsregler (1)

Föreläsning 12: Exempel och problemlösning

TDDC74 Programmering: Abstraktion och modellering Dugga 2, , kl 14-16

Dagens föreläsning. Arrayer och klasser. Medan ni väntar: Gå till m.voto.se/prog11 och svara på några gamla tentamensfrågor! (26 januari 2018 F3 1 )

Tentamen, EDA501/EDAA20 Programmering M MD W BK L

Föreläsning 11: Rekursion

TENTAMEN PROGRAMMERINGSMETODIK MOMENT 2 - JAVA, 4P

PROGRAMMERING-Java Omtentamina

Exempel. Arrayer. Lösningen. Ett problem. Arrayer och hakparanteser. Arrayer

UML. Översikt UML. Relationer mellan klasser. A är ett aggregerat av B:n. Kontor aggregat av Enheter. 12 olika diagramtyper, bl.a.

Exempel på uppgifter från 2010, 2011 och 2012 års ämnesprov i matematik för årskurs 3. Engelsk version

Idag. Exempel, version 2. Exempel, version 3. Ett lite större exempel

Tentamen TEN1 HI

Det finns en referensbok (Java) hos vakten som du får gå fram och läsa men inte ta tillbaka till bänken.

LULEÅ TEKNISKA UNIVERSITET

Objektorienterad Programkonstruktion. Föreläsning 2 2 nov 2016

Dugga Datastrukturer (DAT036)

Grundläggande programmering, STS 1, VT Sven Sandberg. Föreläsning 14

LUNDS TEKNISKA HÖGSKOLA Institutionen för Elektro- och Informationsteknik

Exempelsamling Assemblerprogrammering

8 < x 1 + x 2 x 3 = 1, x 1 +2x 2 + x 4 = 0, x 1 +2x 3 + x 4 = 2. x 1 2x 12 1A är inverterbar, och bestäm i så fall dess invers.

Konstruktion av klasser med klasser

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

Examination i. PROGRAMMERINGSTEKNIK F1/TM1 TIN212 (Dugga) Dag: Onsdag Datum: Tid: (OBS 3 tim) Rum: V

Quicksort. Koffman & Wolfgang kapitel 8, avsnitt 9

Föreläsning 8 Programmeringsteknik och Matlab 2D1312/2D1305. Klass Object, instans av klass public/private Klassvariabler och klassmetoder

Föreläsning 4 Innehåll. Abstrakta datatypen lista. Implementering av listor. Abstrakt datatypen lista. Abstrakt datatyp

Fält av referenser. Konstruktorerna används för att skapa Bilar och Trafikljus.

PROGRAMMERING-Java TENTAMINA

Vad handlar kursen om? Algoritmer och datastrukturer. Vad handlar kursen om? Vad handlar kursen om?

Chapter 4: Writing Classes/ Att skriva egna klasser.

public static void mystery(int n) { if (n > 0){ mystery(n-1); System.out.print(n * 4); mystery(n-1); } }

Kompilering och exekvering. Föreläsning 1 Objektorienterad programmering DD1332. En kompilerbar och körbar java-kod. Kompilering och exekvering

DVG C01 TENTAMEN I PROGRAMSPRÅK PROGRAMMING LANGUAGES EXAMINATION :15-13: 15

Lösningsförslag, tentamen FYTA11 Javaprogrammering

Laboration 3, uppgift En klass för en räknare

Lösningsförslag till exempeltenta 2

Programmering för språkteknologer II, HT2014. Rum

Tentamen. Programmeringsmetodik, KV: Java och OOP. 17 januari 2002

Tentamen Programmeringsteknik II för STS Skrivtid: Inga hjälpmedel.

Rekursion. Att tänka rekursivt Att programmera rekursivt i Java Exempel. Programmeringsmetodik -Java 254

Preschool Kindergarten

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

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

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

OOP Objekt-orienterad programmering

Transkript:

Föreläsningar dec 3, dec 4 v 49. GT Chapter 5 GT Chapter 6 GT Kapitel 5 analogt med boken. Om implementation av NodeList: Boken argumenterar kanske inte så mycket om varför man gör som man gör. Jag tycker nog att det blir ännu tydligare om man ritar t ex första bilden i fig 5.6 så här: Listnode mylistnode numelts header trailer På heapen prev element next.... Baltimore Providence Paris Tänk också på att objekten dessutom konceptuellt (begreppsmässigt) innehåller de publika metoderna, och att det är dem man använder. Det finns en mängd val att göra när man programmerar ListNode: - Privat / Icke-privat. Många programmerare skulle nog vara "lata" och programmera klassen DNode med tre icke-privata instansvariabler och inget annat i en icke-publik klass, men läroboken och vi är ortodoxa (grekiska för renläriga). - Rekursivt programmerade metoder (funkar ofta bra med enkla datastrukturer) / Programmerering med snurror (vårt fall, viktigat med bra datastruktur) - Låta referensvariabel direkt referera första noden (urdåligt) / En klass med innehåll för NodeList och en klass för noderna (vårt fall) - Enkel-länkning / dubbel-länkning (vårt fall)

- Ej ha vaktposter / vaktposter av enkel typ (ser missvisande ut så på bilderna i boken) / vaktposter med samma typ som vanliga noder (vårt fall) - "Linjär kedja" (vårt fall ovan) / "cirkulär kedja" (min favorit, se nedan) Det finns alltså minst 2*2*2*2*3*2 = 96 sätt att implemetera ListNode, och åtskilliga varianter föreslås i olika böcker. Om man inte gått en sådan här kurs eller läser en bok med en bra implemtation så är risken stor att man gör på ett dåligt sätt, vilket lätt leder till långa och svårprogrammerade lösningar. Mitt favoritsätt att göra NodeList är att slå ihop de två extranoderna i slutet till en, som är både slutvaktpost (trailer sentinel) och startvaktpost (header sentinel), så här: Listnode mylistnode numelts sentinel På heapen. prev element next Baltimore Providence Paris Denna lösning inehåller inga null i "ringen", och man kan följaktligen inte få NullPointerException vilket är underbart (fast istället kan man ju få oändliga snurror). Fördelen med vaktpostteknik i båda fallen är ju att man slipper specialfall för sista och/eller sista noden oc/eller tom lista osv. Avbrottsvillkoret när man skriver snurror kan också förenklas. Fördelen med dubbelänkning är ju att man enklt kan röra sig "bakåt" eller "framåt", och inga problem att man vid sökning "kommer för långt" och inte kan "backa". Ännu sämre lösningar är att t ex i figuren ovan låta mylistnode referera (peka) direkt på första elementet om detta finns och låta Listnode innehålla null för tomma listor. Sådana lösningar är svårprogrammerade och skiljer dessutom inte på skapade tomma listor och oskapade listor, vilket ger en massa trubbel i användarprogrammet vid kopiering, kloning och tilldelning.

För att det inte skall bli för mycket programmering kommer jag ända att mest utgå från bokens implemtationer. Hemligeheten med att programmera med pekare är också: Rita små bilder på papper med penna! Översikt över de i Java inbyggda typerna array, java.util.vector och String: (I pappersupplagan) GT Kapitel 6 analogt med boken

Hemuppgifter redovisning v3 (preliminärt). C = 1, 6, 7 B= 2, 4, 6, 8 A = 2, 3, 5, 6, 8 Inlämning under läsperiod 3 senast måndagar klockan 12.00. 1. C-hemuppgift : Suppose that your implementation of a particular algorithm appears in Java as: for (int pass = 1; pass <= n; ++pass) { for (int index = 0; index < n; ++index) { for (int count = 1; count < 10; ++count) {... } // end for } // end for } // end for This code shows only the repetition in the algorithm, not the computations that occur within the loops. These computations, however, are independent of n. What is the order of the algorithm? Justify your answer. 2. BA-hemuppgift : Algorithm A uses 10nlogn operations, while algorithm B uses n2 operations. Determine the value n0 such that A is better than B for n>=n0. Show formally that (n+1)5 is O(n5). Prove using the basic definition of O-notation that if d(n) is O(f(n)) and e(n) is O(g(n)), then d(n)e(n) is O(f(n)g(n)). What is the order of each of the following tasks in the worst case: Computing the sum of the first n even integers by using a for loop. Displaying all n integers in an array. Displaying one array element Displaying the last element in a singly linked list. 3. A-hemuppgift : Uppgift C3-21 GT sid 132. 4. B-hemuppgift : This problem considers several ways to compute xn for some n >= 0. (a) Write an iterative method power1 to compute xn for n >= 0. (b) Write a recursive method power2 to compute xn by using the following recursive formulation: x0 = 1 xn = x * xn-1 if n > 0

(c) Write a recursive method power3 to compute xn by using the following recursive formulation: x0 = 1 xn = (xn/2)2 xn = x * (xn/2)2 if n > 0 and n is even if n > 0 and n is odd (d) How many multiplications will each of the methods power1, power2, and power3 perform when computing 332? 319? The first thing you must do is a paper and pencil calculation of these values. Then, verify your results by instrumenting your methods so that they count up these values and output them so that you can compare with your pencil and paper calculations. (e) How many recursive calls will power2 and power3 make when computing 332? 319? Do the same pencil and paper and instrumentation exercise for this part of the problem as you did in (d). (f) (Frivilligt) What is the order of the algorithm? Justify your answer. 5. A-hemuppgift Implement the abstract data type character string by using a linked list of characters. Include typical operations such as: append one string to another extract a substring find the index of the leftmost occurrence of a character in a string (frivilligt) determine whether one string is a substring of another. Implement the string so that you can obtain its length without traversing the linked list and counting. Förslag : Jag har gjort två lösningar ( dessutom har jag en lösning från tidigare år. Implementationen går säkert också att göra som en adapter till t ex NodeList, vars lösning skall göras i sista hemuppgifte): 1. en öppen kedja med enkellänkade noder. 2. en sluten cirkulär kedja med dubbellänkade noder och en sentinel som är både header och trailer (jfr förra veckan hemuppgifter) och en metod private void insertlast(char ic). Denna lösning är mycket enklare. I både fallen Jag använde klassen Node respektive DNode från boken, (finns på /info/inda01/gtch5), men modiferade dem genom att lagra char istället för Object för att slippa göra objekt av alla tecken. Som syns i exemplet nedan har jag en konstruktor som tar ett argument som är av typen String, dvs den inbyggda strängtypen, och klassen LKString har också en metod public String tostring() för utskrifter.

Exempel på körning av min lösningar : public class TestLKString { // (finns på /info/inda01/gtch5) public static void main(string [] arg) { LKString lks1 = new LKString("hej"); LKString lks2 = new LKString("san"); LKString lks3 = new LKString("Vad tar ni för valpen" + "där i fönstret"); System.out.println(lks1); System.out.println(lks2); System.out.println(lks1.appended(lks2)); System.out.println(lks3.extracted(4,10)); System.out.println("Första f vid :" + lks3.indexof( f )); try { System.out.println("Första x vid :" + lks3.indexof( x )); } catch (Exception e) { System.out.println(e.getMessage()); } System.out.println("Första V vid :" + lks3.indexof( V )); } } /* Körreultat java TestLKString hej san hejsan tar ni Första f vid :11 Character x not in LKString object Första V vid :0 Process TestLKString finished */ 6. CBA-hemuppgift : Gör uppgift C-5.17, sidan 223 i GT, i Java med hjälp av java.util.vector (dvs lagra barnens namn i java-bibliotekns inbyggda variant av bokens ADT Vector). Diskutera körtiden. Min lösning ger detta körresultat...>java HotPotato adam bertil cesar david erik fredrik Give number of potato handovers : 4 Removing erik Removing david Removing fredrik Removing bertil Removing cesar The winner is adam

7. C-hemuppgift : Gör uppgift C-5.17, sidan 223 i GT, i Java med hjälp av bokens NodeList som implementerar bokens ADT List (dvs lagra barnens namn i ett objekt av typen NodeList). Diskutera körtiden. Du kan förstås återanvända en del kod i din lösning från hemuppgift 6. På /info/inda01/gtch5/ finns klassfiler för för NodeList, List mm. Det räcker ju att kopiera klassfiler till arbetskatalogen för att kunna använda en klass. Klassfilerna är framställda på basis av boken kod. "Code framgments" (vissa Exceptionklasser saknas dock) finns på nätet på http://loki.cs.brown.edu:8081/webdsa/source/ch05/index.html 8. BA-hemuppgift : Samma uppgift som hemuppgift 7, men man får inte använda den färdiga klassfilen för NodeList. Gör uppgift C-5.17, sidan 223 i GT, i Java med hjälp av bokens java-kod NodeList som implementerar bokens ADT List (dvs lagra barnens namn i ett objekt av typen NodeList). Diskutera körtiden. Du kan förståss återanvända en del kod i din lösning från hemuppgift 6. På /info/inda01/gtch5/ eller på nätet (vissa Exceptionklasser saknas dock) på http://loki.cs.brown.edu:8081/webdsa/source/ch05/index.html finns java-kod från boken för NodeList, List mm. Vissa metoder saknas dock, vilket märks när man försöker kompilera. Man måste alltså först komplettera med de fyra saknade metoderna.