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

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

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

Lösningsförslag till exempeltenta 2

Lösningsförslag till exempeltenta 1

Interfacen Set och Map, hashtabeller

Avbildningar och hashtabeller. Koffman & Wolfgang kapitel 7, mestadels avsnitt 2 4

Föreläsning 8. Mängd, Avbildning, Hashtabell

Föreläsning 14 Innehåll

Föreläsning 8. Mängd, Avbildning, Hashtabell

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

Föreläsning 10 Innehåll

Diskutera. Hashfunktion

Föreläsning 10 Innehåll. Diskutera. Hashtabeller. Hashfunktion. hashfunktion. hashkod (ett heltal)

Inlämningsuppgift och handledning

Föreläsning 11 Innehåll

Exempel på listor (klassen ArrayList). Ett exempel med fält. Avbildning är en speciell typ av lista HashMap.

TENTAMEN OOP

F12 - Collections. ID1004 Objektorienterad programmering Fredrik Kilander

TDDD78 Viktiga begrepp, del 2

Inlämningsuppgift och handledning. Föreläsning 11 Innehåll. Diskutera. Hashtabeller

Objektorienterad Programmering DAT043. Föreläsning 9 12/2-18 Moa Johansson (delvis baserat på Fredrik Lindblads material)

Föreläsning 11. Arrayer. Arrayer. Arrayer. Lagrar flera värden av samma typ Kan vara primitiva typer eller objekt. Kan ha en array av t.

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.

Algoritmer och datastrukturer

Tentamen, EDAA01 Programmeringsteknik fördjupningskurs

Föreläsning 6 Datastrukturer (DAT037)

Datastrukturer. föreläsning 6. Maps 1

Föreläsning 2, vecka 8: Repetition

Laboration A Objektsamlingar

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

Föreläsning Innehåll. Hantera många element. Exempel: polygon Godtyckligt antal element. Exempel: polygon forts

Föreläsning 2 Objektorienterad programmering DD1332. Typomvandling

Bankkonto - övning. Övning 2 Skriv en metod, geträntan, som returnerar räntan.

Föreläsning 5 Datastrukturer (DAT037)

TENTAMEN PROGRAMMERINGSMETODIK MOMENT 2 - JAVA, 4P

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

Föreläsning 9 Innehåll

Tentamen OOP

Datastrukturer. Föreläsning Innehåll. Program med vektor Exempel. Deklarera vektorer

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

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

Dugga Datastrukturer (DAT036)

F5: Debriefing OU2, repetition av listor, träd och hashtabeller. Carl Nettelblad

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

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

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

Lösningar för tenta 2 DAT043,

Outline. Objektorienterad Programmering (TDDC77) En frukt har ett namn. Man kan lägga en frukt i en korg... Hashing. Undantag. Ahmed Rezine.

Objektorienterad Programmering (TDDC77)

Laboration 13, Arrayer och objekt

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

Grundläggande datalogi - Övning 4

Grundkurs i programmering, 6 hp (725G61) Dugga 2 tillfälle 2

Sökning och sortering

Länkade strukturer. (del 2)

Tentamen Datastrukturer D DAT 036/DIT960

OOP Objekt-orienterad programmering

Saker du ska kunna Föreläsning 13 & 14

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

TENTAMEN: Algoritmer och datastrukturer. Läs detta!

Föreläsning Datastrukturer (DAT037)

Länkade strukturer, parametriserade typer och undantag

Arrayer. results

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

Föreläsning 6: Metoder och fält (arrays)

Datatyper och kontrollstrukturer. Skansholm: Kapitel 2) De åtta primitiva typerna. Typ Innehåll Defaultvärde Storlek

Övning 4. I denna övning ska vi titta på icke-muterbarhet kontra muterbarhet, samt metoderna equals, hashcode och clone.

Programmering med Java. Grunderna. Programspråket Java. Programmering med Java. Källkodsexempel. Java API-exempel In- och utmatning.

Tentamen i Algoritmer & Datastrukturer i Java

DAT043 Objektorienterad programmering för D, DIT011 Objektorienterad programvaruutveckling för GU

Lösningsförslag: Instuderingsfrågor, del D

TENTAMEN: Algoritmer och datastrukturer. Läs detta!

Tentamen i Algoritmer & Datastrukturer i Java

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

Den som bara har en hammare tror att alla problem är spikar

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

Tentamen, EDAA01 Programmeringsteknik fördjupningskurs

Objektorienterad programmering i Java I

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

Innehåll. Sökning och hashtabeller. En bilsamling att söka i. En bil-klass att söka efter. Hur hittar vi alla bilar som uppfyller ett annat villkor

LÖSNINGSFÖRSLAG TENTAMEN

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

(Man brukar säga att) Java är... Denna föreläsning. Kompilering av Java. Historik: Java. enkelt. baserat på C/C++ Allmänt om Java

DAT043 Objektorienterad Programmering

Lösningsförslag till tentamen

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

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

13 Prioritetsköer, heapar

Tentamen Programmeringsteknik II Skrivtid: Hjälpmedel: Java-bok (vilken som helst) Skriv läsligt! Använd inte rödpenna!

Tentamen Programmeringsteknik 2 och MN Skrivtid: Inga hjälpmedel.

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

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

Programkonstruktion och. Datastrukturer

Föreläsning 10 Datastrukturer (DAT037)

I ett program hantera man ofta samlingar av objekt av samma typ.

Lösningsförslag till tentamen

732G Linköpings universitet 732G11. Johan Jernlås. Översikt. Repetition. Felsökning. Datatyper. Referenstyper. Metoder / funktioner

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

Föreläsning 1. Abstrakta datatyper, listor och effektivitet

Transkript:

Programmering för språkteknologer II, HT2011 evelina.andersson@lingfil.uu.se Rum 9-2035 http://stp.ling.uu.se/~evelina/uv/uv11/pst2/

Idag - Hashtabeller - Flerdimensionella arrayer (2D) 2

Repetition - Vad matchar ((abc de))* Svar:, abc, de, abcabc, dede, abcde, deabc,... a a b S 1 S 2 S 3 4 c S d S 5 e d 3

Dagens automat S 1 a S 2 b S 3 c S 4 d S 5 4

Dagens automat I filen initial s1 final s3 s5 s1 a s2 s2 b s3 s1 c s4 s4 d s5 5

Laborationen -kodöversikt Automata #initialstate: String #finalstates: String[] +accepts(indata String): boolean Förklaring # protected + public - private - klassvariabel FiniteStateAutomata - transitions: Hashmap<String, String> - keystring(state String, symbol String):String ArrayAutomata - transitions: char[][] - EMPTY : char 6

Dagens automat skapad med konstrukturerna Dagens automat skapad med FiniteStateAutomata(String filename): initialstate = s1 finalstates = { s3, s5 transitions i hashtabell Dagens automat skapad med ArrayAutomata(String filename): initialstate = s1 finalstates = { s3, s5 transitions i 2D-array 7

Hashtabeller 8

Associativa typer - En array associerar heltal med värden av godtycklig typ: String[] array = new String[4]; array[0] = "s2"; array[1] = "s3"; array[2] = "s4"; array[3] = "s5"; s2 s3 s4 s5 index: 0 1 2 3 9

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: s2 s3 s4 s5 nyckel: s1->a s2->b s1->c s4->d 10

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: s2 s3 s4 s5 nyckel: s1->a s2->b s1->c s4->d Problem: Hur ska datorn veta var i arrayen s1->a finns? 11

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: s2 s3 s4 s5 nyckel: s1->a s2->b s1->c s4->d Problem: Hur ska datorn veta var i arrayen s1->a finns? Lösning: Konvertera s1->a till ett giltigt index med hjälp av en hashfunktion. 12

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: s2 s3 s4 s5 hashfunktion: nyckel: s1->a s2->b s1->c s4->d Lösning: Konvertera s1->a till ett giltigt index med hjälp av en hashfunktion. 13

Hashtabeller Skapa hashtabell 0 1 2 3 4 5 6 7 HashMap<String,String> transitions = new HashMap<String,String>(100); 14

Hashtabeller insättning s1->a s2->b s1->c s4->d 0 1 2 s1-> a s2 3 4 5 6 7 Sätt in övergången s1 a s2 i automaten. transitions.put(keystring("s1", "a"), "s2"); 15

Hashtabeller insättning s1->a s2->b s1->c s4->d 0 1 2 s1-> a s2 3 4 5 s2->b s3 6 7 Sätt in övergången s2 b s3 i automaten. transitions.put(keystring("s2", "b"), "s3"); 16

Hashtabeller insättning s1->a s2->b s1->c s4->d 0 s1->c s4 1 2 s1-> a s2 3 4 5 s2->b s3 6 7 Sätt in övergången s1 c s4 i automaten. transitions.put(keystring("s1", "c"), "s4"); 17

Hashtabeller insättning s1->a s2->b s1->c s4->d 0 s1->c s4 1 2 s1-> a s2 3 4 5 s2->b s3 6 7 s4->d s5 Sätt in övergången s4 d s5 i automaten. transitions.put(keystring("s4", "d"), "s5"); 18

Hashtabeller insättning s1->a s2->b s1->c s4->d 0 s1->c s4 1 2 s1-> a s2 3 4 5 s2->b s3 6 7 s4->d s5 Nu har vi lagrat vår automat i hashtabellen. 19

Hashtabeller Sökning s1->a s2->b s1->c s4->d 0 s1->c s4 1 2 s1-> a s2 3 4 5 s2->b s3 6 7 s4->d s5 Om automaten befinner sig i tillstånd s1 och läser a på indata. I vilket tillstånd hamnar automaten i då? String state = (String)transitions.get(keyString("s1", "a")); 20

Hashtabeller Sökning s1->a s2->b s1->c s4->d 0 s1->c s4 1 2 s1-> a s2 3 4 5 s2->b s3 6 7 s4->d s5 Om automaten befinner sig i tillstånd s2 och läser b på indata. I vilket tillstånd hamnar automaten i då? String state = (String)transitions.get(keyString("s2", "b")); 21

Hashtabeller Sökning s1->a s2->b s1->c s4->d 0 s1->c s4 1 2 s1-> a s2 3 4 5 s2->b s3 6 7 s4->d s5 Om automaten befinner sig i tillstånd s1 och läser c på indata. I vilket tillstånd hamnar automaten i då? String state = (String)transitions.get(keyString("s1", "c")); 22

Hashtabeller Sökning s1->a s2->b s1->c s4->d 0 s1->c s4 1 2 s1-> a s2 3 4 5 s2->b s3 6 7 s4->d s5 Om automaten befinner sig i tillstånd s4 och läser d på indata. I vilket tillstånd hamnar automaten i då? String state = (String)transitions.get(keyString("s4", "d")); 23

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 typ V står för value och kan vara av godtycklig typ 24

Hashtabeller Krockhantering Vad händer om två nycklar får samma index i hashtabellen? 25

Hashtabeller Krockhantering s1->a s2->b s1->c s4->d 0 1 2 s1-> a s2 3 4 5 6 7 transitions.put(keystring("s1", "a"), "s2"); 26

Hashtabeller Krockhantering s1->a s2->b s1->c s4->d 0 1 2 s1-> a s2 3 4 5 S2->b s3 6 7 transitions.put(keystring("s2", "b"), "s3"); 27

Hashtabeller Krockhantering s1->a s2->b s1->c s4->d 0 s1->c s4 1 2 s1-> a s2 3 4 5 S2->b s3 6 7 transitions.put(keystring("s1", "c"), "s4"); 28

Hashtabeller Krockhantering s1->a s2->b s1->c s4->d 0 s1->c s4 1 2 s1-> a s2 3 4 5 S2->b s3 6 7 transitions.put(keystring("s4", "d"), "s5"); 29

Hashtabeller Krockhantering s1->a s2->b s1->c s4->d 0 s1->c s4 1 2 s1-> a s2 3 4 5 S2->b s3 6 7 transitions.put(keystring("s4", "d"), "s5"); Index 2 i hashtabellen har redan ett värde, så nu blir det en krock. Hur ska vi lösa detta? 30

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 31

Hashtabeller Krockhantering länkning - Varje plats i hashtabellen innehåller en länkad lista s1->a s2->b s1->c s4->d 0 s1->c s4 1 2 s1-> a s2 3 4 5 S2->b s3 6 7 transitions.put(keystring("s4", "d"), "s5"); 32

Hashtabeller Krockhantering länkning - Varje plats i hashtabellen innehåller en länkad lista 0 s1->c s4 s1->a s2->b s1->c s4->d 1 2 s1->a s2 3 4 5 S2->b s3 s4->d s5 6 7 transitions.put(keystring("s4", "d"), "s5"); 33

Hashtabeller Krockhantering Länkning: Sökning 0 s1->c s4 s1->a s2->b s1->c s4->d 1 2 s1->a s2 3 4 5 S2->b s3 s4->d s5 6 7 Om automaten befinner sig i tillstånd s4 och läser d på indata. I vilket tillstånd hamnar automaten i då? String state = (String)transitions.get(keyString("s4", "d")); 34

Hashtabeller Krockhantering Länkning: Sökning 0 s1->c s4 s1->a s2->b s1->c s4->d 1 2 s1->a s2 3 4 5 S2->b s3 s4->d s5 6 7 Om automaten befinner sig i tillstånd s4 och läser d på indata. I vilket tillstånd hamnar automaten i då? String state = (String)transitions.get(keyString("s4", "d")); 35

Hashtabeller Krockhantering Länkning: Sökning 0 s1->c s4 s1->a s2->b s1->c s4->d 1 2 s1->a s2 3 4 5 S2->b s3 s4->d s5 6 7 Om automaten befinner sig i tillstånd s4 och läser d på indata. I vilket tillstånd hamnar automaten i då? String state = (String)transitions.get(keyString("s4", "d")); 36

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. 37

Hashtabeller Krockhantering Öppen adressering: Lagra på den första lediga platsen. s1->a s2->b s1->c s4->d 0 s1->c s4 1 2 s1->a s2 3 4 5 S2->b s3 6 7 transitions.put(keystring("s4", "d"), "s5"); 38

Hashtabeller Krockhantering Öppen adressering: Lagra på den första lediga platsen. s1->a s2->b s1->c s4->d 0 s1->c s4 1 2 s1->a s2 3 s4->d s5 4 5 S2->b s3 6 7 transitions.put(keystring("s4", "d"), "s5"); 39

Hashtabeller Krockhantering Öppen adressering: Lagra på den första lediga platsen. s1->a s2->b s1->c s4->d s4->e 0 s1->c s4 1 2 s1->a s2 3 s4->d s5 4 5 S2->b s3 6 7 transitions.put(keystring("s4", "e"), "s6"); 40

Hashtabeller Krockhantering Öppen adressering: Lagra på den första lediga platsen. s1->a s2->b s1->c s4->d s4->e 0 s1->c s4 1 2 s1->a s2 3 s4->d s5 4 5 S2->b s3 6 7 transitions.put(keystring("s4", "e"), "s6"); 41

Hashtabeller Krockhantering Öppen adressering: Lagra på den första lediga platsen. s1->a s2->b s1->c s4->d s4->e 0 s1->c s4 1 2 s1->a s2 3 s4->d s5 4 s4->e s6 5 S2->b s3 6 7 transitions.put(keystring("s4", "e"), "s6"); 42

Hashtabeller Krockhantering Öppen adressering: Sökning s1->a s2->b s1->c s4->d s4->e 0 s1->c s4 1 2 s1->a s2 3 s4->d s5 4 s4->e s6 5 S2->b s3 6 7 transitions.get(keystring("s4", "e")); 43

Hashtabeller Krockhantering Öppen adressering: Sökning s1->a s2->b s1->c s4->d s4->e 0 s1->c s4 1 2 s1->a s2 3 s4->d s5 4 s4->e s6 5 S2->b s3 6 7 transitions.get(keystring("s4", "e")); 44

Hashtabeller Krockhantering Öppen adressering: Sökning s1->a s2->b s1->c s4->d s4->e 0 s1->c s4 1 2 s1->a s2 3 s4->d s5 4 s4->e s6 5 S2->b s3 6 7 transitions.get(keystring("s4", "e")); 45

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. 46

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 nycklar antal platser =0.75 47

Hashtabeller - JAVA Klasser: Hashtable, HashMap, HashSet Konstruktorer: - Hashtable(); HashMap(); HashSet(); Kapacitet: 16 Täthet: 0.75 - Hashtable(int capacity); HashMap(int capacity); HashSet(int capacity); Kapacitet: capacity Täthet: 0.75 - Hashtable(int capacity, float loadfactor); HashMap(int capacity, float loadfactor); HashSet(int capacity, float loadfactor); Kapacitet: capacity Täthet: loadfactor 48

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. 49

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 50

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 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 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; o instanceof klassnamn returnerar sant om o är en instans av klassen klassnamn, annars returneras falskt. 53

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; 54

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"); 55

Flerdimensionella arrayer 56

Endimensionell array - Repetition - En array deklareras så här: int[] array = new int[4]; cell array: 0 0 0 0 index: 0 1 2 3 57

Endimensionell array - Repetition - Data i en array lagras så här: array[0] = 0; array: 0 0 0 0 index: 0 1 2 3 58

Endimensionell array - Repetition - Data i en array lagras så här: array[0] = 0; array[1] = 1; array: 0 1 0 0 index: 0 1 2 3 59

Endimensionell array - Repetition - Data i en array lagras så här: array[0] = 0; array[1] = 1; array[2] = 2; array: 0 1 2 0 index: 0 1 2 3 60

Endimensionell array - Repetition - Data i en array hämtas så här: int v = array[0] // v = 0; array: 0 1 2 0 index: 0 1 2 3 61

Endimensionell array - Repetition void insertat(int[] array, int data, int pos) { for(int i = array.length - 1; i > pos; i--) { int swap = array[i - 1]; array[i - 1] = array[i]; array[i] = swap; array[pos] = data; array: 0 1 2 0 insertat(array, 5, 1); 0 5 1 2 index: 0 1 2 3 62

Endimensionell array - Repetition void insertat(int[] array, int data, int pos) { for(int i = array.length - 1; i > pos; i--) { int swap = array[i - 1]; array[i - 1] = array[i]; array[i] = swap; array[pos] = data; data: 5 array: 0 1 2 0 pos: 1 63

Endimensionell array - Repetition void insertat(int[] array, int data, int pos) { for(int i = array.length - 1; i > pos; i--) { int swap = array[i - 1]; array[i - 1] = array[i]; array[i] = swap; array[pos] = data; data: 5 array: 0 1 2 0 pos: 1 i = 3 64

Endimensionell array - Repetition void insertat(int[] array, int data, int pos) { for(int i = array.length - 1; i > pos; i--) { int swap = array[i - 1]; array[i - 1] = array[i]; array[i] = swap; array[pos] = data; data: 5 array: 0 1 2 0 pos: 1 i = 3 swap: 2 65

Endimensionell array - Repetition void insertat(int[] array, int data, int pos) { for(int i = array.length - 1; i > pos; i--) { int swap = array[i - 1]; array[i - 1] = array[i]; array[i] = swap; array[pos] = data; data: 5 array: 0 1 0 0 pos: 1 i = 3 swap: 2 66

Endimensionell array - Repetition void insertat(int[] array, int data, int pos) { for(int i = array.length - 1; i > pos; i--) { int swap = array[i - 1]; array[i - 1] = array[i]; array[i] = swap; array[pos] = data; data: 5 array: 0 1 0 2 pos: 1 i = 3 swap: 2 67

Endimensionell array - Repetition void insertat(int[] array, int data, int pos) { for(int i = array.length - 1; i > pos; i--) { int swap = array[i - 1]; array[i - 1] = array[i]; array[i] = swap; Swap: Teknik för att byta plats på två array[pos] = data; värden i en array. data: 5 array: 0 1 0 2 pos: 1 i = 3 swap: 2 68

Endimensionell array - Repetition void insertat(int[] array, int data, int pos) { for(int i = array.length - 1; i > pos; i--) { int swap = array[i - 1]; array[i - 1] = array[i]; array[i] = swap; array[pos] = data; data: 5 array: 0 1 0 2 pos: 1 i = 2 69

Endimensionell array - Repetition void insertat(int[] array, int data, int pos) { for(int i = array.length - 1; i > pos; i--) { int swap = array[i - 1]; array[i - 1] = array[i]; array[i] = swap; array[pos] = data; data: 5 array: 0 1 0 2 pos: 1 i = 2 swap: 1 70

Endimensionell array - Repetition void insertat(int[] array, int data, int pos) { for(int i = array.length - 1; i > pos; i--) { int swap = array[i - 1]; array[i - 1] = array[i]; array[i] = swap; array[pos] = data; data: 5 array: 0 0 0 2 pos: 1 i = 2 swap: 1 71

Endimensionell array - Repetition void insertat(int[] array, int data, int pos) { for(int i = array.length - 1; i > pos; i--) { int swap = array[i - 1]; array[i - 1] = array[i]; array[i] = swap; array[pos] = data; data: 5 array: 0 0 1 2 pos: 1 i = 2 swap: 1 72

Endimensionell array - Repetition void insertat(int[] array, int data, int pos) { for(int i = array.length - 1; i > pos; i--) { int swap = array[i - 1]; array[i - 1] = array[i]; array[i] = swap; array[pos] = data; data: 5 array: 0 0 1 2 pos: 1 i = 1 73

Endimensionell array - Repetition void insertat(int[] array, int data, int pos) { for(int i = array.length - 1; i > pos; i--) { int swap = array[i - 1]; array[i - 1] = array[i]; array[i] = swap; array[pos] = data; data: 5 array: 0 5 1 2 pos: 1 74

Endimensionell array - Repetition void insertat(int[] array, int data, int pos) { for(int i = array.length - 1; i > pos; i--) { int swap = array[i - 1]; array[i - 1] = array[i]; array[i] = swap; array[pos] = data; array: 0 5 1 2 75

Endimensionell array - Repetition void removeat(int[] array, int pos) { for(int i = pos; i < array.length - 1; i++) { array[i] = array[i + 1]; array[array.length-1] = 0; array: 0 5 2 1 removeat(array,1); array: 0 2 1 0 76

Endimensionell array - Repetition void removeat(int[] array, int pos) { for(int i = pos; i < array.length - 1; i++) { array[i] = array[i + 1]; array[array.length-1] = 0; array: 0 5 2 1 pos: 1 77

Endimensionell array - Repetition void removeat(int[] array, int pos) { for(int i = pos; i < array.length - 1; i++) { array[i] = array[i + 1]; array[array.length-1] = 0; array: 0 5 2 1 pos: 1 i = 1 78

Endimensionell array - Repetition void removeat(int[] array, int pos) { for(int i = pos; i < array.length - 1; i++) { array[i] = array[i + 1]; array[array.length-1] = 0; array: 0 2 2 1 pos: 1 i = 1 array.length 1 = 3 79

Endimensionell array - Repetition void removeat(int[] array, int pos) { for(int i = pos; i < array.length - 1; i++) { array[i] = array[i + 1]; array[array.length-1] = 0; array: 0 2 2 1 pos: 1 i = 2 array.length 1 = 3 80

Endimensionell array - Repetition void removeat(int[] array, int pos) { for(int i = pos; i < array.length - 1; i++) { array[i] = array[i + 1]; array[array.length-1] = 0; array: 0 2 1 1 pos: 1 i = 2 array.length 1 = 3 81

Endimensionell array - Repetition void removeat(int[] array, int pos) { for(int i = pos; i < array.length - 1; i++) { array[i] = array[i + 1]; array[array.length-1] = 0; array: 0 2 1 1 pos: 1 i = 3 array.length 1 = 3 82

Endimensionell array - Repetition void removeat(int[] array, int pos) { for(int i = pos; i < array.length - 1; i++) { array[i] = array[i + 1]; array[array.length-1] = 0; array: 0 2 1 0 pos: 1 array.length 1 = 3 83

Endimensionell array - Repetition void removeat(int[] array, int pos) { for(int i = pos; i < array.length - 1; i++) { array[i] = array[i + 1]; array[array.length-1] = 0; array: 0 2 1 0 84

Endimensionell array - Repetition int[] copyarray(int[] array) { int copy = new int[array.length]; for(int i = 0; i < array.length; i++) { copy[i] = array[i]; return copy; array: 0 2 1 0 copyarray(array); copy: 0 2 1 0 85

Endimensionell array - Repetition int[] copyarray(int[] array) { int[] copy = new int[array.length]; for(int i = 0; i < array.length; i++) { copy[i] = array[i]; return copy; array: 0 2 1 0 86

Endimensionell array - Repetition int[] copyarray(int[] array) { int[] copy = new int[array.length]; for(int i = 0; i < array.length; i++) { copy[i] = array[i]; return copy; array: 0 2 1 0 copy: 0 0 0 0 87

Endimensionell array - Repetition int[] copyarray(int[] array) { int[] copy = new int[array.length]; for(int i = 0; i < array.length; i++) { copy[i] = array[i]; return copy; array: 0 2 1 0 i array.length = 4 copy: 0 0 0 0 88

Endimensionell array - Repetition int[] copyarray(int[] array) { int[] copy = new int[array.length]; for(int i = 0; i < array.length; i++) { copy[i] = array[i]; return copy; array: 0 2 1 0 i array.length = 4 copy: 0 0 0 0 89

Endimensionell array - Repetition int[] copyarray(int[] array) { int[] copy = new int[array.length]; for(int i = 0; i < array.length; i++) { copy[i] = array[i]; return copy; array: 0 2 1 0 i array.length = 4 copy: 0 0 0 0 90

Endimensionell array - Repetition int[] copyarray(int[] array) { int[] copy = new int[array.length]; for(int i = 0; i < array.length; i++) { copy[i] = array[i]; return copy; array: 0 2 1 0 i array.length = 4 copy: 0 2 0 0 91

Endimensionell array - Repetition int[] copyarray(int[] array) { int[] copy = new int[array.length]; for(int i = 0; i < array.length; i++) { copy[i] = array[i]; return copy; array: 0 2 1 0 i array.length = 4 copy: 0 2 0 0 92

Endimensionell array - Repetition int[] copyarray(int[] array) { int[] copy = new int[array.length]; for(int i = 0; i < array.length; i++) { copy[i] = array[i]; return copy; array: 0 2 1 0 i array.length = 4 copy: 0 2 1 0 93

Endimensionell array - Repetition int[] copyarray(int[] array) { int[] copy = new int[array.length]; for(int i = 0; i < array.length; i++) { copy[i] = array[i]; return copy; array: 0 2 1 0 i array.length = 4 copy: 0 2 1 0 94

Endimensionell array - Repetition int[] copyarray(int[] array) { int[] copy = new int[array.length]; for(int i = 0; i < array.length; i++) { copy[i] = array[i]; return copy; array: 0 2 1 0 i array.length = 4 copy: 0 2 1 0 95

Endimensionell array - Repetition int[] copyarray(int[] array) { int[] copy = new int[array.length]; for(int i = 0; i < array.length; i++) { copy[i] = array[i]; return copy; array: 0 2 1 0 i = 4 array.length = 4 copy: 0 2 1 0 96

Endimensionell array - Repetition int[] copyarray(int[] array) { int[] copy = new int[array.length]; for(int i = 0; i < array.length; i++) { copy[i] = array[i]; return copy; copy: 0 2 1 0 97

Java Flerdimensionella arrayer Exempel: char[][] transitions = new char[5][6]; index: 0 1 2 3 4 5 index: char[][] transitions: 0 1 2 3 4 98

Dagens automat S 1 a S 2 b S 3 c S 4 d S 5 Nu ska vi lagra den i vår 2D-array transitions. 99

Java Flerdimensionella arrayer Exempel: char[][] transitions = new char[5][6]; transitions[1][2] = a; // sätt in s1 a s2 index: 0 1 2 3 4 5 index: char[][] transitions: 0 1 2 3 4 100

Java Flerdimensionella arrayer Exempel: char[][] transitions = new char[5][6]; transitions[1][2] = a; // sätt in s1 a s2 index: 0 1 2 3 4 5 index: char[][] transitions: 0 1 2 3 4 101

Java Flerdimensionella arrayer Exempel: char[][] transitions = new char[5][6]; transitions[1][2] = a; // sätt in s1 a s2 index: 0 1 2 3 4 5 index: char[][] transitions: 0 1 2 3 4 a 102

Java Flerdimensionella arrayer Exempel: char[][] transitions = new char[5][6]; transitions[1][4] = c; // sätt in s1 c s4 index: 0 1 2 3 4 5 index: char[][] transitions: 0 1 2 3 4 a 103

Java Flerdimensionella arrayer Exempel: char[][] transitions = new char[5][6]; transitions[1][4] = c; // sätt in s1 c s4 index: 0 1 2 3 4 5 index: char[][] transitions: 0 1 2 3 4 a c 104

Java Flerdimensionella arrayer Exempel: char[][] transitions = new char[5][6]; transitions[2][3] = b; // sätt in s2 b s3 index: 0 1 2 3 4 5 index: char[][] transitions: 0 1 2 3 4 a c 105

Java Flerdimensionella arrayer Exempel: char[][] transitions = new char[5][6]; transitions[2][3] = b; // sätt in s2 b s3 index: 0 1 2 3 4 5 index: char[][] transitions: 0 1 2 3 4 a b c 106

Java Flerdimensionella arrayer Exempel: char[][] transitions = new char[5][6]; transitions[4][5] = d; // sätt in s4 d s5 index: 0 1 2 3 4 5 index: char[][] transitions: 0 1 2 3 4 a b c 107

Java Flerdimensionella arrayer Exempel: char[][] transitions = new char[5][6]; transitions[4][5] = d; // sätt in s4 d s5 index: 0 1 2 3 4 5 index: char[][] transitions: 0 1 2 3 4 a b c d 108

Java Flerdimensionella arrayer Nu finns automaten i transitions. index: 0 1 2 3 4 5 index: char[][] transitions: 0 1 2 3 4 a b c d 109

Java Flerdimensionella arrayer Hämta data från cell[1][2]: char symbol = transitions[1][2]; index: 0 1 2 3 4 5 index: char[][] transitions: 0 1 2 3 4 a b c d 110

Java Flerdimensionella arrayer Hämta data från cell[1][2]: char symbol = transitions[1][2]; index: 0 1 2 3 4 5 index: char[][] transitions: 0 1 2 3 4 a b c d 111

Java Flerdimensionella arrayer Hämta data från cell[1][2]: char symbol = transitions[1][2]; // symbol = a index: 0 1 2 3 4 5 index: char[][] transitions: 0 1 2 3 4 a b c d 112

Java Flerdimensionella arrayer Hämta data från cell[1][4]: char symbol = transitions[1][4]; index: 0 1 2 3 4 5 index: char[][] transitions: 0 1 2 3 4 a b c d 113

Java Flerdimensionella arrayer Hämta data från cell[1][4]: char symbol = transitions[1][4]; index: 0 1 2 3 4 5 index: char[][] transitions: 0 1 2 3 4 a b c d 114

Java Flerdimensionella arrayer Hämta data från cell[1][4]: char symbol = transitions[1][4]; // symbol = c index: 0 1 2 3 4 5 index: char[][] transitions: 0 1 2 3 4 a b c d 115

Java Flerdimensionella arrayer Hämta data från cell[2][3]: char symbol = transitions[2][3]; index: 0 1 2 3 4 5 index: char[][] transitions: 0 1 2 3 4 a b c d 116

Java Flerdimensionella arrayer Hämta data från cell[2][3]: char symbol = transitions[2][3]; // symbol = b index: 0 1 2 3 4 5 index: char[][] transitions: 0 1 2 3 4 a b c d 117

Java Flerdimensionella arrayer Hämta data från cell[4][5]: char symbol = transitions[4][5]; index: 0 1 2 3 4 5 index: char[][] transitions: 0 1 2 3 4 a b c d 118

Java Flerdimensionella arrayer Hämta data från cell[4][5]: char symbol = transitions[4][5]; // symbol = d index: 0 1 2 3 4 5 index: char[][] transitions: 0 1 2 3 4 a b c d 119

Java Flerdimensionella arrayer Loopa igen en 2D-array: for(int i = 0; i < transitions.length;i++) for(int j = 0; j < transitions[i].length;j++) System.out.println(transitions[i][j]); index: 0 1 2 3 4 5 index: char[][] transitions: 0 1 2 3 4 a b c d 120

Java Flerdimensionella arrayer Loopa igen en 2D-array: for(int i = 0; i < transitions.length;i++) for(int j = 0; j < transitions[i].length;j++) System.out.println(transitions[i][j]); index: 0 1 2 3 4 5 index: char[][] transitions: 0 1 2 3 4 a b c d 121

Java Flerdimensionella arrayer Loopa igen en 2D-array: for(int i = 0; i < transitions.length;i++) for(int j = 0; j < transitions[i].length;j++) System.out.println(transitions[i][j]); index: 0 1 2 3 4 5 index: char[][] transitions: 0 1 2 3 4 a b c d 122

Java Flerdimensionella arrayer Loopa igen en 2D-array: for(int i = 0; i < transitions.length;i++) for(int j = 0; j < transitions[i].length;j++) System.out.println(transitions[i][j]); index: 0 1 2 3 4 5 index: char[][] transitions: 0 1 2 3 4 a b c d 123

Java Flerdimensionella arrayer Loopa igen en 2D-array: for(int i = 0; i < transitions.length;i++) for(int j = 0; j < transitions[i].length;j++) System.out.println(transitions[i][j]); index: 0 1 2 3 4 5 index: char[][] transitions: 0 1 2 3 4 a b c d 124

Java Flerdimensionella arrayer Loopa igen en 2D-array: for(int i = 0; i < transitions.length;i++) for(int j = 0; j < transitions[i].length;j++) System.out.println(transitions[i][j]); index: 0 1 2 3 4 5 index: char[][] transitions: 0 1 2 3 4 a b c d 125

Java Flerdimensionella arrayer Loopa igen en 2D-array: for(int i = 0; i < transitions.length;i++) for(int j = 0; j < transitions[i].length;j++) System.out.println(transitions[i][j]); index: 0 1 2 3 4 5 index: char[][] transitions: 0 1 2 3 4 a b c d 126

Java Flerdimensionella arrayer Loopa igen en 2D-array: for(int i = 0; i < transitions.length;i++) for(int j = 0; j < transitions[i].length;j++) System.out.println(transitions[i][j]); index: 0 1 2 3 4 5 index: char[][] transitions: 0 1 2 3 4 a b c d 127

Java Flerdimensionella arrayer Loopa igen en 2D-array: for(int i = 0; i < transitions.length;i++) for(int j = 0; j < transitions[i].length;j++) System.out.println(transitions[i][j]); index: 0 1 2 3 4 5 index: char[][] transitions: 0 1 2 3 4 a b c d 128

Java Flerdimensionella arrayer Loopa igen en 2D-array: for(int i = 0; i < transitions.length;i++) for(int j = 0; j < transitions[i].length;j++) System.out.println(transitions[i][j]); index: 0 1 2 3 4 5 index: char[][] transitions: 0 1 2 3 4 a b c d 129

Java Flerdimensionella arrayer Loopa igen en 2D-array: for(int i = 0; i < transitions.length;i++) for(int j = 0; j < transitions[i].length;j++) System.out.println(transitions[i][j]); index: 0 1 2 3 4 5 index: char[][] transitions: 0 1 2 3 4 a b c d 130

Endimensionell array - Repetition int[] copyarray(int[] array) { int[] copy = new int[array.length]; for(int i = 0; i < array.length; i++) { copy[i] = array[i]; return copy; 131

Tvådimensionell array - CopyArray int[][] copyarray(int[][] array) { int[][] copy = new int[array.length][array[0].length]; for(int i = 0; i < array.length;i++) for(int j = 0; j < array[i].length;j++) copy[i][j] = array[i][j]; return copy; 132

Tvådimensionell array - CopyArray int[][] copyarray(int[][] array) { int[][] copy = new int[array.length][array[0].length]; for(int i = 0; i < array.length;i++) for(int j = 0; j < array[i].length;j++) copy[i][j] = array[i][j]; return copy; index: 0 1 2 3 index: 0 1 2 3 0 1 2 0 1 2 4 5 133

Tvådimensionell array - CopyArray int[][] copyarray(int[][] array) { int[][] copy = new int[array.length][array[0].length]; for(int i = 0; i < array.length;i++) for(int j = 0; j < array[i].length;j++) copy[i][j] = array[i][j]; return copy; index: 0 1 2 3 index: 0 1 2 3 0 1 2 4 0 1 2 4 5 134

Endimensionell array - Repetition void removeat(int[] array, int pos) { for(int i = pos; i < array.length - 1; i++) { array[i] = array[i + 1]; array[array.length-1] = 0; 135

Tvådimensionell array - removeat void removeat(int[][] array, int pos1, int pos2) { for(int i = pos2; i < array[pos1].length - 1; i++) { array[pos1][i] = array[pos1][i + 1]; array[pos1][array[pos1].length-1] = 0; index: 0 1 2 3 4 5 pos1: index: 0 1 2 a b c 136

Endimensionell array - insertat void insertat(int[] array, int data, int pos) { for(int i = array.length - 1; i > pos; i--) { int swap = array[i - 1]; array[i - 1] = array[i]; array[i] = swap; array[pos] = data; 137

Tvådimensionell array - insertat void insertat(int[][] array, int data, int pos1, int pos2) { for(int i = array[pos1].length - 1; i > pos2; i--) { int swap = array[pos1][i - 1]; array[pos1][i - 1] = array[pos1][i]; array[pos1][i] = swap; array[pos1][pos2] = data; index: 0 1 2 3 4 5 pos1: index: 0 1 2 a b c 138

Nästa gång - Flerdimensionella arrayer (3D) - Sökalgoritmer - Sökträd 139