Download TDDC30 2013-02-27

Survey
yes no Was this document useful for you?
   Thank you for your participation!

* Your assessment is very important for improving the workof artificial intelligence, which forms the content of this project

Document related concepts
no text concepts found
Transcript
2013-02-27
TDDC30
Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 12
Jonas Lindgren, Institutionen för Datavetenskap, LiU
På denna föreläsning:
• Repetition
• Om tentamen
1
FÖ1-2: Objektorientering
•
•
•
•
•
Attribut (en. field) Information/egenskaper
Metoder (en. method) Vad kan den göra
Inkapsling
Samarbete
Gränssnitt
2
1
2013-02-27
FÖ1-2:Klasser
• Beskriver en typ av objekt
class PacManBaddie {
int color;
Point position;
boolean isBlue;
...
boolean tryToEatMe() {
if (isBlue) {
return true;
} else {
return false;
}
}
}
Klass
Beskrivs av
Instantierar
Objekt
3
Hitta felet!
public class Human {
int age;
public void printAge(){
System.out.println("Jag är " + age + " år gammal");
}
public static void main(String args[]){
Human human;
human.printAge();
}
}
Ett objekt måste instantieras
innan det kan användas.
2
2013-02-27
Objekt vs referens
public class TestClass {
public static void nullify(Cat c){
c = null;
}
public static void main(String[] args) {
Cat c = new Cat(”Kurre”);
c.sayHello();
TestClass.nullify(c);
c.sayHello(); //NullPointerException! (or is it..)
}
}
5
Statiska metoder & attribut
Hitta felet!
public class Human {
int age = 0;
static int sum(int a, int b){
return a + b;
}
static void increaseAge(int addition){
age = age + addition;
}
public static void main(String args[]){
Human human = new Human();
human.increaseAge(1);
}
Statiska metoder kommer
inte åt instansvariabler.
}
3
2013-02-27
Statiska metoder
& attribut
Klassmetoder
• Instansmetoder kommer åt static
både klass- och instansvariabler
• Klassmetoder kommer endast
åt klassvariabler
• En instansvariabel hör till en
specifik instans
• En klassvariabel delas mellan
alla instanser
Klassvariabler
Klass
Beskrivs av
Instantierar
Objekt
Dessutom:
Instansmetoder
• Man behöver (bör) inte gå via
en instans för att komma åt en
klassmetod/klassvariabel
Instansvariabler
7
Arv
Möt tre studenter
• Gymnasiestudenten Anna
• Högskolestudenten Harry
• Impulsive Ivar
• Gillar att lösa problem
med penna och papper
• Har just läst TDDC30
• Har just fyllt nio
• Gillar att lösa problem
med en väl skriven
programmeringsalgoritm
• Gillar huvudbonader och
att gå ut på rast
8
4
2013-02-27
Polymorfism
• poly-morf (grek.) = många former
public class PolyMorphExample{
public static void morphSchool(Student student) {
student.study();
student.solveProblem("What is the matrix");
}
• Kan vara vilken
subklass som helst
• Dröjer tills
körningsögonblicket
innan det bestäms
• Endast det som är
deklarerat i Student
är tillgängligt
public static void main(String args[]){
Student anna = new HighSchoolStudent();
morphSchool(anna);
}
}
9
Arv(2)
• Alla studenter bör kunna studera och lösa uppgifter
• Men den perfekte studenten är ett abstrakt koncept..
public abstract class Student {
public void study(){
System.out.println("I am studying very hard.");
}
// this method has to be implemented by concrete
// students
public abstract String solveProblem(String problem);
}
10
5
2013-02-27
Objektorientering
• Objekt skapas med en klass som mall
• Vid skapandet anropas en konstruktor
• Objekt vs referens till objekt
• == och equals
• null refererar till ”inget objekt”
• this refererar till objektet själv
• Arv
• Överskuggning
• Polymorfism
• Explicit typkonvertering
• final
• Abstrakta klasser och metoder
11
UML
Beskrivning av en klass
+ public
- private
# protected
~ package
/ derived
understruken static
Italic abstrakt
Klassnamn
Attribut
Metoder
12
6
2013-02-27
UML
Beskrivning av relationer mellan klasser
• Association – ”Har en referens till”
• Aggregation - ”äger en”
OBS vag definition, undvik att använda
• Komposition – A består av B
• Generalisering (arv) – A ärver från B
A kan användas som en B
• Realisering (interface)-A implementerar B
A kan användas som en B
• Beroende
• Multiplicitet exempel:
A har minst en referens till B
13
UML
Exempel: UML-beskrivning av Studentklasserna
14
7
2013-02-27
Abstrakta Datatyper (ADT)
Sammanfattning:
• ADT:er säger vad som ska göras
• För att bestämma hur det ska göras
• Välj datastruktur
• Konstruera algoritmer för ADT:ns operationer
• Samma ADT kan implementeras med
• Olika datastrukturer
• Olika algoritmer
15
Välj den lösning som är mest effektiv i just ditt fall
ADT:er & datastrukturer
genomgågna i kursen
• Ordbok
• Lista
• Länkad
• Enkellänkad
• Dubbellänkad
• Array
• Cirkulär
• Stack
• Kö
• Träd
• Binära
• Sorterade
• Binärt sökträd
• Heap
8
2013-02-27
Träd
Definition:
• Ett träd är en riktad acyklisk graf
• Består av noder & bågar
• Finns enn väg till varje nod
• Representation som länkar
eller med ett fält
Parent(optional)
data
left
ABCDE F
G
H
17
right
Några fler termer
• Fullt binärt träd:
Samtliga noder har noll eller två barn
• Perfekt träd:
Ett fullt träd med alla löv på samma djup
• Fullständigt binärt träd:
Ett perfekt träd med skillnaden att den får
sakna några av de ’högraste’ löven
18
9
2013-02-27
Traversering
• Traversering: ett systematiskt sätt att ”besöka”
alla noder i ett träd
• Djupet-först
• Preorder, inorder, postorder
• Bredden-först
• Levelorder
19
= Delträd
Binärt sökträd
För varje nod gäller följande:
• Alla element till vänster
är mindre än nodens värde
• Alla element till höger
är större än nodens
värde
-
+
+
-
-
-
-
-
+
+
-
-
• insert
• remove
20
Givet att trädet är väl balanserat (ej fallet ovan) blir söktiden O(logn)
10
2013-02-27
Heap
• En heap är ett fullständigt binärt träd
• h = log(n)
• För varje nod har dess förälder lika eller mindre nyckel
• => Den minsta nyckeln finns alltid i roten
• Används ofta som impl. till prioritetskö
1
2
•
•
•
•
Insättning
Borttagning
Skapa
Representation
3
7
3
8
5
9
7
1
2
• Komplexitet
3
8
5
5
9
9
7
5
8
5
8
3
9
3
7
2
7
8
21
9
Sortering
• Allmänt
• Vi har studerat O(n2) och O(nlog(n))
• O(n2)-algoritmer kan vara bra i vissa fall
• Selectionsort
• Alltid O(n2) – alltid dålig
• Insertionsort
• Bästa fall O(n), värsta fall O(n2)
• Bra på små arrayer (<50) eller där data är nästan sorterad
• Lätt att implementera
22
11
2013-02-27
Sortering(2)
• Shellsort
• Utnyttjar insertionsorts bra sidor och försöker undvika de dåliga
• Tänjer på insertionsorts gränser
• Svår att analysera, beror på vald lucksekvens
• O(n2), O(n1.5), O(n1.33), O(nlog(n))
• Mergesort
• Optimal algoritm: O(nlog(n))
• Kräver minne O(n)
• Ideal för sortering på externt minne – färre diskåtkomster
• Quicksort
• I medelfallet snabbaste sorteringsalgoritmen – O(nlog(n))
• Vanlig i klassbibliotek (börjar dock ersättas av t ex Timsort)
• Dålig i värstafallet, använd ej i realtidsapplikationer
23
Sortering(3)
• Heapsort
•
•
•
•
Mycket snabb - O(nlog(n))
I praktiken långsammare än quicksort i medelfallet
Bäst i värstafallet
Bra för realtidsapplikationer!
• Countsort, Bucketsort
• ”Ej jämförande” algoritmer
• Bra om nyckelmängden är liten och kan avbildas på heltal
• Snabbare än Quicksort och Heapsort O(n)
• Radixsort
• Bra när nycklarna kan delas in i delnycklar
• I övrigt som Bucketsort
24
12
2013-02-27
Quickselect
• Välj pivot
• Partionera i tre delar
• L element mindre än pivot
• E element lika med pivot
• G element större än pivot
• Partionera igen med enn av partitionerna beroende på m
25
L
(tredje minsta finns
någonstans här)
E
G
Komplexitetsteori
• En algoritm ska fungerar för indata av godtycklig storlek
• Beräkna exekveringstiden som en funktion av storleken på indata
T(n)
• Fokusera på värstafallet
• Ibland även bästafallet, medelfallet, amorterad komplexitet
• Ignorera konstanta faktorer
• Analysen ska vara maskinoberoende
• Kraftfulla maskiner ökar hastigheten med en konstant
• Studera skalbarheten (asymptotiska beteendet) för stora
problemstorleka
• Fokusera på dominerande faktor
• Konstant, logaritmisk, kvadratisk, kubisk, exponentiell, faktoriell,
polynomisk
• Rumskomplexitet
26
13
2013-02-27
Komplexitetsteori(2)
for(int i = 0; i < data.length/3; i++){
System.out.println(data[i]);
}
for(int i = 0; i < myList.size(); i++){
int j = i + myList.get(i);
mylist.set(i,j); //replace element with j
}
• Ordo – övre gräns
• Omega – undre gräns
• Theta – övre och undre gräns
27
Tentamen
• 4 timmar
• En teoridel (penna och papper)
• En praktisk del (dator)
• Ej tillgång till internet, ni får relevant API som bilaga till tentamen
• Inga övriga hjälpmedel
• Javas bibliotek (förutom java.lang) får ej användas om ej explicit
uttryckt i uppgiften
• Möjlighet att anhålla om svar på vissa deluppgifter för att
kunna lösa annan deluppgift (praktiska delen)
• Fyll i motsvarande blankett och lämna till tentavakt
• Får ej poäng för den deluppgiften
28
14
2013-02-27
Tentamen(2)
•
•
•
•
Kopiera givna filer till ditt konto
Skapa ett nytt projekt för varje uppgift
Skicka frågor till examinator via ”studentklienten” MEN
Skicka inte in uppgifter, lämna kvar dessa på kontot när du är
klar
29
15