![Page 1: Programmering för språkteknologer II, HT2014 Avancerad …evelina/uv/uv14/pst2/F5/2014... · 2014. 10. 7. · 7 Associativa typer - Tänk om vi kan associera värden av godtycklig](https://reader033.vdocuments.pub/reader033/viewer/2022060819/60982b07e8b75e279856fad4/html5/thumbnails/1.jpg)
Programmering för språkteknologer II, HT2014
Avancerad programmering för språkteknologer, HT2014
[email protected] 9-2035http://stp.ling.uu.se/~evelina/uv/uv14/pst2/
![Page 2: Programmering för språkteknologer II, HT2014 Avancerad …evelina/uv/uv14/pst2/F5/2014... · 2014. 10. 7. · 7 Associativa typer - Tänk om vi kan associera värden av godtycklig](https://reader033.vdocuments.pub/reader033/viewer/2022060819/60982b07e8b75e279856fad4/html5/thumbnails/2.jpg)
2
Idag
- Hashtabeller
- Kodkvalité
- Objektorienterad analys
- Övningar – Komplexitet – Objektorienterad analys/design
![Page 3: Programmering för språkteknologer II, HT2014 Avancerad …evelina/uv/uv14/pst2/F5/2014... · 2014. 10. 7. · 7 Associativa typer - Tänk om vi kan associera värden av godtycklig](https://reader033.vdocuments.pub/reader033/viewer/2022060819/60982b07e8b75e279856fad4/html5/thumbnails/3.jpg)
3
Hashtabeller
![Page 4: Programmering för språkteknologer II, HT2014 Avancerad …evelina/uv/uv14/pst2/F5/2014... · 2014. 10. 7. · 7 Associativa typer - Tänk om vi kan associera värden av godtycklig](https://reader033.vdocuments.pub/reader033/viewer/2022060819/60982b07e8b75e279856fad4/html5/thumbnails/4.jpg)
4
Associativa typer
- En array associerar heltal med värden av godtycklig typ:
String[] array = new String[4]; array[0] = "Kalle"; array[1] = "Anka"; array[2] = "Dator"; array[3] = "Bok";
Kalle Anka Dator Bok
index: 0 1 2 3
![Page 5: Programmering för språkteknologer II, HT2014 Avancerad …evelina/uv/uv14/pst2/F5/2014... · 2014. 10. 7. · 7 Associativa typer - Tänk om vi kan associera värden av godtycklig](https://reader033.vdocuments.pub/reader033/viewer/2022060819/60982b07e8b75e279856fad4/html5/thumbnails/5.jpg)
5
Associativa typer
- Tänk om vi kan associera värden av godtycklig typ med hjälp av ett godtyckligt värde, dvs en nyckel, istället för ett index.
Exempel:
nyckel: “K” “A” “D” “B”
Kalle Anka Dator Bok
![Page 6: Programmering för språkteknologer II, HT2014 Avancerad …evelina/uv/uv14/pst2/F5/2014... · 2014. 10. 7. · 7 Associativa typer - Tänk om vi kan associera värden av godtycklig](https://reader033.vdocuments.pub/reader033/viewer/2022060819/60982b07e8b75e279856fad4/html5/thumbnails/6.jpg)
6
Associativa typer
- Tänk om vi kan associera värden av godtycklig typ med hjälp av ett godtyckligt värde, dvs en nyckel, istället för ett index.
Exempel:
Problem: Hur ska datorn veta var i arrayen “K” finns?
nyckel: “K” “A” “D” “B”
Kalle Anka Dator Bok
![Page 7: Programmering för språkteknologer II, HT2014 Avancerad …evelina/uv/uv14/pst2/F5/2014... · 2014. 10. 7. · 7 Associativa typer - Tänk om vi kan associera värden av godtycklig](https://reader033.vdocuments.pub/reader033/viewer/2022060819/60982b07e8b75e279856fad4/html5/thumbnails/7.jpg)
7
Associativa typer
- Tänk om vi kan associera värden av godtycklig typ med hjälp av ett godtyckligt värde, dvs en nyckel, istället för ett index.
Exempel:
Problem: Hur ska datorn veta var i arrayen “K” finns?
Lösning: Konvertera “K” till ett giltigt index med hjälp av en hashfunktion.
nyckel: “K” “A” “D” “B”
Kalle Anka Dator Bok
![Page 8: Programmering för språkteknologer II, HT2014 Avancerad …evelina/uv/uv14/pst2/F5/2014... · 2014. 10. 7. · 7 Associativa typer - Tänk om vi kan associera värden av godtycklig](https://reader033.vdocuments.pub/reader033/viewer/2022060819/60982b07e8b75e279856fad4/html5/thumbnails/8.jpg)
8
Associativa typer
- Tänk om vi kan associera värden av godtycklig typ med hjälp av ett godtyckligt värde, dvs en nyckel, istället för ett index.
Exempel:
Lösning: Konvertera “K” till ett giltigt index med hjälp av en hashfunktion.
s2 s3 s4 s5
hashfunktion:
nyckel: “K” “A” “D” “B”
![Page 9: Programmering för språkteknologer II, HT2014 Avancerad …evelina/uv/uv14/pst2/F5/2014... · 2014. 10. 7. · 7 Associativa typer - Tänk om vi kan associera värden av godtycklig](https://reader033.vdocuments.pub/reader033/viewer/2022060819/60982b07e8b75e279856fad4/html5/thumbnails/9.jpg)
9
Hashtabeller – Skapa hashtabell
HashMap<String,String> Dictionary = new HashMap<String,String>(100);
0
1
2
3
4
5
6
7
![Page 10: Programmering för språkteknologer II, HT2014 Avancerad …evelina/uv/uv14/pst2/F5/2014... · 2014. 10. 7. · 7 Associativa typer - Tänk om vi kan associera värden av godtycklig](https://reader033.vdocuments.pub/reader033/viewer/2022060819/60982b07e8b75e279856fad4/html5/thumbnails/10.jpg)
10
Hashtabeller – insättning
K Kalle
A Anka
D Dator
B Bok
0
1
2 K Kalle
3
4
5
6
7
Sätt in ordet Kalle i ordlistan.
dictionary.put("K", "Kalle");
![Page 11: Programmering för språkteknologer II, HT2014 Avancerad …evelina/uv/uv14/pst2/F5/2014... · 2014. 10. 7. · 7 Associativa typer - Tänk om vi kan associera värden av godtycklig](https://reader033.vdocuments.pub/reader033/viewer/2022060819/60982b07e8b75e279856fad4/html5/thumbnails/11.jpg)
11
Hashtabeller – insättning
Sätt in ordet Anka i ordlistan.
dictionary.put("A", "Anka");
0
1
2 K Kalle
3
4
5 A Anka
6
7
K Kalle
A Anka
D Dator
B Bok
![Page 12: Programmering för språkteknologer II, HT2014 Avancerad …evelina/uv/uv14/pst2/F5/2014... · 2014. 10. 7. · 7 Associativa typer - Tänk om vi kan associera värden av godtycklig](https://reader033.vdocuments.pub/reader033/viewer/2022060819/60982b07e8b75e279856fad4/html5/thumbnails/12.jpg)
12
Hashtabeller – insättning
Sätt in ordet Dator i ordlistan.
dictionary.put("D","Dator");
0 D Dator
1
2 K Kalle
3
4
5 A Anka
6
7
K Kalle
A Anka
D Dator
B Bok
![Page 13: Programmering för språkteknologer II, HT2014 Avancerad …evelina/uv/uv14/pst2/F5/2014... · 2014. 10. 7. · 7 Associativa typer - Tänk om vi kan associera värden av godtycklig](https://reader033.vdocuments.pub/reader033/viewer/2022060819/60982b07e8b75e279856fad4/html5/thumbnails/13.jpg)
13
Hashtabeller – insättning
Sätt in ordet Bok i ordlistan.
dictionary.put("B", "Bok");
0 D Dator
1
2 K Kalle
3
4
5 A Anka
6
7 B Bok
K Kalle
A Anka
D Dator
B Bok
![Page 14: Programmering för språkteknologer II, HT2014 Avancerad …evelina/uv/uv14/pst2/F5/2014... · 2014. 10. 7. · 7 Associativa typer - Tänk om vi kan associera värden av godtycklig](https://reader033.vdocuments.pub/reader033/viewer/2022060819/60982b07e8b75e279856fad4/html5/thumbnails/14.jpg)
14
Hashtabeller – insättning
Nu har vi lagrat vår ordlista i hashtabellen.
0 D Dator
1
2 K Kalle
3
4
5 A Anka
6
7 B Bok
K Kalle
A Anka
D Dator
B Bok
![Page 15: Programmering för språkteknologer II, HT2014 Avancerad …evelina/uv/uv14/pst2/F5/2014... · 2014. 10. 7. · 7 Associativa typer - Tänk om vi kan associera värden av godtycklig](https://reader033.vdocuments.pub/reader033/viewer/2022060819/60982b07e8b75e279856fad4/html5/thumbnails/15.jpg)
15
Hashtabeller – Sökning
Hur kan vi hitta ordet Kalle?
String state = dictionary.get("K");
0 D Dator
1
2 K Kalle
3
4
5 A Anka
6
7 B Bok
K Kalle
A Anka
D Dator
B Bok
![Page 16: Programmering för språkteknologer II, HT2014 Avancerad …evelina/uv/uv14/pst2/F5/2014... · 2014. 10. 7. · 7 Associativa typer - Tänk om vi kan associera värden av godtycklig](https://reader033.vdocuments.pub/reader033/viewer/2022060819/60982b07e8b75e279856fad4/html5/thumbnails/16.jpg)
16
Hashtabeller – Sökning
Hur kan vi hitta ordet Anka?
String state = dictionary.get("A");
0 D Dator
1
2 K Kalle
3
4
5 A Anka
6
7 B Bok
K Kalle
A Anka
D Dator
B Bok
![Page 17: Programmering för språkteknologer II, HT2014 Avancerad …evelina/uv/uv14/pst2/F5/2014... · 2014. 10. 7. · 7 Associativa typer - Tänk om vi kan associera värden av godtycklig](https://reader033.vdocuments.pub/reader033/viewer/2022060819/60982b07e8b75e279856fad4/html5/thumbnails/17.jpg)
17
Hashtabeller – Sökning
Hur kan vi hitta ordet Dator?
String state = dictionary.get("D");
0 D Dator
1
2 K Kalle
3
4
5 A Anka
6
7 B Bok
K Kalle
A Anka
D Dator
B Bok
![Page 18: Programmering för språkteknologer II, HT2014 Avancerad …evelina/uv/uv14/pst2/F5/2014... · 2014. 10. 7. · 7 Associativa typer - Tänk om vi kan associera värden av godtycklig](https://reader033.vdocuments.pub/reader033/viewer/2022060819/60982b07e8b75e279856fad4/html5/thumbnails/18.jpg)
18
Hashtabeller – Sökning
Hur kan vi hitta ordet Bok?
String state = dictionary.get("B");
0 D Dator
1
2 K Kalle
3
4
5 A Anka
6
7 B Bok
K Kalle
A Anka
D Dator
B Bok
![Page 19: Programmering för språkteknologer II, HT2014 Avancerad …evelina/uv/uv14/pst2/F5/2014... · 2014. 10. 7. · 7 Associativa typer - Tänk om vi kan associera värden av godtycklig](https://reader033.vdocuments.pub/reader033/viewer/2022060819/60982b07e8b75e279856fad4/html5/thumbnails/19.jpg)
19
Hashtabeller – Fakta
Skapa hashtabell:HashMap<K,V> name = new HashMap<K, V>(int capacity);
Insättning: name.put(K key, V value);
Sökning:V value = (V)name.get(K key);
K – står för key och kan vara av godtycklig typV – står för value och kan vara av godtycklig typ
![Page 20: Programmering för språkteknologer II, HT2014 Avancerad …evelina/uv/uv14/pst2/F5/2014... · 2014. 10. 7. · 7 Associativa typer - Tänk om vi kan associera värden av godtycklig](https://reader033.vdocuments.pub/reader033/viewer/2022060819/60982b07e8b75e279856fad4/html5/thumbnails/20.jpg)
20
Hashtabeller – Krockhantering
Vad händer om två nycklar får samma indexi hashtabellen?
![Page 21: Programmering för språkteknologer II, HT2014 Avancerad …evelina/uv/uv14/pst2/F5/2014... · 2014. 10. 7. · 7 Associativa typer - Tänk om vi kan associera värden av godtycklig](https://reader033.vdocuments.pub/reader033/viewer/2022060819/60982b07e8b75e279856fad4/html5/thumbnails/21.jpg)
21
Hashtabeller – Krockhantering
dictionary.put("K","Kalle");
0
1
2 K Kalle
3
4
5
6
7
K Kalle
A Anka
D Dator
B Bok
![Page 22: Programmering för språkteknologer II, HT2014 Avancerad …evelina/uv/uv14/pst2/F5/2014... · 2014. 10. 7. · 7 Associativa typer - Tänk om vi kan associera värden av godtycklig](https://reader033.vdocuments.pub/reader033/viewer/2022060819/60982b07e8b75e279856fad4/html5/thumbnails/22.jpg)
22
Hashtabeller – Krockhantering
dictionary.put("A","Anka");
0
1
2 K Kalle
3
4
5 A Anka
6
7
K Kalle
A Anka
D Dator
B Bok
![Page 23: Programmering för språkteknologer II, HT2014 Avancerad …evelina/uv/uv14/pst2/F5/2014... · 2014. 10. 7. · 7 Associativa typer - Tänk om vi kan associera värden av godtycklig](https://reader033.vdocuments.pub/reader033/viewer/2022060819/60982b07e8b75e279856fad4/html5/thumbnails/23.jpg)
23
Hashtabeller – Krockhantering
dictionary.put("D","Dator");
0 D Dator
1
2 K Kalle
3
4
5 A Anka
6
7
K Kalle
A Anka
D Dator
B Bok
![Page 24: Programmering för språkteknologer II, HT2014 Avancerad …evelina/uv/uv14/pst2/F5/2014... · 2014. 10. 7. · 7 Associativa typer - Tänk om vi kan associera värden av godtycklig](https://reader033.vdocuments.pub/reader033/viewer/2022060819/60982b07e8b75e279856fad4/html5/thumbnails/24.jpg)
24
Hashtabeller – Krockhantering
dictionary.put("B","Bok");
0 D Dator
1
2 K Kalle
3
4
5 A Anka
6
7
K Kalle
A Anka
D Dator
B Bok
![Page 25: Programmering för språkteknologer II, HT2014 Avancerad …evelina/uv/uv14/pst2/F5/2014... · 2014. 10. 7. · 7 Associativa typer - Tänk om vi kan associera värden av godtycklig](https://reader033.vdocuments.pub/reader033/viewer/2022060819/60982b07e8b75e279856fad4/html5/thumbnails/25.jpg)
25
Hashtabeller – Krockhantering
Index 2 i hashtabellen har redan ett värde, så nu blir det en krock. Hur ska vi lösa detta?
dictionary.put("B","Bok");
0 D Dator
1
2 K Kalle
3
4
5 A Anka
6
7
K Kalle
A Anka
D Dator
B Bok
![Page 26: Programmering för språkteknologer II, HT2014 Avancerad …evelina/uv/uv14/pst2/F5/2014... · 2014. 10. 7. · 7 Associativa typer - Tänk om vi kan associera värden av godtycklig](https://reader033.vdocuments.pub/reader033/viewer/2022060819/60982b07e8b75e279856fad4/html5/thumbnails/26.jpg)
26
Hashtabeller – Krockhantering
Det finns olika sätt att lösa en krock - länkning - Varje plats i hashtabellen innehåller en länkad lista
- öppen adressering - Placera datan på den första lediga platsen i hashtabellen
![Page 27: Programmering för språkteknologer II, HT2014 Avancerad …evelina/uv/uv14/pst2/F5/2014... · 2014. 10. 7. · 7 Associativa typer - Tänk om vi kan associera värden av godtycklig](https://reader033.vdocuments.pub/reader033/viewer/2022060819/60982b07e8b75e279856fad4/html5/thumbnails/27.jpg)
27
Hashtabeller – Krockhantering
länkning - Varje plats i hashtabellen innehåller en länkad lista
dictionary.put("B","Bok");
0 D Dator
1
2 K Kalle
3
4
5 A Anka
6
7
K Kalle
A Anka
D Dator
B Bok
![Page 28: Programmering för språkteknologer II, HT2014 Avancerad …evelina/uv/uv14/pst2/F5/2014... · 2014. 10. 7. · 7 Associativa typer - Tänk om vi kan associera värden av godtycklig](https://reader033.vdocuments.pub/reader033/viewer/2022060819/60982b07e8b75e279856fad4/html5/thumbnails/28.jpg)
28
Hashtabeller – Krockhantering
länkning - Varje plats i hashtabellen innehåller en länkad lista
B Bok
dictionary.put("B","Bok");
0 D Dator
1
2 K Kalle
3
4
5 A Anka
6
7
K Kalle
A Anka
D Dator
B Bok
![Page 29: Programmering för språkteknologer II, HT2014 Avancerad …evelina/uv/uv14/pst2/F5/2014... · 2014. 10. 7. · 7 Associativa typer - Tänk om vi kan associera värden av godtycklig](https://reader033.vdocuments.pub/reader033/viewer/2022060819/60982b07e8b75e279856fad4/html5/thumbnails/29.jpg)
29
Hashtabeller – Krockhantering
Länkning: Sökning
Vilket ord finns lagrat i nyckel B?
String state = dictionary.get("B"));
B Bok
0 D Dator
1
2 K Kalle
3
4
5 A Anka
6
7
K Kalle
A Anka
D Dator
B Bok
![Page 30: Programmering för språkteknologer II, HT2014 Avancerad …evelina/uv/uv14/pst2/F5/2014... · 2014. 10. 7. · 7 Associativa typer - Tänk om vi kan associera värden av godtycklig](https://reader033.vdocuments.pub/reader033/viewer/2022060819/60982b07e8b75e279856fad4/html5/thumbnails/30.jpg)
30
Hashtabeller – Krockhantering
Länkning: Sökning
Vilket ord finns lagrat i nyckel B?
String state = dictionary.get("B"));
B Bok
0 D Dator
1
2 K Kalle
3
4
5 A Anka
6
7
K Kalle
A Anka
D Dator
B Bok
![Page 31: Programmering för språkteknologer II, HT2014 Avancerad …evelina/uv/uv14/pst2/F5/2014... · 2014. 10. 7. · 7 Associativa typer - Tänk om vi kan associera värden av godtycklig](https://reader033.vdocuments.pub/reader033/viewer/2022060819/60982b07e8b75e279856fad4/html5/thumbnails/31.jpg)
31
Hashtabeller – Krockhantering
Länkning: Sökning
Vilket ord finns lagrat i nyckel B?
String state = dictionary.get("B"));
B Bok
0 D Dator
1
2 K Kalle
3
4
5 A Anka
6
7
K Kalle
A Anka
D Dator
B Bok
![Page 32: Programmering för språkteknologer II, HT2014 Avancerad …evelina/uv/uv14/pst2/F5/2014... · 2014. 10. 7. · 7 Associativa typer - Tänk om vi kan associera värden av godtycklig](https://reader033.vdocuments.pub/reader033/viewer/2022060819/60982b07e8b75e279856fad4/html5/thumbnails/32.jpg)
32
Hashtabeller – Krockhantering
Länkning - insättning: - hashfunktionen används på nyckeln och vi får ett index i hashtabellen - nyckel + data placeras in i den enkellänkade listan i index
- sökning: - hashfunktion används på nyckeln och vi får ett index - Man går igenom listan i index i tills: - data med motsvarande nyckel hittas och data returneras - eller tills listan är slut. Om listan är slut, returneras null.
![Page 33: Programmering för språkteknologer II, HT2014 Avancerad …evelina/uv/uv14/pst2/F5/2014... · 2014. 10. 7. · 7 Associativa typer - Tänk om vi kan associera värden av godtycklig](https://reader033.vdocuments.pub/reader033/viewer/2022060819/60982b07e8b75e279856fad4/html5/thumbnails/33.jpg)
33
Hashtabeller – Krockhantering
Öppen adressering: Lagra på den första lediga platsen.
dictionary.put("B","Bok");
0 D Dator
1
2 K Kalle
3
4
5 A Anka
6
7
K Kalle
A Anka
D Dator
B Bok
![Page 34: Programmering för språkteknologer II, HT2014 Avancerad …evelina/uv/uv14/pst2/F5/2014... · 2014. 10. 7. · 7 Associativa typer - Tänk om vi kan associera värden av godtycklig](https://reader033.vdocuments.pub/reader033/viewer/2022060819/60982b07e8b75e279856fad4/html5/thumbnails/34.jpg)
34
Hashtabeller – Krockhantering
Öppen adressering: Lagra på den första lediga platsen.
0 D Dator
1
2 K Kalle
3 B Bok
4
5 A Anka
6
7
dictionary.put("B","Bok");
K Kalle
A Anka
D Dator
B Bok
![Page 35: Programmering för språkteknologer II, HT2014 Avancerad …evelina/uv/uv14/pst2/F5/2014... · 2014. 10. 7. · 7 Associativa typer - Tänk om vi kan associera värden av godtycklig](https://reader033.vdocuments.pub/reader033/viewer/2022060819/60982b07e8b75e279856fad4/html5/thumbnails/35.jpg)
35
Hashtabeller – Krockhantering
Öppen adressering: Lagra på den första lediga platsen.
dictionary.put("S","Stol");
S Stol
0 D Dator
1
2 K Kalle
3 B Bok
4
5 A Anka
6
7
K Kalle
A Anka
D Dator
B Bok
![Page 36: Programmering för språkteknologer II, HT2014 Avancerad …evelina/uv/uv14/pst2/F5/2014... · 2014. 10. 7. · 7 Associativa typer - Tänk om vi kan associera värden av godtycklig](https://reader033.vdocuments.pub/reader033/viewer/2022060819/60982b07e8b75e279856fad4/html5/thumbnails/36.jpg)
36
Hashtabeller – Krockhantering
Öppen adressering: Lagra på den första lediga platsen.
0 D Dator
1
2 K Kalle
3 B Bok
4
5 A Anka
6
7
dictionary.put("S","Stol");
K Kalle
A Anka
D Dator
B Bok
S Stol
![Page 37: Programmering för språkteknologer II, HT2014 Avancerad …evelina/uv/uv14/pst2/F5/2014... · 2014. 10. 7. · 7 Associativa typer - Tänk om vi kan associera värden av godtycklig](https://reader033.vdocuments.pub/reader033/viewer/2022060819/60982b07e8b75e279856fad4/html5/thumbnails/37.jpg)
37
Hashtabeller – Krockhantering
Öppen adressering: Lagra på den första lediga platsen.
0 D Dator
1
2 K Kalle
3 B Bok
4 S Stol
5 A Anka
6
7
dictionary.put("S","Stol");
K Kalle
A Anka
D Dator
B Bok
S Stol
![Page 38: Programmering för språkteknologer II, HT2014 Avancerad …evelina/uv/uv14/pst2/F5/2014... · 2014. 10. 7. · 7 Associativa typer - Tänk om vi kan associera värden av godtycklig](https://reader033.vdocuments.pub/reader033/viewer/2022060819/60982b07e8b75e279856fad4/html5/thumbnails/38.jpg)
38
Hashtabeller – Krockhantering
Öppen adressering: Sökning
0 D Dator
1
2 K Kalle
3 B Bok
4 S Stol
5 A Anka
6
7
dictionary.get("S");
K Kalle
A Anka
D Dator
B Bok
S Stol
![Page 39: Programmering för språkteknologer II, HT2014 Avancerad …evelina/uv/uv14/pst2/F5/2014... · 2014. 10. 7. · 7 Associativa typer - Tänk om vi kan associera värden av godtycklig](https://reader033.vdocuments.pub/reader033/viewer/2022060819/60982b07e8b75e279856fad4/html5/thumbnails/39.jpg)
39
Hashtabeller – Krockhantering
Öppen adressering: Sökning
0 D Dator
1
2 K Kalle
3 B Bok
4 S Stol
5 A Anka
6
7
dictionary.get("S");
K Kalle
A Anka
D Dator
B Bok
S Stol
![Page 40: Programmering för språkteknologer II, HT2014 Avancerad …evelina/uv/uv14/pst2/F5/2014... · 2014. 10. 7. · 7 Associativa typer - Tänk om vi kan associera värden av godtycklig](https://reader033.vdocuments.pub/reader033/viewer/2022060819/60982b07e8b75e279856fad4/html5/thumbnails/40.jpg)
40
Hashtabeller – Krockhantering
Öppen adressering: Sökning
0 D Dator
1
2 K Kalle
3 B Bok
4 S Stol
5 A Anka
6
7
dictionary.get("S");
K Kalle
A Anka
D Dator
B Bok
S Stol
![Page 41: Programmering för språkteknologer II, HT2014 Avancerad …evelina/uv/uv14/pst2/F5/2014... · 2014. 10. 7. · 7 Associativa typer - Tänk om vi kan associera värden av godtycklig](https://reader033.vdocuments.pub/reader033/viewer/2022060819/60982b07e8b75e279856fad4/html5/thumbnails/41.jpg)
41
Hashtabeller – Krockhantering
Öppen adressering
insättning: - applicera hashfunktionen på nyckeln och få ett index i hashtabellen - gå in i indexet och leta efter den första lediga platsen - placera nyckeln + datan på den platsen
Sökning: - applicera hashfunktionen på nyckeln - leta efter nyckeln, om den hittas returneras värdet annars returneras null.
![Page 42: Programmering för språkteknologer II, HT2014 Avancerad …evelina/uv/uv14/pst2/F5/2014... · 2014. 10. 7. · 7 Associativa typer - Tänk om vi kan associera värden av godtycklig](https://reader033.vdocuments.pub/reader033/viewer/2022060819/60982b07e8b75e279856fad4/html5/thumbnails/42.jpg)
42
Hashtabeller – Krockhantering
Täthet
- Risken för krockar ökar ju fler nycklar man placerat i hashtabellen.
- Det tar längre tid att lägga in och söka efter nycklar i en hashtabell ju fler krockar man har.
- Riktmärke:antal nycklarantal platser
=0.75
![Page 43: Programmering för språkteknologer II, HT2014 Avancerad …evelina/uv/uv14/pst2/F5/2014... · 2014. 10. 7. · 7 Associativa typer - Tänk om vi kan associera värden av godtycklig](https://reader033.vdocuments.pub/reader033/viewer/2022060819/60982b07e8b75e279856fad4/html5/thumbnails/43.jpg)
43
Hashtabeller - JAVA
Klasser: Hashtable, HashMap, HashSet – Nycklarna lagras i osorterad ordning – Krockhantering: Länkning TreeMap, TreeSet – Nycklarna lagras i sorterad ordning
Krav: Följande metoder måste implementeras: - int hashCode() – omvandlar nyckeln till ett index som finns I hashtabellen
- boolean equals(Object other) – returnerar sant om två objekt är lika annars falskt.
![Page 44: Programmering för språkteknologer II, HT2014 Avancerad …evelina/uv/uv14/pst2/F5/2014... · 2014. 10. 7. · 7 Associativa typer - Tänk om vi kan associera värden av godtycklig](https://reader033.vdocuments.pub/reader033/viewer/2022060819/60982b07e8b75e279856fad4/html5/thumbnails/44.jpg)
44
Hashtabeller - JAVA
Konstruktorer: - HashXXX(); Kapacitet: 16 Täthet: 0.75
- HashXXX(int capacity); Kapacitet: capacity Täthet: 0.75 - HashXXX(int capacity, float loadFactor); Kapacitet: capacity Täthet: loadfactor
![Page 45: Programmering för språkteknologer II, HT2014 Avancerad …evelina/uv/uv14/pst2/F5/2014... · 2014. 10. 7. · 7 Associativa typer - Tänk om vi kan associera värden av godtycklig](https://reader033.vdocuments.pub/reader033/viewer/2022060819/60982b07e8b75e279856fad4/html5/thumbnails/45.jpg)
45
Hashtabeller - JAVA
Konstruktorer: - TreeXXX(); Skapar ett tomt träd - TreeXXX(Collection<? extends E> c) Skapar ett nytt träd som innehåller samma object som c - TreeXXX(Comparator<? super E> comparator) Skapar ett nytt tomt träd sorterad enligt comparator
- TreeXXX(SortedSet<E> s) Skapar ett nytt träd med samma innehåll som i s
![Page 46: Programmering för språkteknologer II, HT2014 Avancerad …evelina/uv/uv14/pst2/F5/2014... · 2014. 10. 7. · 7 Associativa typer - Tänk om vi kan associera värden av godtycklig](https://reader033.vdocuments.pub/reader033/viewer/2022060819/60982b07e8b75e279856fad4/html5/thumbnails/46.jpg)
46
Hashtabeller - JAVA
Klasser: Hashtable, HashMap, HashSet
- När antalet element i hashtabellen överstiger kapaciteten gånger täthetsfaktorn, utökas tabellen. - Detta tar tid och ska därför inte göras ofta.
- Täthetsfaktorn kan användas för att balansera uttrymmet mot effektiviteten.
![Page 47: Programmering för språkteknologer II, HT2014 Avancerad …evelina/uv/uv14/pst2/F5/2014... · 2014. 10. 7. · 7 Associativa typer - Tänk om vi kan associera värden av godtycklig](https://reader033.vdocuments.pub/reader033/viewer/2022060819/60982b07e8b75e279856fad4/html5/thumbnails/47.jpg)
47
Hashtabeller - JAVA
Klasser: Hashtable, HashMap, HashSet
- Krockhantering: Länkning
- För att objekt av en klass ska kunna placeras i en hashtabell måste man implementera följande: - int hashCode() - Avgör i vilket index en nyckel ska placeras i - boolean equals(Object other) - Finns definierad i objekt - Avgör om två nycklar är lika
![Page 48: Programmering för språkteknologer II, HT2014 Avancerad …evelina/uv/uv14/pst2/F5/2014... · 2014. 10. 7. · 7 Associativa typer - Tänk om vi kan associera värden av godtycklig](https://reader033.vdocuments.pub/reader033/viewer/2022060819/60982b07e8b75e279856fad4/html5/thumbnails/48.jpg)
48
Hashtabeller - JAVA
int hashCode()
- Två objekt som är lika enligt equals ska få samma hashCode
- Två objekt som inte är lika enligt equals behöver inte få samma hashCode
- Strategier: - Linjär sökning: ett steg i taget - Kvadratisk sökning: 1, 2, 4 ,8 16,... - Dubbelhashning: en ytterliggare hashfunktion avgör hur många steg som ska tas
![Page 49: Programmering för språkteknologer II, HT2014 Avancerad …evelina/uv/uv14/pst2/F5/2014... · 2014. 10. 7. · 7 Associativa typer - Tänk om vi kan associera värden av godtycklig](https://reader033.vdocuments.pub/reader033/viewer/2022060819/60982b07e8b75e279856fad4/html5/thumbnails/49.jpg)
49
Klassen String - boolean equals(Object o)
Jämför alltid strängar med equals, istället för string1 == string2.
Exempel:
String string = "Hej";
if(string.equals("Hej")) { System.out.println("Same string");} else { System.out.println("Not the same string");}
![Page 50: Programmering för språkteknologer II, HT2014 Avancerad …evelina/uv/uv14/pst2/F5/2014... · 2014. 10. 7. · 7 Associativa typer - Tänk om vi kan associera värden av godtycklig](https://reader033.vdocuments.pub/reader033/viewer/2022060819/60982b07e8b75e279856fad4/html5/thumbnails/50.jpg)
50
Hashtabeller - JAVA
boolean equals(Object o)
- Ta reda på om två objekt är lika (jämför == för värden)
- Exempel: public class Person{ String name = ""; public boolean equals (Object o) { if(this == o) return true; // samma objekt }
![Page 51: Programmering för språkteknologer II, HT2014 Avancerad …evelina/uv/uv14/pst2/F5/2014... · 2014. 10. 7. · 7 Associativa typer - Tänk om vi kan associera värden av godtycklig](https://reader033.vdocuments.pub/reader033/viewer/2022060819/60982b07e8b75e279856fad4/html5/thumbnails/51.jpg)
51
Hashtabeller - JAVA
boolean equals(Object o)
- Ta reda på om två objekt är lika (jämför == för värden)
- Exempel: public class Person{ String name = ""; public boolean equals (Object o) { if(this == o) return true; // samma objekt // Testa om o inte är en instans av Person else if (!(o instanceof Person)) return false; }
o instanceof klassnamnreturnerar sant om o är en instans av klassenklassnamn, annars returneras falskt.
![Page 52: Programmering för språkteknologer II, HT2014 Avancerad …evelina/uv/uv14/pst2/F5/2014... · 2014. 10. 7. · 7 Associativa typer - Tänk om vi kan associera värden av godtycklig](https://reader033.vdocuments.pub/reader033/viewer/2022060819/60982b07e8b75e279856fad4/html5/thumbnails/52.jpg)
52
Hashtabeller - JAVA
boolean equals(Object o)
- Ta reda på om två objekt är lika (jämför == för värden)
- Exempel: public class Person{ String name = ""; public boolean equals (Object o) { if(this == o) return true; // samma objekt // Testa om o inte är en instans av Person else if (!(o instanceof Person)) return false; else { // Testa om instansvariablerna har // samma värde Person oPerson = (Person)o; return name == oPerson.name; } } }
![Page 53: Programmering för språkteknologer II, HT2014 Avancerad …evelina/uv/uv14/pst2/F5/2014... · 2014. 10. 7. · 7 Associativa typer - Tänk om vi kan associera värden av godtycklig](https://reader033.vdocuments.pub/reader033/viewer/2022060819/60982b07e8b75e279856fad4/html5/thumbnails/53.jpg)
53
Kodkvalité
![Page 54: Programmering för språkteknologer II, HT2014 Avancerad …evelina/uv/uv14/pst2/F5/2014... · 2014. 10. 7. · 7 Associativa typer - Tänk om vi kan associera värden av godtycklig](https://reader033.vdocuments.pub/reader033/viewer/2022060819/60982b07e8b75e279856fad4/html5/thumbnails/54.jpg)
54
Kodkvalité - Namn
- namnet på en variabel ska beskriva vad som finns lagrat i den
Ex. String name; är bättre än String n;
- namnet på en metod ska beskriva vad metoden utför för något Ex. String getName(); är bättre än String getN();
![Page 55: Programmering för språkteknologer II, HT2014 Avancerad …evelina/uv/uv14/pst2/F5/2014... · 2014. 10. 7. · 7 Associativa typer - Tänk om vi kan associera värden av godtycklig](https://reader033.vdocuments.pub/reader033/viewer/2022060819/60982b07e8b75e279856fad4/html5/thumbnails/55.jpg)
55
Kodkvalité – Koden i metoderna
- Om ni har flera satser som utföra ungefär samma sak: – Samla satserna i en metod och anropa den istället
– Då blir det lättare att underhålla koden om ni behöver göra ändringar i den.
Exempel: Det är lättare att göra ändringar i en metod somanropas flera gånger istället för att leta eftersnarlika kodblock och ändra på var och en av dem.
![Page 56: Programmering för språkteknologer II, HT2014 Avancerad …evelina/uv/uv14/pst2/F5/2014... · 2014. 10. 7. · 7 Associativa typer - Tänk om vi kan associera värden av godtycklig](https://reader033.vdocuments.pub/reader033/viewer/2022060819/60982b07e8b75e279856fad4/html5/thumbnails/56.jpg)
56
Kodkvalité – Koden i metoderna
- Om koden i en metod är lång kan det bli svårt att få en överblick över kod i metoden. Lösning: Dela upp koden i lämpliga metoder och anropa metoderna istället.
![Page 57: Programmering för språkteknologer II, HT2014 Avancerad …evelina/uv/uv14/pst2/F5/2014... · 2014. 10. 7. · 7 Associativa typer - Tänk om vi kan associera värden av godtycklig](https://reader033.vdocuments.pub/reader033/viewer/2022060819/60982b07e8b75e279856fad4/html5/thumbnails/57.jpg)
57
Kodkvalité – Synlighet
- Endast de metoder och variabler som andra klasser ska kunna använda ska vara publika
- De variabler som klassen själv ska kontrollera ska vara privata – Andra klasser kan ändra/hämta värden med hjälp av setter/getter (inkapsling)
![Page 58: Programmering för språkteknologer II, HT2014 Avancerad …evelina/uv/uv14/pst2/F5/2014... · 2014. 10. 7. · 7 Associativa typer - Tänk om vi kan associera värden av godtycklig](https://reader033.vdocuments.pub/reader033/viewer/2022060819/60982b07e8b75e279856fad4/html5/thumbnails/58.jpg)
58
Objektorienterad analys
![Page 59: Programmering för språkteknologer II, HT2014 Avancerad …evelina/uv/uv14/pst2/F5/2014... · 2014. 10. 7. · 7 Associativa typer - Tänk om vi kan associera värden av godtycklig](https://reader033.vdocuments.pub/reader033/viewer/2022060819/60982b07e8b75e279856fad4/html5/thumbnails/59.jpg)
59
Objektorienterad analys(OOA)
- Analysera problemet
- Vad ska programmet göra? – Skapa användningsfall
- Bestäm vilka klasser som ska användas och hur de ska samarbeta
![Page 60: Programmering för språkteknologer II, HT2014 Avancerad …evelina/uv/uv14/pst2/F5/2014... · 2014. 10. 7. · 7 Associativa typer - Tänk om vi kan associera värden av godtycklig](https://reader033.vdocuments.pub/reader033/viewer/2022060819/60982b07e8b75e279856fad4/html5/thumbnails/60.jpg)
60
Objektorienterad design(OOD)
- Förfina och detaljera analysen
- Bestäm vilka metoder och variabler som ska ingå i klasserna
![Page 61: Programmering för språkteknologer II, HT2014 Avancerad …evelina/uv/uv14/pst2/F5/2014... · 2014. 10. 7. · 7 Associativa typer - Tänk om vi kan associera värden av godtycklig](https://reader033.vdocuments.pub/reader033/viewer/2022060819/60982b07e8b75e279856fad4/html5/thumbnails/61.jpg)
61
Objektorienterad Programmering(OOP)
- Implementera designen i något objektorienterat språk (Java, C++, C#,...)
![Page 62: Programmering för språkteknologer II, HT2014 Avancerad …evelina/uv/uv14/pst2/F5/2014... · 2014. 10. 7. · 7 Associativa typer - Tänk om vi kan associera värden av godtycklig](https://reader033.vdocuments.pub/reader033/viewer/2022060819/60982b07e8b75e279856fad4/html5/thumbnails/62.jpg)
62
OOA/OOD – Översikt på arbetsgången
- Ta fram objektkandidater
- Grovrensa bland objekten
- Klassifiera objekten
- Gruppera och beskriv relationer mellan klasserna
- Ta fram användningsfall och validera systemet
- Rita klassdiagram
- Detaljdesigna klasser
![Page 63: Programmering för språkteknologer II, HT2014 Avancerad …evelina/uv/uv14/pst2/F5/2014... · 2014. 10. 7. · 7 Associativa typer - Tänk om vi kan associera värden av godtycklig](https://reader033.vdocuments.pub/reader033/viewer/2022060819/60982b07e8b75e279856fad4/html5/thumbnails/63.jpg)
63
OOA/OOD – Ta fram objektkandidater
- Brainstorming
- Substantiv-verb metoden: – Substantiv: Möjliga objektet – Verb: Möjliga metoder
Checklista:- Faktiska saker (bil, hus)- Platser(rum, trädgård)- Begrepp(bankkonto, transaktion)- Roller(kund, spelare)- Händelser(landning, avbrott)- ...
![Page 64: Programmering för språkteknologer II, HT2014 Avancerad …evelina/uv/uv14/pst2/F5/2014... · 2014. 10. 7. · 7 Associativa typer - Tänk om vi kan associera värden av godtycklig](https://reader033.vdocuments.pub/reader033/viewer/2022060819/60982b07e8b75e279856fad4/html5/thumbnails/64.jpg)
64
OOA/OOD – Grovrensa bland objekten
- Finns det dubbletter? – Är några objekt samma, men har olika namn?
- Är några orimliga och borde vara variabler? Ex. Bör namnet på en person vara en klass eller en instansvariabel?
![Page 65: Programmering för språkteknologer II, HT2014 Avancerad …evelina/uv/uv14/pst2/F5/2014... · 2014. 10. 7. · 7 Associativa typer - Tänk om vi kan associera värden av godtycklig](https://reader033.vdocuments.pub/reader033/viewer/2022060819/60982b07e8b75e279856fad4/html5/thumbnails/65.jpg)
65
OOA/OOD – Klassificera objekten
- Arbeta till exempel CRC-kort – C- class – klassens namn – R- responsibility --- Vad vet objekten av en klass eller vad gör objekten för att fylla sin funktion? Ex. Ett objekt av klassen Person vet namnet på personen – C- collaborators, --- Vilka klasser samarbetar klassen med?
–CRC-korten kan flyttas runt, uppdateras och slängas i efterhand
![Page 66: Programmering för språkteknologer II, HT2014 Avancerad …evelina/uv/uv14/pst2/F5/2014... · 2014. 10. 7. · 7 Associativa typer - Tänk om vi kan associera värden av godtycklig](https://reader033.vdocuments.pub/reader033/viewer/2022060819/60982b07e8b75e279856fad4/html5/thumbnails/66.jpg)
66
OOA/OOD – Gruppera och beskriv relationer mellan klasser
- Vilka klasser hör ihop? – Lämpligt med arv/gränssnitt? – Placera I paket?
![Page 67: Programmering för språkteknologer II, HT2014 Avancerad …evelina/uv/uv14/pst2/F5/2014... · 2014. 10. 7. · 7 Associativa typer - Tänk om vi kan associera värden av godtycklig](https://reader033.vdocuments.pub/reader033/viewer/2022060819/60982b07e8b75e279856fad4/html5/thumbnails/67.jpg)
67
OOA/OOD – Användningsfall och validering
- Användningsfall – Vad ska programmet utföra?
- Validering – Kan klasserna användas för att utföra användningsfallen – Har vi rätt klasser? – Har vi hittat alla klasser som behövs? – Vilka klasser samarbetar och hur?
![Page 68: Programmering för språkteknologer II, HT2014 Avancerad …evelina/uv/uv14/pst2/F5/2014... · 2014. 10. 7. · 7 Associativa typer - Tänk om vi kan associera värden av godtycklig](https://reader033.vdocuments.pub/reader033/viewer/2022060819/60982b07e8b75e279856fad4/html5/thumbnails/68.jpg)
68
OOA/OOD – Rita klassdiagram
- Baserat på analysen
![Page 69: Programmering för språkteknologer II, HT2014 Avancerad …evelina/uv/uv14/pst2/F5/2014... · 2014. 10. 7. · 7 Associativa typer - Tänk om vi kan associera värden av godtycklig](https://reader033.vdocuments.pub/reader033/viewer/2022060819/60982b07e8b75e279856fad4/html5/thumbnails/69.jpg)
69
OOA/OOD – Detaljdesigna klasser
- Vilka metoder behöver vi? – Framförallt icke-privata metoder – klassens gränssnitt
- Vilka variabler behövs? – Vilka datastrukturer är lämpliga att använda?
![Page 70: Programmering för språkteknologer II, HT2014 Avancerad …evelina/uv/uv14/pst2/F5/2014... · 2014. 10. 7. · 7 Associativa typer - Tänk om vi kan associera värden av godtycklig](https://reader033.vdocuments.pub/reader033/viewer/2022060819/60982b07e8b75e279856fad4/html5/thumbnails/70.jpg)
70
Laboration 4
- Textbaserat äventyrsspel
- Skriv egen kod från grunden – Strukturera upp koden i lämpliga klasser – Använd lämpliga datastrukturer
- Läs igenom instruktionen och kraven ordentligt innan ni sätter i gång!
![Page 71: Programmering för språkteknologer II, HT2014 Avancerad …evelina/uv/uv14/pst2/F5/2014... · 2014. 10. 7. · 7 Associativa typer - Tänk om vi kan associera värden av godtycklig](https://reader033.vdocuments.pub/reader033/viewer/2022060819/60982b07e8b75e279856fad4/html5/thumbnails/71.jpg)
71
Kommande veckor
Laboration 3: deadline: 13/10
Laboration 4: deadline: 29/10 Laborationstillfällen: 13/10 och 20/10
Nästa föreläsning: 3/11 - Repetition - Exempeltenta - Maila in önskemål
Det mesta schemalagda är slut– Mycket eget arbete- Maila om ni behöver hjälp/undrar något!
Anmäl er till tentan i Studentportalen
![Page 72: Programmering för språkteknologer II, HT2014 Avancerad …evelina/uv/uv14/pst2/F5/2014... · 2014. 10. 7. · 7 Associativa typer - Tänk om vi kan associera värden av godtycklig](https://reader033.vdocuments.pub/reader033/viewer/2022060819/60982b07e8b75e279856fad4/html5/thumbnails/72.jpg)
72
Arbeta själv
- Arbeta med laborationerna
- Gör programmeringsövningar – Från boken – Laborationer fårn tidigare kursomgångar
- Läs till tentamen
- Arbeta med gamla tentor