Ekvivalensrelationer
|
|
- Katarina Andersson
- för 7 år sedan
- Visningar:
Transkript
1 Abstrakt datatyp för disjunkta mängder Vi skall presentera en abstrakt datatyp för att representera disjunkta mängder Kan bl.a. användas för att lösa ekvivalensproblemet avgör om två godtyckliga element hör till samma ekvivalensklass eller inte givet en relation R, avgör för två godtyckliga element om de är relaterade med varandra Tillämpningar används i flera grafalgoritmer, t.ex. för att bygga minimala spännträd automatteori kompilatorer 1 Ekvivalensrelationer En binär relation R på en mängd S är en delmängd av SxS (dvs. på en delmängd av den kartesiska produkten) relationen R är definierad för alla möjliga par av element i mängden S om a R b är sant säger vi att elementet a är relaterat till elementet b En ekvivalensrelation (RST-relation) uppfyller a R a, för alla a S (reflexiv) a R b om och endast om b R a (symmetrisk) a R b och b R c implicerar a R c (transitiv) 2 1
2 Exempel Relationen = (lika med) är en ekvivalensrelation reflexiv: a = a för alla a symmetrisk: a = b b = a transitiv: a = b och b = c a = c Relationen är inte en ekvivalensrelation reflexiv, eftersom a a transitiv eftersom a b och b c a c inte symmetrisk, eftersom a b medför inte att b a Relationen elektriskt kopplad till är en ekvivalensrelation reflexiv, eftersom a alltid är kopplad till sig själv symmetrisk: om a är kopplad till b så är b kopplad till a transitiv: om a är kopplad till b och b är kopplad till c så är a också kopplad till c 3 Dynamiska ekvivalensproblemet Givet en ekvivalensrelation, avgör för godtyckliga a och b om a b Vi kunde lagra information om vilka element är relaterade i en två-dimensionell tabell R[ ][ ] av logiska värden kan avgöra om två element a och b är relaterade i konstant tid finns lagrat i tabellen i R[a][b] Problemet med den här lösningen är att informationen om vilka element som är relaterade vanligtvis ges mera implicit en del av informationen om vilka element som är relaterade fås implicit som en följd av relationens reflexivitet, symmetri och transitivitet 4 2
3 Exempel Antag att vi har definierat en ekvivalensrelation på en mängd {a 1, a 2, a 3, a 4, a 5 } det finns då 25 par av element vilka antingen är relaterade med varandra eller inte Vi får information att följande element är relaterade: a 1 ~ a 2 a 3 ~ a 4 a 5 ~ a 1 a 4 ~ a 2 Eftersom är en ekvivalensrelation betyder det här att alla element är relaterade med varandra vi vill att vår datastruktur skall göra det möjligt att avgöra det här på ett effektivt sätt 5 Ekvivalensklasser En ekvivalensklass för ett element a S är den delmängd av S som innehåller alla element som är relaterade Ekvivalensklasserna bildar en partitionering av S varje element av S förekommer i exakt en ekvivalensklass För att avgöra om a b, behöver vi bara kontrollera om a och b finns i samma ekvivalensklass S: a d c e f b 6 3
4 Union/find algoritmen Inputen är först en samling av N mängder, alla med ett element varje element är bara relaterat med sig själv (reflexivitet) inga andra relationer finns mellan element mängderna är disjunkta, dvs. ett element hör till exakt en ekvivalensklass (S i S j = ) Det finns två tillåtna operationer find(a) returnerar namnet på mängden (dvs. ekvivalensklassen) som innehåller element a union(a,b) adderar relationer. Om vi vill lägga till relationen a b, checkar vi först om a och b redan är relaterade. dvs. om find(a) = find(b). Om inte gör vi en union som slår ihop de två ekvivalensklasserna som a och b hör till och bildar en ny ekvivalensklass Egenskaper hos union/find algoritmen Algoritmen är dynamisk mängderna förändras under algoritmen när vi gör unionoperationer Algoritmen opererar on-line den måste ge ett svar på en find-operation före den kan fortsätta Observera att vi inte utför några operationer som jämför elements relativa värden vi är bara intresserade av i vilken ekvivalensklass elementen finns Därför kan vi anta att alla element har numrerats sekventiellt från 0 till N-1 och att numreringen kan bestämmas lätt med någon hashing-metod 8 4
5 Egenskaper hos union/find algoritmen Initialt har vi alltså S i = {i} för i = 0 till N-1 Vår andra observation är att namnet på den mängd som returneras av find är ganska godtyckligt det enda som är viktigt är att find(a) = find(b) om och endast om a och b finns i samma mängd Det finns två strategier att lösa problemet den första garanterar att Find operationen kan utföras i konstant värsta-falls tid den andra garanterar att Union operationen kan utföras i konstant värsta-falls tid Man kan visa att båda inte kan utföras samtidigt i konstant värsta-falls tid 9 Find-operationen i konstant tid Vi lagrar namnet av ekvivalensklassen för varje element i en räcka då är find bara en enkel O(1) lookup 0 s 1 1 i räckan s 3 2 s 1 Antag att vi vill göra union(a,b) a hör till ekvivalensklass i och b hör till ekvivalensklass j vi måste gå igenom räckan och ändra i till j Union tar tiden θ(n) en följd av N-1 unioner (det maximala antalet) skulle alltså ta θ(n 2 ) tid a b c d e f s 1 s 3 s
6 Länkade listor En idé är att hålla alla element som är i samma ekvivalensklass i en länkad lista sparar tid vid uppdatering, för vi s 1 behöver inte söka genom hela räckan s 3 Reducerar inte den asymptotiska körtiden det är fortfarande möjligt att utföra θ(n 2 ) ekvivalensklassuppdateringar under algoritmens lopp a b c d e f s 1 s 1 s 3 s 2 11 Länkade listor med storlek Om vi också håller reda på storleken av varje ekvivalensklass, och när vi utför unioner ändrar namnet av den mindre klassen till den större, så är den totala tiden för N-1 sammanslagningar O(N log N) varje element kan få sin ekvivalensklass ändrad högst log N gånger varje gång en ekvivalensklass ändras så blir dess nya ekvivalensklass åtminstone dubbelt så stor En följd av M find-operationer och upp till N-1 unioner tar då högst O(M + N log N) tid 12 6
7 Union-operationen i konstant tid I resten av kapitlet skall vi undersöka en lösning till union/find problemet som gör unioner lätta (dvs. som kör i konstant tid) men find något svårare Körtiden för vilken som helst följd av högst M find-operationer och upp till N-1 unioner kommer bara att vara litet större än O(M + N) Algoritmerna som vi kommer att presentera är mycket effektiva är enkla och korta att implementera använder en enkel räcka för att lagra data är mycket svåra att analysera 13 Grundläggande datastruktur Find på två element returnerar samma svar om och endast om de finns i samma mängd vi kan använda ett träd för att representera varje mängd, eftersom varje element i ett träd har samma rot roten kan användas för att namnge mängden Ursprungligen innehåller varje mängd ett element vi har alltså en skog av N träd, vardera bestående bara av en enda rot-nod Då bara namnet av föräldern behövs kan vi lagra trädet implicit i en räcka s varje element s[i] representerar föräldern till element i om i är en rot, så sätter vi s[i] = -1 14
8 Exempel I skogen i figuren är s[i] = -1 för 0 i < För att utföra en union av två mängder sammanslår vi de två träden genom att låta roten av ett träd peka på roten av det andra denna operation tar konstant tid vi antar konventionen att den nya roten efter union(x,y) är x Vi ritar träden explicit men underförstår att en räcka används för att lagra informationen 15 Exempel (forts.) Efter union(4,5) Efter union(6,) Efter union(4,6)
9 Exempel (forts.) Räckan som representerar träden efter de tre unionoperationerna ser nu ut på följande sätt: Trädrepresentation: Find-operationen En find(x) på element x utförs genom att returnera roten av trädet som innehåller x Tiden att utföra find är proportionell mot djupet av noden som representerar x förutsatt att vi kan hitta noden som representerar x i konstant tid Med strategin ovan kan man skapa ett träd av djupet N-1, så att värsta-falls körtiden för en find är O(N) M konsekutiva operationer skulle ta O(MN) tid i värsta fall 18 9
10 Union-operationen I vår implementation utförs Union alltid på rötterna av två träd Om man inte vill anta att elementen a och b är rötter måste man i Union-operationen göra find(a) och find(b) och utföra unionen på resultaten från dessa letar först fram rötterna till träden som a och b finns i, och utför sedan Union på dessa Genomsnittsanalysen för den presenterade algoritmen är riktigt svår 19 Implementation Klass-skelett och initieringsrutin för disjunkt mängd public class DisjSets { public DisjSet( int numelements ) public void union( int root1, int root2 ) public int find( int x ) private int [] s; } /* Initiera en disjunkt mängd */ public DisjSets(int numelements) { s = new int[numelements] for ( int i = 0; i < s.length; i++) s[i] = -1; } 20 10
11 Implementation (forts.) Union och Find rutinerna /* Antar att rot1 och rot2 är rötter */ public void union(int rot1, int rot2); { s[rot2] = rot1; /* Gör rot1 till förälder för rot2 */ } public int find(int x); { if( s[x] < 0 ) /* x är en rot, returnera den */ return x; else return find( s[x] ); /* annars gå ett steg uppåt */ } 21 Smarta Union-algoritmer I vår implementation av union(a,b) gjordes alltid det andra trädet (b) till ett subträd av det första (a) En enkel förbättring av algoritmen är att alltid göra det mindre trädet till ett subträd av det större ifall a och b är lika stora spelar det ingen roll vilket som blir ett subträd till det andra vi kan i så fall låta det andra trädet bli ett subträd till det första Metoden kallas union-by-size 22 11
12 Exempel på union-by-size Om vi gör union(3,4) med union-by-size blir resultatet: Om vi inte hade använt union-by-size skulle resultatet ha blivit: Körtid Vi kan bevisa att om unioner utförs med storlek, så är djupet av en nod aldrig mera än log N en nod är initialt på djupet 0 när dess djup ökar som ett resultat av en union, så placeras den i ett träd som är åtminstone dubbelt så stort som förut en nods djup kan alltså ökas högst log N gånger Detta visar att körtiden för en find operation är O(log N), och en följd av M operationer tar O(M log N) tid 24 12
13 Värsta fall Trädet i figuren visar det värsta träd som är möjligt efter 16 unioner fås om alla unioner är mellan träd av lika storlek Storleken av ett träd För att implementera union-by-size måste vi hålla reda på storleken av varje träd Eftersom vi ju bara använder en räcka så kan vi sätta elementet av varje rot att innehålla det negativa värdet av storleken av dess träd Initialt består representationen av trädet av en räcka med bara -1:or när en union utförs kontrolleras storlekarna den nya storleken efter Union-operationen blir summan av de gamla Union-by-size fordrar alltså inget extra utrymme
14 Implementation Implementation av union-by-size /* Antar att rot1 och rot2 är rötter */ public void union( int rot1, int rot2) { if ( s[rot2] <= s[rot1] ) /* rot2 är större eller lika */ { s[rot2] += s[rot1]; /* Addera storekarna */ s[rot1] = rot2 /* rot2 blir ny rot */ } else /* rot1 är det större trädet */ { s[rot1] += s[rot2]; s[rot2] = rot1; /* rot1 blir ny rot */ } } 2 Genomsnittlig körtid Det har visats att en följd av M operationer kräver O(M) genomsnittstid med union-by-size När slumpmässiga unioner utförs så sammanslås i allmänhet mycket små mängder (ofta bestående av ett element) med stora mängder trädens höjd ökar sällan sannolikheten för värsta-falls beteendet är mycket liten 28 14
15 Union-by-height En alternativ implementering som också garanterar att träden har djup högst O(log N) är union-by-height Vi håller reda på höjden (i st.f. storleken) av varje träd och utför unioner genom att göra det lägre trädet till ett subträd av det djupare trädet Höjden av ett träd ökar med ett när två lika djupa träd slås ihop när ett mindre träd slås ihop med ett större träd ändras höjden inte Eftersom ett träd bestående av en nod har höjden noll lagrar vi i roten trädets höjd minus ett 29 Exempel Vi visar ett träd och dess implicita representation både med union-by-size och union-by-height Representation med union-by-size: Representation med union-by-height:
16 Implementation Implementation av union-by-height find påverkas inte /* Antar att rot1 och rot2 är rötter */ public void union( int rot1, int rot2) { } if ( s[rot2] < s[rot1] ) /* rot2 är djupare */ else { } s[rot1] = rot2 /* rot2 blir ny rot */ if ( s[rot1] == s[rot2] ) /* Samma höjd */ s[rot1]--; /* Öka djupet med ett */ s[rot2] = rot1; /* rot1 blir ny rot */ 31 Ytterligare förbättringar Union/Find är för det mesta effektiv den är enkel och har i genomsnitt en linjär körtid för en följd av M operationer men värsta fallet med en körtid O(M log N) kan lätt inträffa, t.ex. om vi sätter alla mängder i en kö och tar ut de två första mängderna och sätter in unionen av dem För att snabba upp algoritmen undersöker vi find-operationen union-operationen kan inte mera förbättras 32 16
17 Stigkompression Stigkompression utförs under en find operation är oberoende av strategin för att utföra unioner I stigkompression, när vi utför find(x), så ändras varje nod på stigen från x till roten så att roten blir dess förälder Effekten av stigkompression är att med ett antal extra pekarändringar placeras noderna närmare roten iden är att detta kommer att snabba upp framtida accesser trädet blir lägre vi hoppas att det extra arbete som vi gör kommer att betala tillbaka sig i kommande find-operationer 33 Exempel Stigkompression efter find(14) på värsta-falls trädet Före: Efter find(14) med stigkompression:
18 Implementation Enda förändring i koden är att s[x] sätts till värdet som returneras av find find(x) returnerar ju roten föräldern till x sätts till roten, rekursivt för alla noder uppåt på stigen till roten public int find(int x); { if( s[x] < 0 ) /* x är en rot */ return x; else return s[x] = find( s[x] ); /* Gå ett steg uppåt */ } /* och uppdatera föräldern */ 35 Stigkompression med union-by-height Stigkompression är inte helt kompatibelt med union-by-height, eftersom vi ju kan ändra trädens höjd att beräkna trädens höjd på nytt tar för mycket tid Lösningen är att låta bli att räkna om trädens höjd fastän de förändras av stigkompression värdena som lagras i roten ses som estimat av höjden kallas ibland trädets rank i stället för höjd Det har visats att union-by-rank är lika effektivt som union-by-size 36 18
19 Körtid Union/find med union-by-size och stigkompression har en nästan linjär värsta-falls körtid värsta-falls körtiden är Θ(M α(m,n)) om M N där α(m,n) är en funktionella invers av Ackermann s funktion, vilken definieras som A(1,j) = 2 j för j 1 A(i,1) = A(i-1, 2) för i 2 A(i,j) = A(i-1, A(i,j-1)) för i,j 2 Funktionen α(m,n) växer oerhört långsamt långsammare än log* N antalet gånger vi måste ta logaritmen av ett tal N förrän N 1 i praktiken är α(m,n) mindre än 5 för alla realistiska värden 31 Ett exempel: att generera labyrinter Union/find algoritmen kan användas för att generera labyrinter startpunkten är i övre vänstra hörnet slutpunkten är i nedre högra hörnet En enkel algoritm för att generera labyrinter: starta med n x m rektangulära celler med väggar runt varje cell, utom start- och slutpunkten välj slumpmässigt en inre vägg och ta bort den om de två celler som förenas av väggen inte redan är förbundna med varandra upprepa föregående steg tills alla celler är förbundna med varandra
20 Exempel: att generera labyrinter Ekvivalensrelationen som vi representerar är att två celler kan nås från varandra Initialt är alla celler åtskilda från varandra representeras av att alla celler hör till en egen disjunkt mängd Välj slumpmässigt en inre vägg ta bort väggen om de två cellerna på vardera sidan av väggen inte redan är nåbara från varandra använder find-operationen för att ta reda på om cellerna kan nås från varandra gör en union på de två cellerna för att markera att de är förbundna Upprepas till alla celler hör till samma mängd ger en mera komplicerad labyrint än om vi slutar när slutcellen kan nås från startcellen Exempellabyrint 40 20
Föreläsning 4 Datastrukturer (DAT037)
Föreläsning 4 Datastrukturer (DAT037) Fredrik Lindblad 1 2016-11-10 1 Slides skapade av Nils Anders Danielsson har använts som utgångspunkt Se http://wwwcsechalmersse/edu/year/2015/course/dat037 Förra
Läs merExplorativ övning 9 RELATIONER OCH FUNKTIONER
Explorativ övning 9 RELATIONER OCH FUNKTIONER Övningens syfte är att bekanta sig med begreppet relation på en mängd M. Begreppet relation i matematiska sammanhang anknyter till betydelsen av samma ord
Läs merADT Prioritetskö. Föreläsning 13 Innehåll. Prioritetskö vs FIFO-kö. Prioritetskö Exempel på användning. Prioritetsköer och heapar
Föreläsning 1 Innehåll ADT Prioritetskö Prioritetsköer och heapar Prioritetsköer och heapar ADT prioritetskö Klassen PriorityQueue i java.util ar Implementering av prioritetskö med heap Sortering med hjälp
Läs merFö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 merSeminarium 13 Innehåll
Seminarium 13 Innehåll Prioritetsköer och heapar Prioritetsköer ADTn Klassen PriorityQueue i java.util Implementering med lista Heapar ADTn För implementering av prioritetskö För sortering Efter seminariet
Läs merTDDI16 Datastrukturer och algoritmer. Prioritetsköer, heapar, Union/Find
TDDI16 Datastrukturer och algoritmer Prioritetsköer, heapar, Union/Find Prioritetsköer En vanligt förekommande situation: Väntelista (jobbhantering på skrivare, simulering av händelser) Om en resurs blir
Läs merFöreläsning 9 Innehåll
Föreläsning 9 Innehåll Träd, speciellt binära träd egenskaper användningsområden implementering Datavetenskap (LTH) Föreläsning 9 HT 2017 1 / 31 Inlämningsuppgiften De föreläsningar som inlämningsuppgiften
Läs merADT Prioritetskö. Föreläsning 12 Innehåll. Prioritetskö. Interface för Prioritetskö. Prioritetsköer och heapar
Föreläsning 1 Innehåll Prioritetsköer och heapar Prioritetsköer och heapar ADT prioritetskö Klassen PriorityQueue i java.util Heapar Implementering av prioritetskö med heap Sortering med hjälp av heap
Läs merFöreläsning 10 Innehåll. Prioritetsköer och heapar. ADT Prioritetskö. Interface för Prioritetskö. Exempel på vad du ska kunna
Föreläsning Innehåll Prioritetsköer och heapar Prioritetsköer och heapar ADT prioritetskö Klassen PriorityQueue i java.util Implementering med lista ar Implementering av prioritetskö med heap Sortering
Läs merDatastrukturer, 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 merInlämningsuppgiften. Föreläsning 9 Innehåll. Träd. Datastrukturer i kursen
Föreläsning 9 Innehåll Inlämningsuppgiften De föreläsningar som inlämningsuppgiften bygger på är nu klara. Det är alltså dags att börja arbeta med inlämningsuppgiften. Träd, speciellt binära träd egenskaper
Läs merFöreläsning 4 Datastrukturer (DAT037)
Föreläsning 4 Datastrukturer (DAT07) Fredrik Lindblad 1 november 2017 1 Slides skapade av Nils Anders Danielsson har använts som utgångspunkt Se http://wwwcsechalmersse/edu/year/2015/course/dat07 1 Innehåll
Läs merProgramkonstruktion 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 merDatastrukturer i kursen. Föreläsning 8 Innehåll. Träd rekursiv definition. Träd
Föreläsning 8 Innehåll Datastrukturer i kursen Träd, speciellt binära träd egenskaper användningsområden implementering Undervisningsmoment: föreläsning 8, övningsuppgifter 8, lab 4 Avsnitt i läroboken:
Läs merLösningsförslag för tentamen i Datastrukturer (DAT037) från
Lösningsförslag för tentamen i Datastrukturer (DAT7) från --9 Nils Anders Danielsson. Träd- och köoperationerna har alla tidskomplexiteten O(log s), där s är antalet element i trädet/kön (notera att jämförelser
Läs merFöreläsning Datastrukturer (DAT036)
Föreläsning Datastrukturer (DAT036) Nils Anders Danielsson 2013-11-25 Idag Starkt sammanhängande komponenter Duggaresultat Sökträd Starkt sammanhängande komponenter Uppspännande skog Graf, och en möjlig
Läs merFöreläsning 13 Innehåll
Föreläsning 13 Innehåll Prioritetsköer och heapar Prioritetsköer och heapar ADT prioritetskö Heapar Implementering av prioritetskö med heap Klassen PriorityQueue i java.util Programexempel LPT-algoritmen
Läs merSö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 merFö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 merDatastrukturer. 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 merInformationsteknologi Tom Smedsaas 19 augusti 2016
Informationsteknologi Tom Smedsaas 19 augusti 016 VL-träd Definition Ett VL-träd är ett binärt sökträd där det för varje nod gäller att skillnaden i höjd mellan nodens vänster och höger subträd är högst
Läs merTentamen Datastrukturer, DAT037 (DAT036)
Tentamen Datastrukturer, DAT037 (DAT036) Datum och tid för tentamen: 2017-01-11, 14:00 18:00. Ansvarig: Fredrik Lindblad. Nås på tel nr. 031-772 2038. Besöker tentamenssalarna ca 15:00 och ca 17:00. Godkända
Läs merFöreläsningsanteckningar F6
Föreläsningsanteckningar F6 Martin Andersson & Patrik Falkman Kortaste vägen mellan en nod och alla andra noder Detta problem innebär att givet en graf G = (E,V) hitta den kortaste vägen över E från en
Läs merFöreläsning 2 Datastrukturer (DAT037)
Föreläsning 2 Datastrukturer (DAT037) Fredrik Lindblad 1 2016-11-02 1 Slides skapade av Nils Anders Danielsson har använts som utgångspunkt. Se http://www.cse.chalmers.se/edu/year/2015/course/dat037 Tidskomplexitet
Läs merLösningsförslag till tentamen Datastrukturer, DAT037 (DAT036), Tiden det tar att utföra en iteration av loopen är oberoende av värdet på
Lösningsförslag till tentamen Datastrukturer, DAT037 (DAT036), 2017-01-11 1. Loopen upprepas n gånger. getat på en dynamisk array tar tiden O(1). member på ett AVL-träd av storlek n tar tiden O(log n).
Läs merUpplägg. Binära träd. Träd. Binära träd. Binära träd. Antal löv på ett träd. Binära träd (9) Binära sökträd (10.1)
Binära träd Algoritmer och Datastrukturer Markus Saers markus.saers@lingfil.uu.se Upplägg Binära träd (9) Binära sökträd (0.) Träd Många botaniska termer Träd, rot, löv, gren, Trädets rot kan ha ett antal
Läs merAlgoritmanalys. Inledning. Informationsteknologi Malin Källén, Tom Smedsaas 1 september 2016
Informationsteknologi Malin Källén, Tom Smedsaas 1 september 2016 Algoritmanalys Inledning Exempel 1: x n När vi talade om rekursion presenterade vi två olika sätt att beräkna x n, ett iterativt: x n =
Läs merTrädstrukturer och grafer
Översikt Trädstrukturer och grafer Trädstrukturer Grundbegrepp Binära träd Sökning i träd Grafer Sökning i grafer Programmering tillämpningar och datastrukturer Varför olika datastrukturer? Olika datastrukturer
Läs merFöreläsning 1 Datastrukturer (DAT037)
Föreläsning 1 Datastrukturer (DAT037) Fredrik Lindblad 1 30 oktober 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 merTentamen, Algoritmer och datastrukturer
UNDS TEKNISKA ÖGSKOA (6) Institutionen för datavetenskap Tentamen, Algoritmer och datastrukturer 23 8 29, 8. 3. Anvisningar: Denna tentamen består av fem uppgifter. Totalt är skrivningen på 36 poäng och
Läs merFöreläsning Datastrukturer (DAT036)
Föreläsning Datastrukturer (DAT036) Nils Anders Danielsson 2013-11-18 Idag Mer om grafer: Minsta uppspännande träd (för oriktade grafer). Prims algoritm. Kruskals algoritm. Djupet först-sökning. Cykel
Läs merTDDI16 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 merID1020: Union-Find. Dr. Jim Dowling jdowling@kth.se. kap. 1.5. Slides adapted from Algorithms 4 th Edition, Sedgewick.
ID1020: Union-Find Dr. Jim Dowling jdowling@kth.se kap. 1.5 Slides adapted from Algorithms 4 th Edition, Sedgewick. Att utvecka en algoritm Stegen för att utveckla en användbar algoritm: - Bygg en modell
Läs merDatastrukturer. föreläsning 3. Stacks 1
Datastrukturer föreläsning 3 Stacks 1 Abstrakta datatyper Stackar - stacks Köer - queues Dubbeländade köer - deques Vektorer vectors (array lists) All är listor men ger tillgång till olika operationer
Läs mer13 Prioritetsköer, heapar
Prioritetsköer, heapar 31 13 Prioritetsköer, heapar U 101. En prioritetskö är en samling element där varje element har en prioritet (som används för att jämföra elementen med). Elementen plockas ut i prioritetsordning
Läs merNågra svar till TDDC70/91 Datastrukturer och algoritmer
Några svar till TDDC70/91 Datastrukturer och algoritmer 2011--18 Följande är lösningsskisser och svar till uppgifterna på tentan. Lösningarna som ges här ska bara ses som vägledning och är oftast inte
Läs merLösningsförslag till tentamen Datastrukturer, DAT037,
Lösningsförslag till tentamen Datastrukturer, DAT037, 2018-04-05 1. q.dequeue() tar O(1) (eventuellt amorterat) s.contains(x) tar O(1) pq.add(x) tar O(log i) I värsta fall exekveras innehållet i if-satsen.
Läs merTentamen 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 merTENTAMEN: Algoritmer och datastrukturer. Läs detta! Uppgifterna är inte avsiktligt ordnade efter svårighetsgrad.
1 (8) TENTMEN: lgoritmer och datastrukturer Läs detta! Uppgifterna är inte avsiktligt ordnade efter svårighetsgrad. örja varje uppgift på ett nytt blad. Skriv inga lösningar i tesen. Skriv ditt idnummer
Läs merTentamen Datastrukturer (DAT036)
Tentamen Datastrukturer (DAT036) Det här är inte originaltesen. Uppgift 6 var felaktigt formulerad, och har rättats till. Datum och tid för tentamen: 2011-12-16, 8:30 12:30. Ansvarig: Nils Anders Danielsson.
Läs merTDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 8 Erik Nilsson, Institutionen för Datavetenskap, LiU
TDDC30 Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 8 Erik Nilsson, Institutionen för Datavetenskap, LiU På denna föreläsning: Träd Traversering Insättning, borttagning
Läs merTentamen Datastrukturer för D2 DAT 035
Tentamen Datastrukturer för D2 DAT 035 17 december 2005 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 merTentamen 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 merTentamen Datastrukturer (DAT036)
Tentamen Datastrukturer (DAT036) Datum och tid för tentamen: 2012-08-24, 8:30 12:30. Ansvarig: Nils Anders Danielsson. Nås på 0700 620 602 eller anknytning 1680. Besöker tentamenssalarna ca 9:30 och ca
Läs merSjälvbalanserande träd AVL-träd. Koffman & Wolfgang kapitel 9, avsnitt 1 2
Självbalanserande träd AVL-träd Koffman & Wolfgang kapitel 9, avsnitt 1 2 1 Balanserade träd Nodbalanserat träd: skillnaden i antalet noder mellan vänster och höger delträd är högst 1 Höjdbalanserat träd:
Läs merFöreläsning 5: Grafer Del 1
2D1458, Problemlösning och programmering under press Föreläsning 5: Grafer Del 1 Datum: 2006-10-02 Skribent(er): Henrik Sjögren, Patrik Glas Föreläsare: Gunnar Kreitz Den här föreläsningen var den första
Läs merAlgoritmer och datastrukturer 2012, fo rela sning 8
lgoritmer och datastrukturer 01, fo rela sning 8 Komplexitet för binära sökträd De viktigaste operationerna på binära sökträd är insert, find och remove Tiden det tar att utföra en operation bestäms till
Läs merDugga 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 merDet ä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 2014-0-27 Skrivtid: 0800 100 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 merTentamen Datastrukturer (DAT036/DAT037/DIT960)
Tentamen Datastrukturer (DAT036/DAT037/DIT960) Datum och tid för tentamen: 2016-04-07, 14:00 18:00. Författare: Nils Anders Danielsson. (Tack till Per Hallgren och Nick Smallbone för feedback.) Ansvarig:
Läs merAbstrakta datatyper. Primitiva vektorer. Deklarera en vektor
Abstrakta datatyper 1 Primitiva vektorer Vektorer kan skapas av primitiva datatyper, objektreferenser eller andra vektorer. Vektorer indexeras liksom i C från 0. För att referera en vektor används hakparenteser.
Läs merFöreläsning 7. Träd och binära sökträd
Föreläsning 7 Träd och binära sökträd Föreläsning 7 Träd Binära träd Binärt sökträd som ADT Implementering av binärt sökträd Travestera binärt sökträd Sökning Insättning/borttagning Det är extra mycket
Läs merFöreläsning 13. Träd
Föreläsning 13 Träd Träd Ett träd är en datastruktur som tillåter oss att modellera sådant som vi inte kan modellera med linjära datastrukturer. Ett datavetenskapligt träd består av noder med pilar emellan.
Läs merTDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 9 Jonas Lindgren, Institutionen för Datavetenskap, LiU
TDDC30 Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 9 Jonas Lindgren, Institutionen för Datavetenskap, LiU På denna föreläsning: Prioritetskö Heap Representation som
Läs merBinära sökträd. Seminarium 9 Binära sökträd Innehåll. Traversering av binära sökträd. Binära sökträd Definition. Exempel på vad du ska kunna
Seminarium inära sökträd Innehåll inära sökträd inära sökträd Definition Implementering lgoritmer Sökning Insättning orttagning Effektivitet alanserade binära sökträd Eempel på vad du ska kunna Förklara
Läs merTräd Hierarkiska strukturer
Träd Hierarkiska strukturer a 1 a 2 a 3 a 4 a 2 a 5 a 6 a 7 Hierarki: Korta vägar till många Hur korta? Linjär lista: n 2 Träd: Antal element på avståndet m: g m a 1 a 3 a 8 a 12 m = log g n a 9 a 10 Väglängden
Läs merProgrammering 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 merFöreläsning 2 Datastrukturer (DAT037)
Föreläsning 2 Datastrukturer (DAT037) Fredrik Lindblad 1 1 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 merExempeltenta GruDat 2002/2003
Exempeltenta GruDat 2002/2003 Endast ett svarsalternativ på varje fråga är korrekt. Felaktigt svar eller felaktigt antal ikryssade svarsalternativ ger noll poäng på uppgiften. Obs: Den riktiga tentan kommer
Läs merSjälvbalanserande AVL-träd Weiss, avsnitt 4.4
Självbalanserande AVL-träd Weiss, avsnitt 4.4 Peter Ljunglöf DAT036, Datastrukturer 30 nov 2012 1 Balanserade träd Nodbalanserat träd: skillnaden i antalet noder mellan vänster och höger delträd är högst
Läs merFöreläsning 11 Datastrukturer (DAT037)
Föreläsning 11 Datastrukturer (DAT037) Fredrik Lindblad 1 4 december 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 merTabeller. 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 merLösningar Datastrukturer TDA
Lösningar Datastrukturer TDA416 2016 12 21 roblem 1. roblem 2. a) Falskt. Urvalssortering gör alltid samma mängd av jobb. b) Sant. Genom att ha en referens till sista och första elementet, kan man nå både
Läs merLinjärt minne. Sammanhängande minne är ej flexibelt. Effektivt
Binära träd (forts) Ett binärt träd kan lagras i ett enda sammanhängande minne Roten har index 1 Vänster barn till nod i har index 2*i Höger barn till nod i har index 2*i + 1 Föräldern till nod i har index
Läs merFö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 merTommy Färnqvist, IDA, Linköpings universitet
Föreläsning 8 Sortering och urval TDDC70/91: DALG Utskriftsversion av föreläsning i Datastrukturer och algoritmer 1 oktober 2013 Tommy Färnqvist, IDA, Linköpings universitet 8.1 Innehåll Innehåll 1 Sortering
Läs merEtt generellt träd är. Antingen det tomma trädet, eller en rekursiv struktur: rot /. \ /... \ t1... tn
Träd allmänt Träd allmänt Ett generellt träd är Antingen det tomma trädet, eller en rekursiv struktur: rot /. \ /... \ t1... tn där t1,..., tn i sin tur är träd och kallas subträd, vars rotnoder kallas
Läs merFöreläsning Datastrukturer (DAT036)
Föreläsning Datastrukturer (DAT036) Nils Anders Danielsson 2012-11-05 Repetition Förra gången: Listor, stackar, köer. Länkade listor, pekarjonglering. Idag: Cirkulära arrayer. Dynamiska arrayer. Amorterad
Läs merExempel: Förel Rekursion III Nr 14. Uno Holmer, Chalmers,
Exempel: Kappsäcksproblemet Backtracking Dynamisk programmering Föreläsning (Weiss kap..-) Kan man ur en grupp föremål F,,F N med vikterna V,,V N välja ut en delgrupp som väger exakt M kilo? Exempel: föremål
Läs merAlgoritmer, 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 merTillämpad Programmering (ID1218) :00-13:00
ID1218 Johan Montelius Tillämpad Programmering (ID1218) 2014-03-13 09:00-13:00 Förnamn: Efternamn: Regler Du får inte ha något materiel med dig förutom skrivmateriel. Mobiler etc, skall lämnas till tentamensvakten.
Läs merFöreläsning 5: Giriga algoritmer. Kruskals och Prims algoritmer
Föreläsning 5: Giriga algoritmer Kruskals och Prims algoritmer Spännande träd: Om G är en sammanhängande graf så är ett spännande träd ett träd som innehåller alla noder i V (G). Viantarattviharkantvikterw(e)
Läs merDAI2 (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 merFö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 merProgrammeringsmetodik 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 merFöreläsning 3 Datastrukturer (DAT037)
Föreläsning 3 Datastrukturer (DAT037) Fredrik Lindblad 1 2016-11-07 1 Slides skapade av Nils Anders Danielsson har använts som utgångspunkt Se http://wwwcsechalmersse/edu/year/2015/course/dat037 Förra
Läs merFöreläsning 8 i kursen Ma III, #IX1305, HT 07. (Fjärde föreläsningen av Bo Åhlander)
Föreläsning 8 i kursen Ma III, #IX1305, HT 07. (Fjärde föreläsningen av Bo Åhlander) Böiers 5.3 Relationer. Vi har definierat en funktion f: A B som en regel som kopplar ihop ett element a A, med ett element
Läs merTentamen Programmeringsteknik II Inledning. Anmälningskod:
Tentamen Programmeringsteknik II 2016-01-11 Inledning I bilagan finns ett antal mer eller mindre ofullständiga klasser. Några ingår i en hierarki: List, SortedList, SplayList och ListSet enligt vidstående
Läs merDatastrukturer, algoritmer och programkonstruktion (DVA104, HT 2014) Föreläsning 5
Datastrukturer, algoritmer och programkonstruktion (DVA104, HT 2014) Föreläsning 5? FORTSÄTTNING TRÄD RECAP (förra föreläsningen) RECAP (förra föreläsningen) Träd är icke-linjära datastrukturer som ofta
Läs merAlgoritmer, 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 merif (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 merDatastrukturer. Föreläsning 5. Maps 1
Datastrukturer Föreläsning 5 Maps 1 Traversering av träd Maps 2 Preordningstraversering Traversera = genomlöpa alla noderna i ett träd Varje nod besöks innan sina delträd Preordning = djupet först Exempel:
Läs merTentamen Datastrukturer D DAT 035/INN960 (med mycket kortfattade lösningsförslag)
Tentamen Datastrukturer D DAT 035/INN960 (med mycket kortfattade lösningsförslag) 21 december 2007 Tid: 8.30-12.30 Ansvarig: Peter Dybjer, tel 7721035 eller 405836 Max poäng på tentamen: 60. (Bonuspoäng
Läs merFöreläsning 5: Dynamisk programmering
Föreläsning 5: Dynamisk programmering Vi betraktar en typ av problem vi tidigare sett: Indata: En uppsättning intervall [s i,f i ] med vikt w i. Mål: Att hitta en uppsättning icke överlappande intervall
Läs merFöreläsning 5. Träd Binära träd Binärt sökträd som ADT Implementering av binärt sökträd Travestera binärt sökträd Sökning Insättning/borttagning
Föreläsning 5 Träd Binära träd Binärt sökträd som ADT Implementering av binärt sökträd Travestera binärt sökträd Sökning Insättning/borttagning Terminologi - träd Ett träd i datalogi består av en rotnod
Läs merFöreläsning 5: Giriga algoritmer. Kruskals och Prims algoritmer
Föreläsning 5: Giriga algoritmer Kruskals och Prims algoritmer Spännande träd: Om G är en sammanhängande graf så är ett spännande träd ett träd som innehåller alla noder i V (G). Viantarattviharkantvikterw(e)
Läs merFöreläsning 7. Träd och binära sökträd
Föreläsning 7 Träd och binära sökträd Föreläsning 7 Träd Binära träd Binärt sökträd som ADT Implementering av binärt sökträd Travestera binärt sökträd Sökning Insättning/borttagning Läsanvisningar och
Läs merFöreläsning Datastrukturer (DAT037)
Föreläsning Datastrukturer (DAT037) Nils Anders Danielsson 2015-12-14 Idag Frågor? Är något oklart inför tentan? Sammanfattning Exempel från föreläsning 1 Dåligt val av datastruktur public class Bits {
Läs merTentamen TEN1 HI
Tentamen TEN1 HI1029 2015-03-17 Skrivtid: 8.15-13.00 Hjälpmedel: Referensblad (utdelas), papper (tomma), penna Logga in med tentamenskontot ni får av skrivvakten. Det kommer att ta tid att logga in ha
Läs merGrafer MST Top. sortering Starkt samm. komponenter Kortaste avstånd. Grafalgoritmer 1. Douglas Wikström KTH Stockholm
Grafalgoritmer 1 Douglas Wikström KTH Stockholm popup-help@csc.kth.se Oriktade och riktade grafer Definition. En oriktad graf består av en mängd noder V och en mängd kanter E, där en kant är ett oordnat
Läs merAlgoritmer och datastrukturer 2012, föreläsning 6
lgoritmer och datastrukturer 2012, föreläsning 6 Nu lämnar vi listorna och kommer till nästa datastruktur i kursen: träd. Här nedan är ett exempel på ett träd: Båge Rot De rosa noderna är ett exempel på
Läs merFöreläsning 5 TDDC91,TDDE22,725G97: DALG. Föreläsning i Datastrukturer och algoritmer 18 september 2018
Föreläsning 5 TDDC91,TDDE22,725G97: DALG Föreläsning i Datastrukturer och algoritmer 18 september 2018 Institutionen för datavetenskap Linköpings universitet 5.1 Introduktion find,insert och remove i ett
Läs merDatastrukturer. föreläsning 8. Lecture 6 1
atastrukturer föreläsning 8 Lecture 6 1 jupet-först sökning (S) och bredden-först sökning (S) Två metoder att genomsöka en graf; två grafiteratorer! Kan även användas för att avgöra om två noder är sammanbundna.
Läs merFöreläsning 4. Kö Implementerad med array Implementerad med länkad lista Djup kontra bredd Bredden först mha kö
Föreläsning 4 Kö Implementerad med array Implementerad med länkad lista Djup kontra bredd Bredden först mha kö Kö (ADT) En kö fungerar som en kö. Man fyller på den längst bak och tömmer den längst fram
Läs merTDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 3 Jonas Lindgren, Institutionen för Datavetenskap, LiU
TDDC30 Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 3 Jonas Lindgren, Institutionen för Datavetenskap, LiU På denna föreläsning: Abstrakta datatyper Listor Stackar
Läs merTommy Färnqvist, IDA, Linköpings universitet
Föreläsning 9 Pekare, länkade noder, länkade listor TDDD86: DALP Utskriftsversion av föreläsning i Datastrukturer, algoritmer och programmeringsparadigm 25 september 2015 Tommy Färnqvist, IDA, Linköpings
Läs merFö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 merFöreläsning 4 Innehåll. Abstrakta datatypen lista. Implementering av listor. Abstrakt datatypen lista. Abstrakt datatyp
Föreläsning 4 Innehåll Abstrakta datatypen lista Definition Abstrakta datatypen lista egen implementering Datastrukturen enkellänkad lista Nästlade klasser statiska nästlade klasser inre klasser Listklasser
Läs merKapitel 7: Analys av sorteringsalgoritmer
Kapitel 7: Analys av sorteringsalgoritmer Kapitel 7 i Weiss bok handlar om problemet med att sortera en räcka av element vi skall analysera körtiderna för några av sorteringsalgoritmerna vi bevisar också
Läs mer