Grundläggande datalogi - Övning 4

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

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

Föreläsning 1. Introduktion och sökning i graf. Vad är en algoritm?

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

Tommy Färnqvist, IDA, Linköpings universitet. 1 ADT Map/Dictionary Definitioner Implementation... 2

Hashing Bakom kulisserna på Pythons dictionary

Hashing Bakom kulisserna på Pythons dictionary. Leta i listor Osorterade listor. Leta i listor Sorterade listor

Magnus Nielsen, IDA, Linköpings universitet

Hashing Bakom kulisserna på Pythons dictionary

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

Föreläsning Datastrukturer (DAT037)

Grundläggande datalogi - Övning 2

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.

Föreläsning 7: Prioritetskö, trappa heapsort, hashning

Sökning och sortering

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

TDDI16 Datastrukturer och algoritmer. Algoritmanalys

Tommy Färnqvist, IDA, Linköpings universitet. 1 ADT Map/Dictionary Definitioner Implementation... 2

Grundläggande datalogi - Övning 1

Föreläsning Datastrukturer (DAT037)

Föreläsning 9 Datastrukturer (DAT037)

Innehåll. Föreläsning 12. Binärt sökträd. Binära sökträd. Flervägs sökträd. Balanserade binära sökträd. Sökträd Sökning. Sökning och Sökträd

Dugga Datastrukturer (DAT036)

Föreläsning 5 Datastrukturer (DAT037)

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

Fredag 10 juni 2016 kl 8 12

Tentamen kl Uppgift 4. Uppgift 5

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

Innehåll. F7: Tabell, hashtabell, relation & lexikon. Gränsyta till Tabell. Tabell. Tabell Hashtabell Relation Lexikon.

Python. Datatyper. Mer om datatyper. Heltal - 3 Flyttal - 2,456 Listor - [1,2,3,4] Strängar - spam!

Sortering. Brute-force. Sortering Ordna element enligt relation mellan nyckelvärden

Föreläsning 6 Datastrukturer (DAT037)

Lösningsförslag till tentamen Datastrukturer, DAT037,

Sökning i ordnad lista. Sökning och sortering. Sökning med vaktpost i oordnad lista

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

Föreläsning 10 Datalogi 1 DA2001. Utskrift på skärmen. Syntax. print( Hej ) Hur är det? Hej. print( Hej,end= ) print( Hur är det? ) HejHur är det?

Python. Python är, som Scheme, ett interpreterat språk men det finns kompilatorer för Python.

Föreläsning 1. Introduktion. Vad är en algoritm?

Grundläggande datalogi - Övning 3

Python. Python är, som Scheme, ett interpreterat språk men det finns kompilatorer för Python.

Datastrukturer och algoritmer. Innehåll. Tabell. Tabell - exempel. Gränsyta till Tabell. Tabell. Modell. Hashtabell Relation, lexikon.

Tentamen Datastrukturer D DAT 035/INN960

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

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

Hashtabeller! (& kanske lite sortering)

Föreläsning Datastrukturer (DAT036)

Föreläsning Datastrukturer (DAT036)

Föreläsning 4 Datastrukturer (DAT037)

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

Tentamen Datastrukturer (DAT037)

Programkonstruktion och. Datastrukturer

Lösningsförslag till tentamen Datastrukturer, DAT037 (DAT036), Tiden det tar att utföra en iteration av loopen är oberoende av värdet på

Algoritmer och datastrukturer

Datastrukturer. föreläsning 6. Maps 1

Länkade listor, stackar och köer

Interfacen Set och Map, hashtabeller

DAI2 (TIDAL) + I2 (TKIEK)

Föreläsning 10 Datastrukturer (DAT037)

Föreläsning 2 Datastrukturer (DAT037)

Tentamen Datastrukturer D DAT 035/INN960

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

Python. Vi har ofta behov av att behandla datastrukturer på ett enhetligt sätt så att vi kan göra samma sak i flera olika program.

Föreläsning 13 och 14: Binära träd

Tentamen Datastrukturer, DAT037 (DAT036)

Exempeltenta GruDat 2002/2003

Lektion 2: Sökagenter. Robin Keskisärkkä

Tentamen Datastrukturer D DAT 036/DIT960

Föreläsning 5: Grafer Del 1

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

Sid 1 Kapitel 7: Sökning (Hashning) Hashning

Översikt. Stegvis förfining. Stegvis förfining. Dekomposition. Algoritmer. Metod för att skapa ett program från ett analyserat problem

Inom datalogin brukar man använda träd för att beskriva vissa typer av problem. Om man begränsar sig till träd där varje nod förgrenar sig högst två

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

Sätt att skriva ut binärträd

Föreläsning 13 Datastrukturer (DAT037)

DD1320 Tillämpad datalogi. Lösning (skiss) till tenta 20 okt 2011

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

Föreläsning Datastrukturer (DAT037)

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

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

Föreläsning 4 Datastrukturer (DAT037)

Föreläsning 10 Innehåll

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

Föreläsning 6: Introduktion av listor

Datastrukturer. föreläsning 3. Stacks 1

Föreläsning 9 Innehåll

Algoritmer, datastrukturer och komplexitet

Lösningsförslag till exempeltenta 1

Sammanfattning. Listor. List-manipulering. Matris. /home/lindahlm/activity-phd/teaching/11dd1310/exercise3/exercise3.py September 13, 20111

Diskutera. Hashfunktion

Föreläsning 5 Innehåll

Föreläsning 11 Innehåll

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

Föreläsning 5 Programmeringsteknik DD1310. Modulen doctest. Exempel. Doctest Dictionary Filhantering

Föreläsning 2 Programmeringsteknik och C DD1316. Mikael Djurfeldt

Föreläsning Datastrukturer (DAT036)

Programmering I Tobias Wrigstad fredag, 2009 augusti 28

Föreläsning 9 Exempel. Intervallhalveringsmetoden. Intervallhalveringsmetoden... Intervallhalveringsmetoden...

Föreläsning 9 Exempel

Algoritmer och datastrukturer 2012, fo rela sning 8

Transkript:

Grundläggande datalogi - Övning 4 Björn Terelius November 21, 2008

Definitioner Olika mått på komplexitet Definition En funktion f sägs vara O(g) om det existerar konstanter c, N så att f (n) < cg(n) för alla n > N. Detta skrivs f O(g) eller (något oegentligt) f = O(g). Exempel 3n 2 + 4n + 5 O(n 2 ) 7n log n + 103n + 9 O(n log n) 5 log n + 1 O(log n) 5 log n + 1 O(n)

Definitioner Olika mått på komplexitet Tidskomplexitet Hur många enkla* operationer utförs? Ger en uppskatting av hur lång tid algoritmen kommer ta Oftast det mest intressanta komplexitetsmåttet Minneskomplexitet Hur mycket minne använder algoritmen? De flesta algoritmer använder inte så mycket minne,...... men om minnet tar slut kan vi inte fortsätta beräkningen *En operation anses här vara enkel om den tar konstant tid.

Definitioner Olika mått på komplexitet Värsta fallet Hur många operationer/lång tid kommer som mest behövas Ofta ganska lätt att beräkna Kan vara onödigt pessimistiskt Genomsnittligt fall Ger oftast en bättre uppskattning av hur lång tid algoritmen kommer ta i praktiken,...... men vissa indata kan kräva mycket mer systemresurser Svårare att beräkna än komplexiteten för värsta fallet Kräver att man har sannolikhetsfördelningen för indata

Definitioner Olika mått på komplexitet Hur beräknar man komplexiteten för en algoritm? Loopar: Hur många varv körs loopen? Hur mycket arbete utförs per varv? if-else satser: Vilket fall kräver mest arbete?

Definitioner Olika mått på komplexitet insert find/exists remove oordnad lista O(1) O(n) O(n) ordnad lista O(n) O(log n) O(n) binärträd* O(log n) O(log n) O(log n) hashtabell** O(1) O(1) O(1) *Komplexiteten för binärträdet gäller under antagandet att det är balanserat **Komplexiteten för hashtabellen är förväntad tid, värsta-fallet kan vara O(n)

Vi kan hitta ett element i en lista i tid O(1) om vi vet dess index. Idé: Antag att vi snabbt kan associera ett index till varje nyckel. Då kan vi lagra nyckel och värde på den positionen i en vanlig lista. Problem: Hur tilldelar vi ett index till t.ex. en sträng eller ett heltal? Vad gör vi om/när flera nycklar tilldelas samma index?

Problem: Om vi inte känner till vilka nycklar som kommer sättas in när vi designar hashfunktionen kommer vi med stor sannolikhet få kollisioner. Lösningar: Lagra alla nycklar som hashar till samma värde i en länkad lista Hitta ett nytt index i tabellen, t.ex nästa lediga index

En hashfunktion är en funktion från någon mängd nycklar till talen 0, 1,..., N 1 där N är storleken på tabellen. En ideal hashfunktion sprider nycklarna oberoende och likformigt bland 0, 1,..., N 1. I realiteten får man göra en kompromiss mellan att hashfunktionen ska vara snabb att beräkna och att den ska sprida nycklarna bra. För heltal kan en enkel hashfunktion skrivas def hash(i, size): Given an integer i, the function returns a hash value in the range [0, size-1] return i % size

def hash(str, size): sum = 0 for c in str: sum += ord(c) return sum % size Lätt att förstå och implementera Snabb att köra Klustrar strängar mycket kraftigt Byter man plats på två bokstäver ändras inte hashvärdet

def hash(str, size): h = 0 for c in str: h = (127 * h + ord(c)) % size return h Mycket bättre spridning av nycklarna Något långsammare Fortfarande dålig om tabellstorleken är en multipel av 127 Ofta väljer man att tabellstorleken ska vara ett primtal.

from string_hash import hash class HashTableNode: def init (self, k, v, n): self.key = k self.value = v self.next = n class HashTable: def init (self, size): self.table = [None]*size...

def insert(self, key, value): Inserts the key/value pair in the hashtable h = hash(key, len(self.table)) ptr = self.table[h] while ptr!=none: if ptr.key == key: ptr.value = value return ptr = ptr.next n = HashTableNode(key, value, self.table[h]) self.table[h] = n

def exists(self, key): Returns True if the key exists, False otherwise h = hash(key, len(self.table)) ptr = self.table[h] while ptr!=none: if ptr.key == key: return True ptr = ptr.next return False

def get(self, key): Returns the value associated with key if the key exists, None otherwise h = hash(key, len(self.table)) ptr = self.table[h] while ptr!=none: if ptr.key == key: return ptr.value ptr = ptr.next return None

def remove(self, key): Removes the given key from the hashtable Returns True if it existed, False otherwise h = hash(key, len(self.table)) ptr = self.table[h] if ptr!=none and ptr.key==key: self.table[h] = ptr.next return True while ptr.next!=none and ptr.next.key!=key: ptr = ptr.next if ptr.next!=none and ptr.next.key==key: ptr.next = ptr.next.next return True return False

>>> ages = HashTable(20) >>> ages.insert("homer", 38) >>> ages.insert("marge", 37) >>> ages.insert("lisa", 8) >>> ages.insert("maggie", 1) >>> ages.insert("bart", 11) >>> ages.exists("lisa") True >>> ages.exists("spider pig") False >>> ages.get("homer") 38 >>> ages.remove("lisa") True >>> ages.exists("lisa") False