Hashing Bakom kulisserna på Pythons dictionary

Storlek: px
Starta visningen från sidan:

Download "Hashing Bakom kulisserna på Pythons dictionary"

Transkript

1 Hashing Bakom kulisserna på Pythons dictionary Innehåll Några förenklingar Leta i listor Olika ideer om hashing I python förr Och nu DA2001 (Föreläsning 20) Datalogi 1 Hösten / 32

2 Några förenklingar I början av den här diskussionen kommer jag titta enbart på listor som innehåller numeriska värden. DA2001 (Föreläsning 20) Datalogi 1 Hösten / 32

3 Några förenklingar I början av den här diskussionen kommer jag titta enbart på listor som innehåller numeriska värden. I normalfallet håller ingen reda på en massa tal utan snarare en informationspost som identifieras av ett nyckelvärde, där nyckelvärdet kan vara alltifrån ett tal till vilken komplicerad struktur som helst, bara nyckelvärdet är unikt i sammanhanget (eller nästan unikt i vissa fall) DA2001 (Föreläsning 20) Datalogi 1 Hösten / 32

4 Några förenklingar I början av den här diskussionen kommer jag titta enbart på listor som innehåller numeriska värden. I normalfallet håller ingen reda på en massa tal utan snarare en informationspost som identifieras av ett nyckelvärde, där nyckelvärdet kan vara alltifrån ett tal till vilken komplicerad struktur som helst, bara nyckelvärdet är unikt i sammanhanget (eller nästan unikt i vissa fall) Exemplen handlar om hur man letar i listor med meningsfull information men för enkelhetens skull reduceras de till att leta efter numeriska nyckelvärden. DA2001 (Föreläsning 20) Datalogi 1 Hösten / 32

5 Några förenklingar I början av den här diskussionen kommer jag titta enbart på listor som innehåller numeriska värden. I normalfallet håller ingen reda på en massa tal utan snarare en informationspost som identifieras av ett nyckelvärde, där nyckelvärdet kan vara alltifrån ett tal till vilken komplicerad struktur som helst, bara nyckelvärdet är unikt i sammanhanget (eller nästan unikt i vissa fall) Exemplen handlar om hur man letar i listor med meningsfull information men för enkelhetens skull reduceras de till att leta efter numeriska nyckelvärden. Senare i diskussionen kommer vi titta på par nyckel, värde men inte mer komplicerat än så. DA2001 (Föreläsning 20) Datalogi 1 Hösten / 32

6 Några förenklingar I början av den här diskussionen kommer jag titta enbart på listor som innehåller numeriska värden. I normalfallet håller ingen reda på en massa tal utan snarare en informationspost som identifieras av ett nyckelvärde, där nyckelvärdet kan vara alltifrån ett tal till vilken komplicerad struktur som helst, bara nyckelvärdet är unikt i sammanhanget (eller nästan unikt i vissa fall) Exemplen handlar om hur man letar i listor med meningsfull information men för enkelhetens skull reduceras de till att leta efter numeriska nyckelvärden. Senare i diskussionen kommer vi titta på par nyckel, värde men inte mer komplicerat än så. I verkligheten kan informationsposterna vara mycket komplicerade men det förändrar ingenting i sak i diskussionen DA2001 (Föreläsning 20) Datalogi 1 Hösten / 32

7 Osorterade listor Vi har redan tittat på hur man letar i listor (i Scheme). Leta i en osorterad lista (L) i Python(3): def unsortedsearch(key, L): Pre: L är en lista med bara heltal och key är ett heltal. Post: find återsänder platsen där key finns eller None om key inte finns i listan L for index in range(len(l)): if L[index] == key: return index return None DA2001 (Föreläsning 20) Datalogi 1 Hösten / 32

8 Osorterade listor Vi har redan tittat på hur man letar i listor (i Scheme). Leta i en osorterad lista (L) i Python(3): def unsortedsearch(key, L): Pre: L är en lista med bara heltal och key är ett heltal. Post: find återsänder platsen där key finns eller None om key inte finns i listan L for index in range(len(l)): if L[index] == key: return index return None En enkel algoritm, O (n) om n är listans längd. DA2001 (Föreläsning 20) Datalogi 1 Hösten / 32

9 Sorterade listor Leta i en sorterad lista (L) i Python(3): def sortedsearch(key, L): Pre: L är en lista med bara heltal och key är ett heltal. Post: find återsänder platsen där key finns eller None om key inte finns i listan L for index in range(len(l)): if L[index] > key: return None elif L[index] == key: return index return None DA2001 (Föreläsning 20) Datalogi 1 Hösten / 32

10 Sorterade listor Leta i en sorterad lista (L) i Python(3): def sortedsearch(key, L): Pre: L är en lista med bara heltal och key är ett heltal. Post: find återsänder platsen där key finns eller None om key inte finns i listan L for index in range(len(l)): if L[index] > key: return None elif L[index] == key: return index return None Fortfarande en enkel algoritm, O (n) om n är listans längd. DA2001 (Föreläsning 20) Datalogi 1 Hösten / 32

11 Sorterade listor Leta i en sorterad lista (L) i Python(3): def sortedsearch(key, L): Pre: L är en lista med bara heltal och key är ett heltal. Post: find återsänder platsen där key finns eller None om key inte finns i listan L for index in range(len(l)): if L[index] > key: return None elif L[index] == key: return index return None Fortfarande en enkel algoritm, O (n) om n är listans längd. Men om sökning är väldigt vanlig är det ändå en viktig förbättring. DA2001 (Föreläsning 20) Datalogi 1 Hösten / 32

12 Jämförelse osorterad/sorterad lista Båda metoderna är O (n) så vi måste titta närmare. DA2001 (Föreläsning 20) Datalogi 1 Hösten / 32

13 Jämförelse osorterad/sorterad lista Båda metoderna är O (n) så vi måste titta närmare. Om det man letar efter oftast finns i listan är det, i genomsnitt, ingen skillnad. Man tittar i genomsnitt igenom halva listan. DA2001 (Föreläsning 20) Datalogi 1 Hösten / 32

14 Jämförelse osorterad/sorterad lista Båda metoderna är O (n) så vi måste titta närmare. Om det man letar efter oftast finns i listan är det, i genomsnitt, ingen skillnad. Man tittar i genomsnitt igenom halva listan. Om det man letar efter oftast inte finns i listan närmar man sig n i fallet med den osorterade listan medan man fortfarande ligger kvar på n/2 i en sorterad lista, förutsatt att det man letar efter är jämt fördelat i indexmängden. DA2001 (Föreläsning 20) Datalogi 1 Hösten / 32

15 Jämförelse osorterad/sorterad lista Båda metoderna är O (n) så vi måste titta närmare. Om det man letar efter oftast finns i listan är det, i genomsnitt, ingen skillnad. Man tittar i genomsnitt igenom halva listan. Om det man letar efter oftast inte finns i listan närmar man sig n i fallet med den osorterade listan medan man fortfarande ligger kvar på n/2 i en sorterad lista, förutsatt att det man letar efter är jämt fördelat i indexmängden. Så om vi letar ofta efter nyckelvärden som kanske inte finns representerade i vår lista är det bättre att sortera. DA2001 (Föreläsning 20) Datalogi 1 Hösten / 32

16 Leta i listor Metoder för sökning i sorterad lista Om listan är tillräckligt kort kan vi använda binärsökning (min variant): def binarysearch(key, L): left = 0 right = len(l) - 1 while left < right: mid = (left + right + 1) // 2 if key < L[mid]: right = mid - 1 else: left = mid if L[left] == key: return left else: return None DA2001 (Föreläsning 20) Datalogi 1 Hösten / 32

17 Leta i listor Metoder för sökning i sorterad lista... Ofta ser man följande variant, som är bra om det man söker efter oftast finns: def binarysearch(key, L): left = 0 right = len(l) - 1 while left < right: mid = (left + right + 1) // 2 if key == L[mid]: return mid if key < L[mid]: right = mid - 1 else: left = mid + 1 if L[left] == key: return left else: return None DA2001 (Föreläsning 20) Datalogi 1 Hösten / 32

18 Metoder för sökning i sorterad lista... Den första varianten är alltid O (2 log n ), den andra max 2 log n eftersom man då och då avbryter vid träff. Skillnaden är marginell men kan vara viktig i sökintensiva program. DA2001 (Föreläsning 20) Datalogi 1 Hösten / 32

19 Metoder för sökning i sorterad lista... Den första varianten är alltid O (2 log n ), den andra max 2 log n eftersom man då och då avbryter vid träff. Skillnaden är marginell men kan vara viktig i sökintensiva program. Men..., listorna kan vara för långa, så långa att de inte ryms i minnet. De kan då splittras så att man i den första listan har adresser till andra listor, där man går vidare tills man hittar rätt. DA2001 (Föreläsning 20) Datalogi 1 Hösten / 32

20 Leta i listor Metoder för sökning i sorterad lista... Den första varianten är alltid O (2 log n ), den andra max 2 log n eftersom man då och då avbryter vid träff. Skillnaden är marginell men kan vara viktig i sökintensiva program. Men..., listorna kan vara för långa, så långa att de inte ryms i minnet. De kan då splittras så att man i den första listan har adresser till andra listor, där man går vidare tills man hittar rätt. Här skissas endast idén som kommer från AI-området. Idén är genialisk och en sådan struktur (som kallas B-träd) hålls i balans (= alltid lika många operationer oavsett vad man söker efter), är sorterade och är extremt snabba att söka i. DA2001 (Föreläsning 20) Datalogi 1 Hösten / 32

21 Skiss av B-träd... Den grundläggande idén är att det mest effektiva är att hantera listor som ryms i ett block på sekundärminnet och som organiseras så att DA2001 (Föreläsning 20) Datalogi 1 Hösten / 32

22 Leta i listor Skiss av B-träd... Den grundläggande idén är att det mest effektiva är att hantera listor som ryms i ett block på sekundärminnet och som organiseras så att listorna innehåller nyckelvärden och adresser till motsvarande informationspost: till nästa löv till post med nyckel 56 till post med nyckel 87 till post med nyckel 96 Lövnod DA2001 (Föreläsning 20) Datalogi 1 Hösten / 32

23 Skiss av B-träd K < <= K < <= K < 103 K >= 103 Inre nod Eftersom lagom längd på en lista är så mycket som ryms i ett sekundärminnesblock kan man lätt räkna ut hur mycket som ryms. Adressen till ett minnesblock är (med 64-bits-ord) 8 byte lång och antar man att en nyckel är 8 byte lång (räcker t.ex. för ett personnummer) så får man antalet nycklar i en nod till n 8 + (n + 1) och n = 256 DA2001 (Föreläsning 20) Datalogi 1 Hösten / 32

24 Leta i listor Skiss av B-träd K < <= K < <= K < 103 K >= 103 Inre nod Eftersom lagom längd på en lista är så mycket som ryms i ett sekundärminnesblock kan man lätt räkna ut hur mycket som ryms. Adressen till ett minnesblock är (med 64-bits-ord) 8 byte lång och antar man att en nyckel är 8 byte lång (räcker t.ex. för ett personnummer) så får man antalet nycklar i en nod till n 8 + (n + 1) och n = 256 En lista som bara består av ett block kan alltså hålla 256 nyckelvärden. DA2001 (Föreläsning 20) Datalogi 1 Hösten / 32

25 Leta i listor Skiss av B-träd Exempel på B + -träd med tre nivåer DA2001 (Föreläsning 20) Datalogi 1 Hösten / 32

26 Skiss av B-träd... En inre nod innehåller 256 adresser till andra listor så med två nivåer kan listan bli = element lång och med tre nivåer element lång. Mer än nog för Sveriges befolkning... DA2001 (Föreläsning 20) Datalogi 1 Hösten / 32

27 Skiss av B-träd... En inre nod innehåller 256 adresser till andra listor så med två nivåer kan listan bli = element lång och med tre nivåer element lång. Mer än nog för Sveriges befolkning... Fordonsregistret registrerar alla svenska fordon och nycklarna är 6 tecken långa. En nod i en sådan lista kan innehålla n 6 + (n + 1) och n = 292 nycklar. Tre nivåer ger en lista som kan vara fordon lång och räcker mer än väl för Sveriges drygt 16 millioner fordon. DA2001 (Föreläsning 20) Datalogi 1 Hösten / 32

28 Skiss av B-träd... En inre nod innehåller 256 adresser till andra listor så med två nivåer kan listan bli = element lång och med tre nivåer element lång. Mer än nog för Sveriges befolkning... Fordonsregistret registrerar alla svenska fordon och nycklarna är 6 tecken långa. En nod i en sådan lista kan innehålla n 6 + (n + 1) och n = 292 nycklar. Tre nivåer ger en lista som kan vara fordon lång och räcker mer än väl för Sveriges drygt 16 millioner fordon. Sökningen blir extremt snabb. Antalet nivåer gånger tiden för binärsökning i noderna = O (2 log n ) och tittar man på inläsningar från sekundärminnet, som är det långsammaste vi kan hitta på förutom nätverkskommunikation så kan vi summera: Fyra läsningar och 3 2 log 292 = 24 jämförelser är rasande snabbt för att hitta en av upp till 25 millioner informationsposter. DA2001 (Föreläsning 20) Datalogi 1 Hösten / 32

29 Leta i listor Skiss av B-träd... En inre nod innehåller 256 adresser till andra listor så med två nivåer kan listan bli = element lång och med tre nivåer element lång. Mer än nog för Sveriges befolkning... Fordonsregistret registrerar alla svenska fordon och nycklarna är 6 tecken långa. En nod i en sådan lista kan innehålla n 6 + (n + 1) och n = 292 nycklar. Tre nivåer ger en lista som kan vara fordon lång och räcker mer än väl för Sveriges drygt 16 millioner fordon. Sökningen blir extremt snabb. Antalet nivåer gånger tiden för binärsökning i noderna = O (2 log n ) och tittar man på inläsningar från sekundärminnet, som är det långsammaste vi kan hitta på förutom nätverkskommunikation så kan vi summera: Fyra läsningar och 3 2 log 292 = 24 jämförelser är rasande snabbt för att hitta en av upp till 25 millioner informationsposter. Men det räcker inte alltid. I vissa situationer behövs ännu högre fart. DA2001 (Föreläsning 20) Datalogi 1 Hösten / 32

30 Snabbare än B-träd Om vi betraktar just personnummer kan vi se att vi alltid har 12 siffror (om vi har med århundradet). DA2001 (Föreläsning 20) Datalogi 1 Hösten / 32

31 Snabbare än B-träd Om vi betraktar just personnummer kan vi se att vi alltid har 12 siffror (om vi har med århundradet). Om nycklarna alltid är av samma längd kan vi trolla lite. Vi kan ta de fyra första siffrorna och bara titta på de två som vi brukar använda 45 i 1945, 93 i 1993, 12 i 2012 o.s.v. DA2001 (Föreläsning 20) Datalogi 1 Hösten / 32

32 Snabbare än B-träd Om vi betraktar just personnummer kan vi se att vi alltid har 12 siffror (om vi har med århundradet). Om nycklarna alltid är av samma längd kan vi trolla lite. Vi kan ta de fyra första siffrorna och bara titta på de två som vi brukar använda 45 i 1945, 93 i 1993, 12 i 2012 o.s.v. En lista med 100 platser räcker då. Där lagrar vi en lista med 12 platser, en för varje månad och i varje månadslista lägger vi en lista med 31 platser, en för varje dag i månaden. DA2001 (Föreläsning 20) Datalogi 1 Hösten / 32

33 Snabbare än B-träd Om vi betraktar just personnummer kan vi se att vi alltid har 12 siffror (om vi har med århundradet). Om nycklarna alltid är av samma längd kan vi trolla lite. Vi kan ta de fyra första siffrorna och bara titta på de två som vi brukar använda 45 i 1945, 93 i 1993, 12 i 2012 o.s.v. En lista med 100 platser räcker då. Där lagrar vi en lista med 12 platser, en för varje månad och i varje månadslista lägger vi en lista med 31 platser, en för varje dag i månaden. I varje daglista lägger vi tre listor med 334 platser. Vi behöver ju 2 byte för 3 sista siffrorna och utrymme för adressen = 10 byte som ger 409 poster per block men det är mindre än 500 så jag tar 3 listor eftersom jag behöver 1000 olika adresser. DA2001 (Föreläsning 20) Datalogi 1 Hösten / 32

34 Snabbare än B-träd Om vi betraktar just personnummer kan vi se att vi alltid har 12 siffror (om vi har med århundradet). Om nycklarna alltid är av samma längd kan vi trolla lite. Vi kan ta de fyra första siffrorna och bara titta på de två som vi brukar använda 45 i 1945, 93 i 1993, 12 i 2012 o.s.v. En lista med 100 platser räcker då. Där lagrar vi en lista med 12 platser, en för varje månad och i varje månadslista lägger vi en lista med 31 platser, en för varje dag i månaden. I varje daglista lägger vi tre listor med 334 platser. Vi behöver ju 2 byte för 3 sista siffrorna och utrymme för adressen = 10 byte som ger 409 poster per block men det är mindre än 500 så jag tar 3 listor eftersom jag behöver 1000 olika adresser. Nu har vi fyra nivåer men vi kommer åt informationsposterna utan binärsökning. Låt oss leta efter mig. Jag har personnumret DA2001 (Föreläsning 20) Datalogi 1 Hösten / 32

35 Snabbare än B-träd Om vi betraktar just personnummer kan vi se att vi alltid har 12 siffror (om vi har med århundradet). Om nycklarna alltid är av samma längd kan vi trolla lite. Vi kan ta de fyra första siffrorna och bara titta på de två som vi brukar använda 45 i 1945, 93 i 1993, 12 i 2012 o.s.v. En lista med 100 platser räcker då. Där lagrar vi en lista med 12 platser, en för varje månad och i varje månadslista lägger vi en lista med 31 platser, en för varje dag i månaden. I varje daglista lägger vi tre listor med 334 platser. Vi behöver ju 2 byte för 3 sista siffrorna och utrymme för adressen = 10 byte som ger 409 poster per block men det är mindre än 500 så jag tar 3 listor eftersom jag behöver 1000 olika adresser. Nu har vi fyra nivåer men vi kommer åt informationsposterna utan binärsökning. Låt oss leta efter mig. Jag har personnumret Sista siffran är bara kontrollsiffra, den skippar vi likaväl som de två första. Vi använder 45 för att gå till årslista 46 (man börjar ju på 0!), 11 (eller 11-1) för att där titta i månadslista 11, 12 för att titta i dagslista 12. DA2001 (Föreläsning 20) Datalogi 1 Hösten / 32

36 Snabbare än B-träd... Slutligen använder vi 035 = 35. Tag nu x,y = divmod(35,334) som ger x = 0 och y = 35 så vi använder lista nr 0 och där, på plats 35 hittar vi informationsposten för (platsen kan innehålla två poster om vi är nära den gräns där det kan finnas en nyligen född och en drygt hundraåring). DA2001 (Föreläsning 20) Datalogi 1 Hösten / 32

37 Leta i listor Snabbare än B-träd... Slutligen använder vi 035 = 35. Tag nu x,y = divmod(35,334) som ger x = 0 och y = 35 så vi använder lista nr 0 och där, på plats 35 hittar vi informationsposten för (platsen kan innehålla två poster om vi är nära den gräns där det kan finnas en nyligen född och en drygt hundraåring). Så, utan binär sökning, med fyra enkla uppslagningar har vi hittat bland alla levande personer i Sverige (eller alla personer som någonsin funnits i Sverige sedan nuvarande bokföringsmetod infördes). Idén är så bra att det bara finns en möjlighet att utveckla den: minska antalet uppslagningar. DA2001 (Föreläsning 20) Datalogi 1 Hösten / 32

38 Snabbare än B-träd... Acceptera personnummer på alla former , , , , och : def normalize(pnr): pnr = str(pnr) parts = pnr.split("-") res = "" for p in parts: res += p if len(res) == 12: res = res[2:12] return res Det som kommer ut från funktionen är strängen DA2001 (Föreläsning 20) Datalogi 1 Hösten / 32

39 Snabbare än B-träd... Kontrollera att det är ett personnummer: def checkpnr(pnr): checkpnr, checksiffra = divmod(pnr, 10) double = True summa = 0 mod = while checkpnr > 0: x, checkpnr = divmod (checkpnr, mod) mod = mod // 10 if double: x = 2*x x1,x2 = divmod(x,10) summa = summa + x1 + x2 double = not double return(summa + checksiffra) % 10 == 0 Om vi matat in ett korrekt personnummer på heltalsform returneras True annars False DA2001 (Föreläsning 20) Datalogi 1 Hösten / 32

40 Leta i listor Snabbare än B-träd... Räkna fram alla nycklar för att slå upp informationsposten: def findkeys(pnr): remember = pnr try: pnr = normalize(pnr) if len(pnr)!= 10: raise intpnr = int(pnr) if checkpnr(intpnr): år, intpnr = divmod(intpnr, ) månad, intpnr = divmod(intpnr, ) dag, intpnr = divmod(intpnr, 10000) personlista, plats = divmod (intpnr // 10, 334) return { år :år, månad :månad, dag :dag, personlista :personlista, plats :plats} else: raise except Exception: return " " + remember + " är inte ett korrekt personnummer!" DA2001 (Föreläsning 20) Datalogi 1 Hösten / 32

41 Leta i listor Snabbare än B-träd... Leta med fyra uppslagningar: (nästan) direkt-åtkomst DA2001 (Föreläsning 20) Datalogi 1 Hösten / 32

42 Leta i listor Hashing... Idealet är naturligtvis att vi kan hitta en informationspost på en uppslagning: Så... vad gör vi? direkt-åtkomst DA2001 (Föreläsning 20) Datalogi 1 Hösten / 32

43 Leta i listor Hashing... Om vi slår samman uppslagningstabellerna till en så får vi flera problem. Vi kan inte ha tillräckligt stora tabeller. DA2001 (Föreläsning 20) Datalogi 1 Hösten / 32

44 Leta i listor Hashing... Om vi slår samman uppslagningstabellerna till en så får vi flera problem. Vi kan inte ha tillräckligt stora tabeller. Vi kan åtgärda det genom att krympa tabellstorleken och hitta på en funktion som räknar om nyckeln till en lagom stor nyckel (en som hamnar inom tabellen) men då kan flera poster hamna på samma plats (få samma nyckel). DA2001 (Föreläsning 20) Datalogi 1 Hösten / 32

45 Leta i listor Hashing... Om vi slår samman uppslagningstabellerna till en så får vi flera problem. Vi kan inte ha tillräckligt stora tabeller. Vi kan åtgärda det genom att krympa tabellstorleken och hitta på en funktion som räknar om nyckeln till en lagom stor nyckel (en som hamnar inom tabellen) men då kan flera poster hamna på samma plats (få samma nyckel). Vi kan åtgärda detta på ett antal olika sätt. Alla dessa har använts i datorprogram. DA2001 (Föreläsning 20) Datalogi 1 Hösten / 32

46 Hashing... hashfunktionen Skapa en funktion h(key) som ger en hygglig spridning i adressrymden, d.v.s. som sprider de beräknade nyckelvärdena jämt över listan. h(key) = f(key) % len(list) där f beräknar, på ett enkelt sätt, ett nyckelvärde Beräkningen måste vara snabb och ge stora tal som resultat, t.ex. ger personnummer med - borttaget en i det närmaste perfekt spridning. Långa nycklar kan vikas i 32-bitars-längder. Korta nycklar kan kompletteras med ett salt för att få lagom längd. Hur vi än bär oss åt kan flera nycklar ge samma hash-värde. Man talar då om kollisioner. Det är viktigt att hantera dessa kollisioner så att man får snabb åtkomst av lagrade data. DA2001 (Föreläsning 20) Datalogi 1 Hösten / 32

47 Hashing... hashfunktionen Ett sätt att beräkna ett nyckelvärde som blir tillräckligt stort och som är snabbt i en dator är def hash1(x): y, z, n = 0, 0, 0 while x > 0: x, r = divmod(x, 10) z = z + r * (32**n) n += 1 return z 32 är en jämn multipel av 2 så det hanteras effektivt i datorn. DA2001 (Föreläsning 20) Datalogi 1 Hösten / 32

48 Hashing... hashfunktionen Man kan förenkla algoritmen (och få helt andra nyckelvärden) med def hash2(x): y = 10 z = 0 while x > 0: x, r = divmod(x, y) z = z * 32 + r return z Skulle men inte få tillräckligt stora värden eller dålig spridning kan man salta på många olika sätt. DA2001 (Föreläsning 20) Datalogi 1 Hösten / 32

49 Leta i listor Hashing... hashfunktionen Har man teckensträngar kan man göra likadant men ta teckenkoden: def hash3(s): k = 0 for i in s: k = ord(i) + k * 32 return k eller slå ihop koderna för varje tecken som om det vore strängar: def hash4(x): x = str(x) k = for i in x: k += str(ord(i)) return int(k) Man måste väga programspråkets egenskaper mot enkelhet i beräkningen. DA2001 (Föreläsning 20) Datalogi 1 Hösten / 32

50 Leta i listor Hashing... linjär sondering Vid kollision kan vi hitta närmaste lediga plats. Kallas linjär sondering (linear probing). def rehash(key, hashtable): i = 1 s = len(hashtable) while hashtable[(key + i) % s]: i += 1 return i Fördel: man hittar alltid en plats. Nackdel: vid hopklumpningar försämras åtkomsttiden snabbt DA2001 (Föreläsning 20) Datalogi 1 Hösten / 32

51 Leta i listor Hashing... linjär sondering DA2001 (Föreläsning 20) Datalogi 1 Hösten / 32

52 Hashing... kvadratisk sondering En bättre idé kan vara kvadratisk sondering (quadratic probing): def rehash(key, hashtable): i = 1 s = len(hashtable) while hashtable[(key + i * i) % s]: i += 1 return i som ju kan varieras: ((key + i) * i) % s Fördel: minimerar hopklumpningar Nackdel: tabellen måste vara minst dubbelt så stor som antalet värden som förväntas lagras och ha primtalsstorlek eftersom metoden bara garanterar genomgång av halva tabellen och bara om storleken är ett primtal. DA2001 (Föreläsning 20) Datalogi 1 Hösten / 32

53 Leta i listor Hashing... kvadratisk sondering DA2001 (Föreläsning 20) Datalogi 1 Hösten / 32

54 Hashing... andra ideer Man kan använda vilken funktion som helst för kollisionshantering men bör hålla beräkningen enkel. Man kan testa C 1 x 2 + C 2 x + C 3 där man varierar konstanterna tills man får en, för den aktuella applikationen, bra fördelning. Hur man än bär sig åt är kollisionshantering arbetsamt. Trots att det går fort vill man i vissa fall ha en ännu snabbare uppslagning. En kombination av hashing med de tidigare idéerna kan vara bra. Vi kunde i den ursprungliga idén med uppslagning få två personposter på samma plats om en var precis hundra år äldre än en annan. Det kan man hantera genom att ha plats för mer än en post. Varför inte en kort lista? Tittar man på statistik över kollisioner men inte gör något åt dem ser man att det inte blir så många. 5-6, kanske upp till 20 om vi krymper hashlistan. Vi är framme vid det snabbaste vi kan åstadkomma: O (()1). En uppslagning och titta i listan vi hittar på den platsen. DA2001 (Föreläsning 20) Datalogi 1 Hösten / 32

55 Leta i listor Hashing... kollisionslistor DA2001 (Föreläsning 20) Datalogi 1 Hösten / 32

56 Hashing Användningsområden Användbart, javisst. Hashtekniker som beskrivits här med en stor mängd variationer används ofta. Snabb hantering av Pythons dict. Man använder ganska små hashtabeller med kollisionslistor. Python har en inbyggd hash-funktion som duger bra till det mesta. Många OS (inklusive Linux) använder metoden för att snabbt hitta bland tillgängliga program. Telefonbolagen använder hashtabeller vid uppringningar. En uppkoppling kan ta många vägar genom telefonnätet så man bygger hashtabeller för att hålla reda på uppringningarna. Skurar på flera tusen (ibland tiotusentals) uppringningar måste hanteras snabbt och när uppkopplingen är klar måste man snabbt städa i väntan på nästa skur. Men filssytem behöver kunna räkna upp saker i ordning och då duger inte hashing. Filsystemet använder den näst snabbaste metoden, B + -träd. DA2001 (Föreläsning 20) Datalogi 1 Hösten / 32

57 Nästa gång Vi ska nu gå över till att blicka bakåt och utåt. Lite dator- och datorprogrammeringshistoria. Titta lite på hur man löst grundläggande funktionalitet i andra programmeringsspråk och jämföra. DA2001 (Föreläsning 20) Datalogi 1 Hösten / 32

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

Hashing Bakom kulisserna på Pythons dictionary. Leta i listor Osorterade listor. Leta i listor Sorterade listor Hashing Bakom kulisserna på Pythons dictionary Några förenklingar I början av den här diskussionen kommer jag titta enbart på listor som innehåller numeriska värden. Innehåll Några förenklingar Olika ideer

Läs mer

Hashing Bakom kulisserna på Pythons dictionary

Hashing Bakom kulisserna på Pythons dictionary Hashing Bakom kulisserna på Pythons dictionary Innehåll Några förenklingar Olika ideer om hashing I python förr Och nu DA2001 (Föreläsning 20) Datalogi 1 Hösten 2018 1 / 32 Några förenklingar I början

Läs mer

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

Sökning i ordnad lista. Sökning och sortering. Sökning med vaktpost i oordnad lista Sökning och sortering Sökning i oordnad lista Att söka efter data man lagrat undan för senare användning är vanligt Egentligen har man ingen annan anledning för att lagra undan data Har man mycket data

Läs mer

Grundläggande datalogi - Övning 4

Grundläggande datalogi - Övning 4 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

Läs mer

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

Avbildningar och hashtabeller. Koffman & Wolfgang kapitel 7, mestadels avsnitt 2 4 Avbildningar och hashtabeller Koffman & Wolfgang kapitel 7, mestadels avsnitt 2 4 1 2 Mängder i Java 3 Mängd-gränssnittet Set vs. List Mängder får endast innehålla unika element: Metoden.add(E) returnerar

Läs mer

Magnus Nielsen, IDA, Linköpings universitet

Magnus Nielsen, IDA, Linköpings universitet Föreläsning ADT Map/Dictionary, hashtabeller TDDC9,TDDE22,725G97: DALG Utskriftsversion av föreläsning i Datastrukturer och algoritmer 7 september 208 Magnus Nielsen, IDA, Linköpings universitet. ADT Map/Dictionary.

Läs mer

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

Tommy Färnqvist, IDA, Linköpings universitet. 1 ADT Map/Dictionary 1 1.1 Definitioner... 1 1.2 Implementation... 2 Föreläsning 4 ADT Map/Dictionary, hashtabeller, skip-listor TDDC91: DALG Utskriftsversion av föreläsning i Datastrukturer och algoritmer 9 september 2015 Tommy Färnqvist, IDA, Linköpings universitet 4.1

Läs mer

Repetition i Python 3. Exemplen fac. Exemplen fac motivering. Exemplen fac i Python

Repetition i Python 3. Exemplen fac. Exemplen fac motivering. Exemplen fac i Python Repetition i Python 3 Exemplen fac Orginalet I Scheme använde vi rekursion för all slags repetition. Efterom Scheme är ett funktionellt språk återsänder alla språkkonstruktioner ett värde men i Python

Läs mer

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

Tommy Färnqvist, IDA, Linköpings universitet. 1 ADT Map/Dictionary 1 1.1 Definitioner... 1 1.2 Implementation... 2 Föreläsning 5 ADT Map/Dictionary, hashtabeller TDDI16: DALG Utskriftsversion av föreläsning i Datastrukturer och algoritmer 16 september 2015 Tommy Färnqvist, IDA, Linköpings universitet 5.1 Innehåll Innehåll

Läs mer

Sökning och sortering. Sökning och sortering - definitioner. Sökning i oordnad lista. Sökning med vaktpost i oordnad lista

Sökning och sortering. Sökning och sortering - definitioner. Sökning i oordnad lista. Sökning med vaktpost i oordnad lista Sökning och sortering Sökning och sortering - definitioner Att söka efter data man lagrat undan för senare användning är vanligt Egentligen har man ingen annan anledning för att lagra undan data Har man

Läs mer

Sökning och sortering

Sökning och sortering Sökning och sortering Att söka efter data man lagrat undan för senare användning är vanligt Egentligen har man ingen annan anledning för att lagra undan data Har man mycket data och många sökningar måste

Läs mer

Datastrukturer. föreläsning 6. Maps 1

Datastrukturer. föreläsning 6. Maps 1 Datastrukturer föreläsning 6 Maps 1 Avbildningar och lexika Maps 2 Vad är ett lexikon? Namn Telefonnummer Peter 031-405937 Peter 0736-341482 Paul 031-405937 Paul 0737-305459 Hannah 031-405937 Hannah 0730-732100

Läs mer

Pythons standardbibliotek

Pythons standardbibliotek Pythons standardbibliotek Python 3 skall, enligt standarddokumenten http://docs.python.org/py3k/library/index.html ha stöd för vissa funktioner, typer och datastrukturer Så länge man håller sig till detta

Läs mer

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

Python. Python är, som Scheme, ett interpreterat språk men det finns kompilatorer för Python. är, som Scheme, ett interpreterat språk men det finns kompilatorer för. När man interpreterar ett språk tillhandahåller man en interpretator som läser sats för sats och försöker tolka den. När man kompilerar

Läs mer

Hashtabeller! (& kanske lite sortering)

Hashtabeller! (& kanske lite sortering) Datalogiövning 24/1 2007 Hashtabeller! (& kanske lite sortering) Allmänt om hashtabeller: Snabb lösning för sökningar, O(1). Man lagrar par av nycklar och värden. En hashfunktion beräknar ur nyckeln ett

Läs mer

Övning 4. Hashning, sortering, prioritetskö, bästaförstsökning. Hitta på en perfekt hashfunktion för atomer. Hur stor blir hashtabellen?

Övning 4. Hashning, sortering, prioritetskö, bästaförstsökning. Hitta på en perfekt hashfunktion för atomer. Hur stor blir hashtabellen? Per Sedholm DD1320 (tilda12) 2012-09-20 Övning 4 Hashning, sortering, prioritetskö, bästaförstsökning 1. Perfekt hashfunktion Hitta på en perfekt hashfunktion för atomer. Hur stor blir hashtabellen? Vi

Läs mer

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

Python. Python är, som Scheme, ett interpreterat språk men det finns kompilatorer för Python. är, som Scheme, ett interpreterat språk men det finns kompilatorer för. När man interpreterar ett språk tillhandahåller man en interpretator som läser sats för sats och försöker tolka den. När man kompilerar

Läs mer

Några saker till och lite om snabbare sortering

Några saker till och lite om snabbare sortering Några saker till och lite om snabbare sortering Generellt om avbrott Generera avbrott Snabb sortering principer Snabb sortering i Scheme och Python QuickSort (dela städat slå ihop) Mergesort (dela slå

Läs mer

Övningsuppgifter #11, Programkonstruktion och datastrukturer

Övningsuppgifter #11, Programkonstruktion och datastrukturer Övningsuppgifter #11, Programkonstruktion och datastrukturer Lösningsförslag Elias Castegren elias.castegren@it.uu.se Övningar 1. 1 2. 2 3. Ett binomialträd med rang n har 2 n noder. En binomial heap innehåller

Läs mer

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.

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. Tentamen Programmeringsteknik II 2015-05-26 Skrivtid: 0800 1300 Tänk på följande Skriv läsligt! Använd inte rödpenna! Skriv bara på framsidan av varje papper. Börja alltid ny uppgift på nytt papper. Lägg

Läs mer

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

Datastrukturer och algoritmer. Innehåll. Tabell. Tabell - exempel. Gränsyta till Tabell. Tabell. Modell. Hashtabell Relation, lexikon. Datastrukturer och algoritmer Föreläsning 7 Tabell, hashtabell Relation & lexikon Innehåll Tabell Tabell Hashtabell Relation, lexikon Modell Uppslagsbok Organisation Ändlig avbildning av argument på värden

Läs mer

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

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 Översikt Linjär sökning Sökning Binär sökning Hashtabeller Programmering tillämpningar och datastrukturer 2 Linjär sökning Binärt sökträd Undersök ett element i taget tills du hittar det sökta Komplexitet

Läs mer

Hashtabeller. TDA416, lp3 2016

Hashtabeller. TDA416, lp3 2016 Hashtabeller TDA416, lp3 2016 Mängder och avbildningar (Sets and Maps) I den abstrakta datatypen avbildning/uppslagstabell (Map) lagras nyckelvärde-par. Grundläggande operationerna är insättning, borttagning

Läs mer

Karlstads Universitet, Datavetenskap 1

Karlstads Universitet, Datavetenskap 1 DAV B04 - Databasteknik KaU - Datavetenskap - DAV B04 - MGö 151 Lagring av databaser på sekundärminne Att läsa/skriva på sekundärminne (hårddisk) är en långsam process jämfört med operationer i primärminnet

Läs mer

Innehåll. Föreläsning 10. Specifikation. Mängd. Specifikation. Konstruktion av mängd. Mängd Lexikon Hashtabell

Innehåll. Föreläsning 10. Specifikation. Mängd. Specifikation. Konstruktion av mängd. Mängd Lexikon Hashtabell Innehåll Föreläsning Mängd, lexikon och hashtabell Mängd Lexikon Hashtabell Mängd Specifikation Modell: En påse, men den är inte riktigt bra eftersom man tex kan ha mängder med gemensamma element. Organisation:

Läs mer

Tentamen kl Uppgift 4. Uppgift 5

Tentamen kl Uppgift 4. Uppgift 5 2D344 Grundläggande Datalogi för F Tentamen 2003-03-0 kl 4.00 9.00 Inga hjälpmedel. Endast ett svarsalternativ på varje fråga är korrekt. Felaktigt svar eller felaktigt antal ikryssade svarsalternativ

Läs mer

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?

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? Föreläsning 10 Datalogi 1 DA2001 python introduktion Variabler Datatyp Aritmetiska operatorer av typer Reserverade ord logiska operatorer If-sats kommentarer på skärmen print( Hej ) print( Hur är det?

Läs mer

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

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 Innehåll Föreläsning 12 Sökträd Sökning Sökning och Sökträd 383 384 Binärt sökträd Används för sökning i linjära samlingar av dataobjekt, specifikt för att konstruera tabeller och lexikon. Organisation:

Läs mer

Programkonstruktion och. Datastrukturer

Programkonstruktion och. Datastrukturer Programkonstruktion och Datastrukturer Repetitionskurs, sommaren 2011 Datastrukturer (hash-tabeller och heapar) Elias Castegren elias.castegren.7381@student.uu.se Arrayer igen En array är en linjär datastruktur

Läs mer

Föreläsning 2 Programmeringsteknik och Matlab DD1312. Programspråk. Utskrift på skärmen

Föreläsning 2 Programmeringsteknik och Matlab DD1312. Programspråk. Utskrift på skärmen Föreläsning 2 Programmeringsteknik och Matlab DD1312 Introduktion till python Variabler,datatyper, omvandling av typer sfunktioner Två olika typer av program omvandlar högnivå till lågnivå program: Interpreterande

Läs mer

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

Föreläsningsanteckningar, Introduktion till datavetenskap HT S4 Datastrukturer. Tobias Wrigstad 1 Datatyper Tobias Wrigstad Det finns flera olika typer av (slags) data Olika datatyper har olika egenskaper. T.ex. är ett personnummer inte ett tal. (Den sista siffran skall stämma enligt den s.k. Luhnalgoritmen

Läs mer

DD1320 Tillämpad datalogi. Lösnings-skiss till tentamen 2010-10-18

DD1320 Tillämpad datalogi. Lösnings-skiss till tentamen 2010-10-18 DD1320 Tillämpad datalogi Lösnings-skiss till tentamen 2010-10-18 1. Mormors mobil 10p M O R M O R S M O B I L M O R M O R S M O B I L i 1 2 3 4 5 6 7 8 9 10 11 12 next[i] 0 1 1 0 1 1 4 0 1 3 1 1 Bakåtpilarna/next-värde

Läs mer

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å

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å Binära träd 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å gånger, talar man om binära träd. Sådana

Läs mer

Datalogi för E Övning 3

Datalogi för E Övning 3 Datalogi för E Övning 3 Mikael Huss hussm@nada.kth.se AlbaNova, Roslagstullsbacken 35 08-790 62 26 Kurshemsida: http://www.csc.kth.se/utbildning/kth/kurser/2d1343/datae06 Dagens program Att skapa egna

Läs mer

Databaser - Design och programmering. Minnesteknik. Minnesteknik, forts. Hårddisk. Primärminne (kretsteknik) Fysisk design av databasen

Databaser - Design och programmering. Minnesteknik. Minnesteknik, forts. Hårddisk. Primärminne (kretsteknik) Fysisk design av databasen Databaser Design och programmering Fysisk design av databasen att ta hänsyn till implementationsaspekter minnesteknik filstrukturer indexering Minnesteknik Primärminne (kretsteknik) Flyktigt Snabbt Dyrt

Läs mer

Datastrukturer. föreläsning 10. Maps 1

Datastrukturer. föreläsning 10. Maps 1 Datastrukturer föreläsning 10 Maps 1 Minsta uppspännande träd Maps 2 Minsta uppspännande träd Uppspännande träd till graf fritt delträd innehåller alla noderna Minsta uppspännande träd (MST) är det uppspännande

Läs mer

Föreläsning 6 Datastrukturer (DAT037)

Föreläsning 6 Datastrukturer (DAT037) Föreläsning 6 Datastrukturer (DAT037) Fredrik Lindblad 1 2016-11-17 1 Slides skapade av Nils Anders Danielsson har använts som utgångspunkt. Se http://www.cse.chalmers.se/edu/year/2015/course/dat037 Förra

Läs mer

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

Föreläsning 8. Mängd, Avbildning, Hashtabell Föreläsning 8 Mängd, Avbildning, Hashtabell Föreläsning 8 Mängd (Set) Avbildning (Map) Hashtabeller Hashkoder Öppen adressering Länkning Implementering Mängd En mängd är en samling som inte innehåller

Läs mer

TENTAMEN I DATASTRUKTURER OCH ALGORITMER DVG B kl. 14:00-19:00

TENTAMEN I DATASTRUKTURER OCH ALGORITMER DVG B kl. 14:00-19:00 TENTAMEN I DATASTRUKTURER OCH ALGORITMER DVG B03 170117 kl. 14:00-19:00 Ansvarig Lärare: Donald F. Ross Hjälpmedel: Inga. Algoritmerna finns i de respektive uppgifterna eller i bilagarna. *** OBS *** Betygsgräns:

Läs mer

Föreläsning 2 Programmeringsteknik och Matlab DD1312. Programspråk. Utskrift på skärmen

Föreläsning 2 Programmeringsteknik och Matlab DD1312. Programspråk. Utskrift på skärmen Föreläsning 2 Programmeringsteknik och Matlab DD1312 Introduktion till python Variabler, datatyper, omvandling av typer sfunktioner Två olika typer av program omvandlar högnivå till lågnivå program: Interpreterande

Läs mer

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

DD1320 Tillämpad datalogi. Lösning (skiss) till tenta 20 okt 2011 DD1320 Tillämpad datalogi Lösning (skiss) till tenta 20 okt 2011 1 KMP P I P P I N i 1 2 3 4 5 6 Next[i] 0 1 0 2 1 3 2 Huffmankodning: Algoritmen 1. Sortera tecknen som ska kodas i stigande förekomstordning.

Läs mer

Databaser Design och programmering Minnesteknik Minnesteknik, forts Utvecklingen Hårddisk Hårddisk, forts

Databaser Design och programmering Minnesteknik Minnesteknik, forts Utvecklingen Hårddisk Hårddisk, forts Databaser Design och programmering Fysisk design av databasen att ta hänsyn till implementationsaspekter minnesteknik filstrukturer indexering 1 Minnesteknik Primärminne (kretsteknik) Flyktigt Snabbt Dyrt

Läs mer

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

Sid 1 Kapitel 7: Sökning (Hashning) Hashning Sid 1 Hashning 7-1 Hashning är en teknik för att göra insättningar, borttag och sökningar i en tabell, på en konstant tid. Hashning stödjer ej operationer av ordnande karaktär som t ex:» finn minsta/största.»

Läs mer

TDDI16 Datastrukturer och algoritmer. Algoritmanalys

TDDI16 Datastrukturer och algoritmer. Algoritmanalys TDDI16 Datastrukturer och algoritmer Algoritmanalys 2017-08-28 2 Översikt Skäl för att analysera algoritmer Olika fall att tänka på Medelfall Bästa Värsta Metoder för analys 2017-08-28 3 Skäl till att

Läs mer

Föreläsning REPETITION & EXTENTA

Föreläsning REPETITION & EXTENTA Föreläsning 18 19 REPETITION & EXTENTA Programmeringsteknik på 45 minuter Klasser och objekt Variabler: attribut, lokala variabler, parametrar Datastrukturer Algoritmer Dessa bilder är inte repetitionsbilder

Läs mer

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

Föreläsning 2 Programmeringsteknik och C DD1316. Mikael Djurfeldt Föreläsning 2 Programmeringsteknik och C DD1316 Mikael Djurfeldt Föreläsning 2 Programmeringsteknik och C Python introduktion Utskrift Inläsning Variabler Datatyp Aritmetiska operatorer Omvandling

Läs mer

TENTAMEN: Algoritmer och datastrukturer. Läs detta!

TENTAMEN: Algoritmer och datastrukturer. Läs detta! (6) TENTAMEN: Algoritmer och datastrukturer Läs detta! Uppgifterna är inte avsiktligt ordnade efter svårighetsgrad. Börja varje uppgift på ett nytt blad. Skriv ditt idnummer på varje blad (så att vi inte

Läs mer

Föreläsning 18 Filer och avbildningar

Föreläsning 18 Filer och avbildningar Föreläsning 18 Filer och avbildningar Grundkurs i programmering Jan Lönnberg Institutionen för datateknik -universitetets högskola för teknikvetenskaper 15.11.2011 Avbildningar Hur skulle du göra en: Ordlista

Läs mer

TDDE44 Programmering, grundkurs

TDDE44 Programmering, grundkurs TDDE44 Programmering, grundkurs Föreläsning 5 Jody Foo, jody.foo@liu.se Föreläsning 5 & 6 Laboration 3: En egen pokedex data från webben Ny datatyp: dictionary Mer om dataabstraktion Nästlade datastrukturer

Läs mer

Alla datorprogram har en sak gemensam; alla processerar indata för att producera något slags resultat, utdata.

Alla datorprogram har en sak gemensam; alla processerar indata för att producera något slags resultat, utdata. Att förstå variabler Alla datorprogram har en sak gemensam; alla processerar indata för att producera något slags resultat, utdata. Vad är en variabel? En variabel är en plats att lagra information. Precis

Läs mer

Dugga Datastrukturer (DAT036)

Dugga Datastrukturer (DAT036) Dugga Datastrukturer (DAT036) Duggans datum: 2012-11-21. Författare: Nils Anders Danielsson. För att en uppgift ska räknas som löst så måste en i princip helt korrekt lösning lämnas in. Enstaka mindre

Läs mer

DAI2 (TIDAL) + I2 (TKIEK)

DAI2 (TIDAL) + I2 (TKIEK) TNTMN KURSNMN PROGRM: KURSTKNING XMINTOR lgoritmer och datastrukturer I2 (TIL) + I2 (TKIK) 2017/2018, lp 4 LT75 Uno Holmer TI ÖR TNTMN redagen den 1/8 2018, 08.0-12.0 HJÄLPML NSVRIG LÄRR atastrukturer

Läs mer

Föreläsning 2 Programmeringsteknik DD1310. Programmering. Programspråk

Föreläsning 2 Programmeringsteknik DD1310. Programmering. Programspråk Föreläsning 2 steknik DD1310 python introduktion Variabler Datatyp Aritmetiska operatorer av typer Reserverade ord logiska operatorer If-sats kommentarer funktioner betyder att instruera en dator Ett program

Läs mer

Föreläsning 5 Innehåll

Föreläsning 5 Innehåll Föreläsning 5 Innehåll Algoritmer och effektivitet Att bedöma och jämföra effektivitet för algoritmer Begreppet tidskomplexitet Datavetenskap (LTH) Föreläsning 5 VT 2019 1 / 39 Val av algoritm och datastruktur

Läs mer

Föreläsning 9 Datastrukturer (DAT037)

Föreläsning 9 Datastrukturer (DAT037) Föreläsning Datastrukturer (DAT07) Fredrik Lindblad 27 november 207 Slides skapade av Nils Anders Danielsson har använts som utgångspunkt Se http://wwwcsechalmersse/edu/year/20/course/dat07 Innehåll 2

Läs mer

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

Översikt. Stegvis förfining. Stegvis förfining. Dekomposition. Algoritmer. Metod för att skapa ett program från ett analyserat problem Översikt Stegvis förfining Pseudokod Flödesdiagram Dekomposition KISS-regeln Procedurell dekomposition DRY-regeln Algoritmer Sortering och sökning Stegvis förfining Metod för att skapa ett program från

Läs mer

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

Programmering för språkteknologer II, HT2014. evelina.andersson@lingfil.uu.se Rum 9-2035 http://stp.ling.uu.se/~evelina/uv/uv14/pst2/ Programmering för språkteknologer II, HT2014 Avancerad programmering för språkteknologer, HT2014 evelina.andersson@lingfil.uu.se Rum 9-2035 http://stp.ling.uu.se/~evelina/uv/uv14/pst2/ Idag - Hashtabeller

Läs mer

Programkonstruktion och Datastrukturer

Programkonstruktion och Datastrukturer Programkonstruktion och Datastrukturer VT 2012 Tidskomplexitet Elias Castegren elias.castegren.7381@student.uu.se Problem och algoritmer Ett problem är en uppgift som ska lösas. Beräkna n! givet n>0 Räkna

Läs mer

Tommy Färnqvist, IDA, Linköpings universitet. 1 Administrativ information 1 1.1 Upplägg... 1

Tommy Färnqvist, IDA, Linköpings universitet. 1 Administrativ information 1 1.1 Upplägg... 1 Föreläsning 1 Kursadministration, ADT Map/Dictionary, hashtabeller TDDD71: DALG Utskriftsversion av föreläsning i Datastrukturer och algoritmer 3 november 2015 Tommy Färnqvist, IDA, Linköpings universitet

Läs mer

Kryptering. Krypteringsmetoder

Kryptering. Krypteringsmetoder Kryptering Kryptering är att göra information svårläslig för alla som inte ska kunna läsa den. För att göra informationen läslig igen krävs dekryptering. Kryptering består av två delar, en algoritm och

Läs mer

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

Föreläsning 5 Programmeringsteknik DD1310. Modulen doctest. Exempel. Doctest Dictionary Filhantering Föreläsning 5 Programmeringsteknik DD1310 Doctest Modulen doctest Man kan använda modulen doctest för att testa programmet på ett mer systematiskt sätt. Så här gör man: 1. Skriver programmets funktioner

Läs mer

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

Föreläsning 8. Mängd, Avbildning, Hashtabell Föreläsning 8 Mängd, Avbildning, Hashtabell Föreläsning 8 Mängd (Set) Avbildning (Map) Hashtabeller Hashkoder Öppen adressering Länkning Effektivitet och minneskrav Implementering Läsanvisning och uppgifter

Läs mer

Föreläsning 5 Datastrukturer (DAT037)

Föreläsning 5 Datastrukturer (DAT037) Föreläsning 5 Datastrukturer (DAT037) Nils Anders Danielsson, Fredrik Lindblad 2016-11-14 Förra gången: Cirkulära arrayer Prioritetskö Binära heapar Leftistheapar merge Det verkar inte gå att slå ihop

Läs mer

Sökning och sortering

Sökning och sortering Sökning och sortering Programmering för språkteknologer 2 Sara Stymne 2013-09-16 Idag Sökning Analys av algoritmer komplexitet Sortering Vad är sökning? Sökning innebär att hitta ett värde i en samling

Läs mer

Föreläsning 2 Programmeringsteknik och C DD1316. Programmering. Programspråk

Föreläsning 2 Programmeringsteknik och C DD1316. Programmering. Programspråk Föreläsning 2 steknik och C DD1316 python introduktion Variabler Datatyp Aritmetiska operatorer av typer Reserverade ord logiska operatorer If-sats kommentarer betyder att instruera en dator Ett program

Läs mer

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.

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. Moduler 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. Vi har också ofta behov av att skapa överblick i våra program. Som ett

Läs mer

Laboration: Whitebox- och blackboxtesting

Laboration: Whitebox- och blackboxtesting Tilda11 höstterminen 2011 Laboration: Whitebox- och blackboxtesting Mål med laborationen Du ska lära dig begreppen white-box testing och black-box testing Du ska öva dig på att konstruera testfall Du ska

Läs mer

729G74 IT och programmering, grundkurs. Tema 3. Föreläsning 2 Jody Foo,

729G74 IT och programmering, grundkurs. Tema 3. Föreläsning 2 Jody Foo, 729G74 IT och programmering, grundkurs Tema 3. Föreläsning 2 Jody Foo, jody.foo@liu.se Föreläsningsöversikt Repetition: syntax-quiz Fler for-loopar (över listor och dictionaries) range() Nästlade strukturer

Läs mer

Tabeller. Programkonstruktion. Moment 8 Om abstrakta datatyper och binära sökträd. Implementering av tabellen. Operationer på tabellen

Tabeller. Programkonstruktion. Moment 8 Om abstrakta datatyper och binära sökträd. Implementering av tabellen. Operationer på tabellen Programkonstruktion Moment 8 Om abstrakta datatyper och binära sökträd Tabeller En viktig tillämpning är tabellen att ifrån en nyckel kunna ta fram ett tabellvärde. Ett typiskt exempel är en telefonkatalog:

Läs mer

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

Innehåll. F7: Tabell, hashtabell, relation & lexikon. Gränsyta till Tabell. Tabell. Tabell Hashtabell Relation Lexikon. Innehåll F7: Tabell, hashtabell, relation & lexikon Niclas Börlin 5DV49 Datastrukturer och algoritmer Tabell Hashtabell Relation Lexikon Tabell Gränsyta till Tabell Modell Uppslagsbok Organisation Ändlig

Läs mer

1/15/2013. DD1310/DD1314/DA3009 Programmeringsteknik. Lärandemål... Vilka läser kursen? ...fler lärandemål VARFÖR? Föreläsning 1

1/15/2013. DD1310/DD1314/DA3009 Programmeringsteknik. Lärandemål... Vilka läser kursen? ...fler lärandemål VARFÖR? Föreläsning 1 Skolan för Datavetenskap och kommunikation DD1310/DD1314/DA3009 Programmeringsteknik Föreläsning 1 Kursinfo Diagnostiskt prov Python-intro: print variabler reserverade ord input kommentarer beräkningar

Läs mer

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

if (n==null) { return null; } else { return new Node(n.data, copy(n.next)); Inledning I bilagor finns ett antal mer eller mindre ofullständiga klasser. Klassen List innehåller några grundläggande komponenter för att skapa och hantera enkellänkade listor av heltal. Listorna hålls

Läs mer

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

Namn: (Ifylles av student) Personnummer: (Ifylles av student) Tentamensdatum: Tid: Hjälpmedel: Inga hjälpmedel Data- och Programstrukturer Provmoment: Ladokkod: Tentamen ges för: Omtentamen NDP011 Systemarkitektprogrammet 7,5 högskolepoäng Namn: (Ifylles av student) Personnummer: (Ifylles av student) Tentamensdatum:

Läs mer

Föreläsning 2 Programmeringsteknik DD1310. Programmering. Programspråk

Föreläsning 2 Programmeringsteknik DD1310. Programmering. Programspråk Föreläsning 2 steknik DD1310 Python introduktion Variabler Datatyper Aritmetiska operatorer av typer Reserverade ord logiska operatorer If-sats kommentarer betyder att instruera en dator Ett program är

Läs mer

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

Föreläsning 7: Prioritetskö, trappa heapsort, hashning Föreläsning 7: Prioritetskö, trappa heapsort, hashning Prioritetskö, Trappa Heapsort Bästaförstsökning Implementation hashning Prioritetskö När man poppar en stack får man ut det senast inpushade. När

Läs mer

Programmeringsmetodik DV1 Programkonstruktion 1. Moment 8 Om abstrakta datatyper och binära sökträd

Programmeringsmetodik DV1 Programkonstruktion 1. Moment 8 Om abstrakta datatyper och binära sökträd Programmeringsmetodik DV1 Programkonstruktion 1 Moment 8 Om abstrakta datatyper och binära sökträd PK1&PM1 HT-06 moment 8 Sida 1 Uppdaterad 2005-09-22 Tabeller En viktig tillämpning är tabellen att ifrån

Läs mer

Tenta i Grundläggande programmering DD klockan

Tenta i Grundläggande programmering DD klockan Tenta i Grundläggande programmering DD1331 2017-10-20 klockan 14.00 16.00 Marcus Dicander, KTH CST Tillåtna hjälpmedel: En Pythonbok, skrivmaterial, mat, medicin och vattenflaska. Otillåtna hjälpmedel:

Läs mer

Föreläsning Datastrukturer (DAT036)

Föreläsning Datastrukturer (DAT036) Föreläsning Datastrukturer (DAT036) Nils Anders Danielsson 2013-11-27 Idag Balanserade sökträd Splayträd Skipplistor AVL-träd AVL-träd Sökträd Invariant (för varje nod): Vänster och höger delträd har samma

Läs mer

Algoritmer och datastrukturer

Algoritmer och datastrukturer Algoritmer och datastrukturer Binära sökträd Hash Tabeller Sökning Många datastukturer försöker uppnå den effektivaste sökningen I arrayer - linjer sökning, och binärt sökning när arrayen kan vara sörterad

Läs mer

Föreläsning Datastrukturer (DAT036)

Föreläsning Datastrukturer (DAT036) Föreläsning Datastrukturer (DAT036) Nils Anders Danielsson 2013-11-13 Idag Grafer: Terminologi. Datastrukturer. Topologisk sortering. Kortaste vägen. Bredden först-sökning. Dijkstras algoritm. (Vi får

Läs mer

Ordlistor, filhantering och ut på webben. Linda Mannila 20.11.2007

Ordlistor, filhantering och ut på webben. Linda Mannila 20.11.2007 Ordlistor, filhantering och ut på webben Linda Mannila 20.11.2007 Vad kan vi nu? Primitiva datatyper Tal, strängar, booleska värden Samlingsdatatyp Listan Utskrift Indata Felhantering Funktioner och moduler

Läs mer

Algoritmer, datastrukturer och komplexitet

Algoritmer, datastrukturer och komplexitet Algoritmer, datastrukturer och komplexitet Övning 6 Anton Grensjö grensjo@csc.kth.se 4 oktober 2017 1 Idag Algoritmkonstruktion (lite blandat) Redovisning och inlämning av labbteori 3 2 Uppgifter Uppgift

Läs mer

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

Datastrukturer, algoritmer och programkonstruktion (DVA104, VT 2015) Föreläsning 6 Datastrukturer, algoritmer och programkonstruktion (DVA104, VT 2015) Föreläsning 6? DAGENS AGENDA Komplexitet Ordobegreppet Komplexitetsklasser Loopar Datastrukturer Några nyttiga regler OBS! Idag jobbar

Läs mer

Föreläsning Datastrukturer (DAT037)

Föreläsning Datastrukturer (DAT037) Föreläsning Datastrukturer (DAT037) Nils Anders Danielsson 2015-11-20 Idag Grafer: Terminologi. Datastrukturer. Topologisk sortering. Kortaste vägen. Bredden först-sökning. Dijkstras algoritm. (Vi får

Läs mer

Tentamen Datastrukturer D DAT 035/INN960

Tentamen Datastrukturer D DAT 035/INN960 Tentamen Datastrukturer D DAT 035/INN960 22 december 2006 Tid: 8.30-12.30 Ansvarig: Peter Dybjer, tel 7721035 eller 405836 Max poäng på tentamen: 60. (Bonuspoäng från övningarna tillkommer.) Betygsgränser,

Läs mer

Datastrukturer. föreläsning 10. Maps 1

Datastrukturer. föreläsning 10. Maps 1 Datastrukturer föreläsning 10 Maps 1 AVL-träd 1 2 5 2 0 4 1 8 3 2 1 11 1 7 Lecture 6 2 Insättning i AVL-träd Sätt först in det nya elementet på samma sätt som i ett vanligt BST! Det nya trädet kan bli

Läs mer

Föreläsning 5 Innehåll. Val av algoritm och datastruktur. Analys av algoritmer. Tidsåtgång och problemets storlek

Föreläsning 5 Innehåll. Val av algoritm och datastruktur. Analys av algoritmer. Tidsåtgång och problemets storlek Föreläsning 5 Innehåll Val av algoritm och datastruktur Algoritmer och effektivitet Att bedöma och jämföra effektivitet för algoritmer Begreppet tidskomplexitet Det räcker inte med att en algoritm är korrekt

Läs mer

OMTENTAMEN I DATASTRUKTURER OCH ALGORITMER DVG B kl. 08:15-13:15

OMTENTAMEN I DATASTRUKTURER OCH ALGORITMER DVG B kl. 08:15-13:15 OMTENTAMEN I DATASTRUKTURER OCH ALGORITMER DVG B03 170331 kl. 08:15-13:15 Ansvarig Lärare: Donald F. Ross Hjälpmedel: Inga. Algoritmerna finns i de respektive uppgifterna eller i bilagarna. *** OBS ***

Läs mer

Tentamen Datastrukturer D DAT 035/INN960

Tentamen Datastrukturer D DAT 035/INN960 Tentamen Datastrukturer D DAT 035/INN960 21 december 2007 Tid: 8.30-12.30 Ansvarig: Peter Dybjer, tel 7721035 eller 405836 Max poäng på tentamen: 60. (Bonuspoäng från övningarna tillkommer.) Betygsgränser,

Läs mer

Sätt att skriva ut binärträd

Sätt att skriva ut binärträd Tilpro Övning 3 På programmet idag: Genomgång av Hemtalet samt rättning Begreppet Stabil sortering Hur man kodar olika sorteringsvilkor Inkapsling av data Länkade listor Användning av stackar och köer

Läs mer

Föreläsning 7 Innehåll. Rekursion. Rekursiv problemlösning. Rekursiv problemlösning Mönster för rekursiv algoritm. Rekursion. Rekursivt tänkande:

Föreläsning 7 Innehåll. Rekursion. Rekursiv problemlösning. Rekursiv problemlösning Mönster för rekursiv algoritm. Rekursion. Rekursivt tänkande: Föreläsning 7 Innehåll Rekursion Rekursivt tänkande: Hur många år fyller du? Ett år mer än förra året! Rekursion Rekursiv problemlösning Binärsökning Generiska metoder Rekursiv problemlösning: Dela upp

Läs mer

Föreläsning 13 Datalogi 1 DA2001

Föreläsning 13 Datalogi 1 DA2001 Föreläsning 13 Datalogi 1 DA2001 Hashtabeller Särfall (exception) klasser En hashtabell kan ses som en lista där programmeraren associerar egna nycklar (index) till varje element som ska läggas i tabellen

Läs mer

Introduktion till programmering SMD180. Föreläsning 4: Villkor och rekursion

Introduktion till programmering SMD180. Föreläsning 4: Villkor och rekursion Introduktion till programmering Föreläsning 4: Villkor och rekursion 1 1 Några inbyggda funktioner (med resultat!) Konverterar mellan de grundläggande typerna: >>> int("32") 32 >>> int(3.999) 3 >>> float(32)

Läs mer

Uppgifter till tenta i 729G04 Programmering och diskret matematik. 17 december 2015, kl 14:00-18:00

Uppgifter till tenta i 729G04 Programmering och diskret matematik. 17 december 2015, kl 14:00-18:00 1 ( 7) Uppgifter till tenta i 729G04 Programmering och diskret matematik. 17 december 2015, kl 14:00-18:00 Tillåtna hjälpmedel: Dator, penna, papper, linjal, suddgummi, godkänd(a) bok/böcker/kompendier

Läs mer

Föreläsning 10 Datastrukturer (DAT037)

Föreläsning 10 Datastrukturer (DAT037) Föreläsning 10 Datastrukturer (DAT037) Fredrik Lindblad 1 29 november 2017 1 Slides skapade av Nils Anders Danielsson har använts som utgångspunkt. Se http://www.cse.chalmers.se/edu/year/2015/course/dat037

Läs mer

Databaser Design och programmering. Fysisk design av databasen att ta hänsyn till implementationsaspekter: minnesteknik filstrukturer indexering

Databaser Design och programmering. Fysisk design av databasen att ta hänsyn till implementationsaspekter: minnesteknik filstrukturer indexering Databaser Design och programmering Fysisk design av databasen att ta hänsyn till implementationsaspekter: minnesteknik filstrukturer indexering 2 Programdesign, databasdesign Databasdesign Kravspecifikation

Läs mer

Grundläggande Datalogi

Grundläggande Datalogi s delar Grundläggande Datalogi s delar s delar s delar Dataabstraktion Rekursion Algoritmanalys s delar Sortering Trädstrukturer Grafalgoritmer Optimering Stavning Strängmatchning Datakompression Versionshantering

Läs mer

Föreläsning 9 Innehåll

Föreläsning 9 Innehåll Föreläsning 9 Innehåll Binära sökträd algoritmer för sökning, insättning och borttagning, implementering effektivitet balanserade binära sökträd, AVL-träd Abstrakta datatyperna mängd (eng. Set) och lexikon

Läs mer

Algoritmer, datastrukturer och komplexitet

Algoritmer, datastrukturer och komplexitet Algoritmer, datastrukturer och komplexitet Övning 6 Anton Grensjö grensjo@csc.kth.se 9 oktober 2015 Anton Grensjö ADK Övning 6 9 oktober 2015 1 / 23 Översikt Kursplanering Ö5: Grafalgoritmer och undre

Läs mer

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

Programmering för Språkteknologer II. Innehåll. Associativa datastrukturer. Associativa datastrukturer. Binär sökning. Programmering för Språkteknologer II Markus Saers markus.saers@lingfil.uu.se Rum -040 stp.lingfil.uu.se/~markuss/ht0/pst Innehåll Associativa datastrukturer Hashtabeller Sökträd Implementationsdetaljer

Läs mer