Øvingsforelesning 2 - TDT4120 Grafer og hashing Benjamin Bjørnseth.

Slides:



Advertisements
Liknende presentasjoner
Høgskolen i Oslo Webprogrammering SQL og databaser del 3.
Advertisements

@ TDT4120 Algoritmer og datastrukturer Trær og søking i dem, samt litt diverse emner Åsmund Eldhuset asmunde idi.ntnu.no.
TDT4120 Algoritmer og datastrukturer Trær og søking i dem, samt litt diverse emner Kristian Veøy
Kap 04 Lister. Listestrukturer Listestrukturer hensiktsmessige ved såkalte flyktige tabeller (tabeller med relativt mye innsetting/sletting)
Komplett avstandstabell. LOG530 Distribusjonsplanlegging 2 2 Noen ganger er det behov for en komplett avstandstabell mellom alle nodene i et nettverk.
Øvingsforelesning 9 Flytnettverk, maksimum flyt og maksimum bipartitt matching Jon Marius Venstad Redigert og forelest av Gleb Sizov.
Forside Korteste sti BFS Modifikasjon Dijkstra Eksempel Korrekthet Analyse Øving Spørsmål Dijkstras algoritme Åsmund Eldhuset asmunde *at* stud.ntnu.no.
@ TDT4120 Algoritmer og datastrukturer Trær og søking i dem, samt litt diverse emner Åsmund Eldhuset asmunde idi.ntnu.no.
Dijkstras algoritme Åsmund Eldhuset asmunde *at* stud.ntnu.no
Teoriøving 4 (1) Strongly connected component: ”det maksimale settet med noder slik at for alle nodepar (u,v) i settet finnes kantene u -> v og v -> u.
Øvingsforelesning 9 Flytnettverk, maksimum flyt og
1 Øvingsforelesning Andreas Knudsen Nils Grimsmo
Øvingsforelesning 3 Grafer, BFS, DFS og hashing
Korrekt dybde først-søk
Øvingsforelesning 2 Trær og søking i dem, samt litt diverse emner Kristian Veøy
Alg. Dat Øvingsforelesning 3 Grafer, BFS, DFS og hashing Børge Rødsjø
Øvingsforelesning Magnus Haug
INF 295 Forelesning 15 - kap 9 Grafer Hans Fr. Nordhaug (Ola Bø)
Kap 01 Innledning I dette kapitlet skal vi se litt følgende hovedtemaer: - Kursoppbygging - Hva er algoritmer og datastrukturer - Anvendelser - …
Øvingsforelesning 9 - Børge Rødsjø
1 Kap 08 Kø. 2 Kø - Definisjon En kø (eng queue) er en lineær struktur hvor elementer kan innsetttes kun i den ene enden av listen, kalt bak, og fjernes.
Kap 02 Tabeller / Tabelloperasjoner. Enkeltvariable Les inn nedbørmengde for årets 12 måneder: Les n1 Les n2 … Les n12 n1 n2 n12.
Kap 10 Graf.
INF 295 Algoritmer og datastrukturer Forelesning 7 ADT Lister, Stakker og Køer Hans Fr. Nordhaug (Ola Bø)
INF 295 forelesning 14 - kap 8 Disjunkt mengde ADT Hans Fr. Nordhaug (Ola Bø)
INF 295 Algoritmer og datastrukturer Forelesning 9a Søketrær Hans Fr. Nordhaug (Ola Bø)
INF 295 Algoritmer og datastrukturer Forelesning 8 Trær Hans Fr. Nordhaug (Ola Bø)
INF 295 forelesning 13 - kap 6 Prioritetskø (Heap) Hans Fr. Nordhaug (Ola Bø)
INF 295 Forelesning 16 - kap 9 Minimalt spenntre og korteste vei i grafer Hans Fredrik Nordhaug (Ola Bø)
INF 295 Algoritmer og datastrukturer Forelesning 11 Når RAM ikke strekker til - B-trær og Utvidbar hashing Hans Fr. Nordhaug (Ola Bø)
INF 295 Forelesning 17 - kap 9 Korteste vei i grafer Hans Fr. Nordhaug (Ola Bø)
INF 295 Forelesning 20 - Kapittel 7 Boble-, innstikk-, Shell-, Heap-, Quick-, Mergesortering Hans Fr. Nordhaug (Ola Bø)
INF 295 Algoritmer og datastrukturer Forelesning 6 ADT Lister, Stakker og Køer Hans Fr. Nordhaug (Ola Bø)
INF 295 Algoritmer og datastrukturer Forelesning 9b Balanserte (binære) trær Hans Fr. Nordhaug.
INF 295 Forelesning 19 - Dynamisk programmering Korteste vei alle til alle (Floyd) Hans Fr. Nordhaug (Ola Bø)
INF 295 Algoritmer og datastrukturer Forelesning 10 Invarianter og Hashing Hans Fr. Nordhaug (Ola Bø)
Dynamiske nettsider PHP Del 2 – Kontrollstrukturer.
Hovedfagspresentasjon
INF 4130 Eksamen 2008 Gjennomgang.
INF2820 Datalingvistikk – V2012
Tabeller Dette er en tabell, eller array. Den kan defineres sånn som dette: public int[] heltallsTabell = new int[11]; //Her er 11 tabellens lengde for.
INF 295 forelesning 12 Repetisjon per 17. februar Hans F. Nordhaug (Ola Bø)
Sorterings- Algoritmer Algoritmer og Datastrukturer.
Sterke og 2-sammenhengende komponeneter, DFS
Memoisering og dynamisk programmering Magnus Botnan botnan at stud.ntnu.no 23/
1 Øvingsforelesning 4 Topologisk sortering Minimale spenntrær Håkon Jacobsen
Oppgavestruktur <Fag> <Navn> Institutt for statsvitenskap
ESøknad - Et webbasert system for elektronisk innlevering av søknader om forskningsmidler Kort presentasjon av systemet beregnet på prosjektledere/forskere.
Velg digital postkasse på Norge.no
Øvingsforelesning i Python (TDT4110)
Prosjekttittel Ditt navn | Lærerens navn | Skolen din
Eksempel: Sletting ved tynn indeks
Hva er en god ordbok?.
Tabeller og grafer B – Samarbeid
Kjennetegn på dybdelæring B-Samarbeid
Utforskende undervisning A – Forarbeid
Sinne Kraivalee Arnesveen.
INF2820 Datalingvistikk – V2015
1. Innledende påstander om organisasjoner
Øvingsforelesning 10 Grådighet
ESøknad - Et webbasert system for elektronisk innlevering av søknader om forskningsmidler Kort presentasjon av systemet beregnet på prosjektledere/forskere.
INF2820 Datalingvistikk – V2018
Eric Jul PSE, Inst. for informatikk
Begynnerkurs i Python Realfagskonferansen 2019 Henrik H. Løvold
Dybdelæring – regneark B – Samarbeid
Dybdelæring - GeoGebra B – Samarbeid
Dybdelæring - GeoGebra B – Samarbeid
Vitaminer og mineraler
Utskrift av presentasjonen:

Øvingsforelesning 2 - TDT4120 Grafer og hashing Benjamin Bjørnseth

Informasjon Studasser

Program Presentasjon av øving 2 Grafer og traverseringsalgoritmer BFS, DFS Hashing Gjennomgang av øving 1

Øving 2 - Teori Omhandler grafer, trær og traversering Oppgave 1: Diverse Oppgave 2: Pre- in- og postorder Oppgave 3: Ytelse for binære (søke)trær

Øving 2 - Teori Oppgave 4: DFS kant-typer

Øving 2 - Praksis Finn Ratatosk! Søk i tre

Øving 2 - Praksis class Node: barn = None ratatosk = None nesteBarn = None # bare til bruk i DFS def __init__(self): self.barn = [] self.ratatosk = False self.nesteBarn = 0

Grafer En mengde noder og en mengde kanter. G = (V, E) Kan ha mer informasjon Vekt Flyt Forskjellige typer Terminologi Naboer, barn, sti etc.

Hvorfor grafer? Problemer kan naturlig representeres som grafer for i in range(10): if i else: print 'y'

Hvorfor grafer? Grundig studert datastruktur Klarer du modellere problemet ditt rett, finnes kanskje løsningen allerede

Grafbruk - eksempler Optimale ruter for maksimering av godstransport Beste måten å route pakker i internett Billigste måten å legge vei mellom byer Avhengighetsløsning +++ Kommer til å lære om alt dette i løpet av faget.

I dag: Graftraversering Søk i grafen Øving 2 Oppdag struktur av grafen Byggestein i andre algoritmer Tofarging av graf

Graftraversering Vi lærer to algoritmer: Bredde-først søk Dybde-først søk

Fremgangsmåte: Bredde først

Fremgangsmåte: Dybde først

Intermission: Felles terminologi Konseptuell fargelegging av noder Uoppdaget node: Hvit Oppdaget, ikke ferdig prosessert node: Grå Ferdig prosessert node: Svart

Intermission: Felles terminologi Fire kantkategorier Tre-kant (Tree edge) Bakoverkant (Backwards edge) Foroverkant (Forward edge) Krysskant (Cross edge) (Er ikke så viktig)

Kantkategorier

Bredde-først søk def BFS(s): Q = deque([s]) while Q: u = Q[0] #Første element i køen if u.naboer: #Har u flere naboer? v = u.naboer.pop() #Fjern neste nabo if v.uoppdaget: Q.append(v) v.uoppdaget = False else: Q.popleft()

Bredde-først søk def BFS(s): Q = deque([s]) while Q: u = Q.popleft() #Første element i køen for v in u.naboer: if v.uoppdaget: Q.append(v) v.uoppdaget = False Kjøretid: O(V + E)

Eksempel!

Egenskaper ved BFS Beregner korteste vei!

Bredde-først søk som byggesten Kan benyttes for å løse maks-flyt problemet Kan benyttes i søppeltømmingsalgoritmer for å finne referanser.

Bredde-først søk? def BFS(s): D = deque([s]) while D: u = D[0] #Første element i køen if u.naboer: #Har u flere naboer? v = u.naboer.pop() #Fjern neste nabo if v.uoppdaget: D.append(v) v.uoppdaget = False else: D.popleft()

Dybde-først søk! def DFS(s): D = deque([s]) while D: u = D[-1] #Øverste element i stakken if u.naboer: #Har u flere naboer? v = u.naboer.pop() #Fjern neste nabo if v.uoppdaget: D.append(v) v.uoppdaget = False else: D.pop() Kjøretid: O(V + E)

Eksempel!

Dybde-først søk def DFS_whole(G): for v in G.V: if v.uoppdaget: DFS(v)

Egenskaper ved DFS Parentesstruktur Noder langs hvite stier oppdages

Bruk av DFS Topologisk sortering Avslør sykler Finn (sterkt) sammenknyttede komponenter Undersøk om grafen er enkeltvis sammenknyttet

Arrays RAM gjør arrays veldig raske Oppslag i konstant tid

Server som opererer med sessions Hver bruker får en session id ved pålogging Server bruker session id til å slå opp i tabell Maksimalt 100 brukere pålogget samtidig Eksempel

def login(u, pw): authenticate(u, pw) assert_valid_user_count() max_session_id += 1 session_id = max_session_id session_info[session_id] = SessionInfo() return max_session_id def get_session_info(session_id): return session_info[session_id] def store_session_info(session_id): session_info[session_id].store()

Hva om... Vi bytter ut session id med bruker id? Dårlig plassutnyttelse Plasskrevende

Enter hashtables! Arrayprinsipp: slå opp vha indeks Forskjell: indeks beregnes ut fra nøkkel Hashfunksjon Nøkkel trenger ikke være tall

Eksempler Symboltabell Ordbok Brukerregister

Problemer Nøkler kan gi samme hashverdi Kollisjon

Problemer Nøkler kan gi samme hashverdi Kollisjon

Løsninger Reaktive Lenking (chaining) Åpen adressering (open addressing) Preventive God hashfunksjon

Terminologi Lastfaktor: α = n/m n: antall elementer i hashtabellen m: antall plasser i hashtabellen Mål på fyllgrad i prosent m = 10, n = 5 => α = 0.50 ”Tabellen er halvfull” m = 100, n = 200 => α = 2 ”Tabellen er 200% full”

Lenking Hver plass i tabellen er en lenket liste Ved kollisjon: Legg ny verdi først i lista

Lenking - eksempel

Kjøretid Innsetting: Worst case O(1) Sletting: Worst case (med diverse antagelser) O(1) Søk: Average case O(1 + α) Antall bøtter må være proporsjonalt i forhold til antall elementer I praksis konstant søketid

Åpen adressering Elementer lagres direkte i tabellen Ved kollisjon leter vi etter en ny plass

Åpen adressering - eksempel

Letemetodikk Linear probing h(k, i) = (h'(k) + i) mod m

Letemetodikk Linear probing h(k, i) = (h'(k) + i) mod m Quadratic probing h(k, i) = (h'(k) + c∙i + d∙i) mod m

Letemetodikk Linear probing h(k, i) = (h'(k) + i) mod m Quadratic probing h(k, i) = (h'(k) + c∙i + d∙i) mod m Double hashing h(k, i) = (h(k) + i∙h(k)) mod m

Kjøretid (med forbehold) Innsetning, bomsøk: O(1/(1 – α)) =>

Kjøretid (med forbehold) Innsetning, bomsøk: O(1/(1 – α)) => Treffsøk: O(1/α * ln(1/(1 – α))) => Konklusjon: Høy α gir dårlig ytelse

Merk! Open Hashing == Closed Addressing ≠ Closed Hashing == Open Addressing

Hashfunksjoner Påkrevde egenskaper: Deterministisk Ønskede egenskaper: Jevn fordeling - enkel uniform hashing Rask

Hashfunksjoner Divisjonsmetoden h(k) = k mod m Multiplikasjonsmetoden h(k) = floor(m * (kA mod 1))

Øving 1 - Teori

Øving 1 - Praksis

Spørsmål?