Algoritmer og datastrukturer Kapittel 9 - Delkapittel 9.2

Save this PDF as:
 WORD  PNG  TXT  JPG

Størrelse: px
Begynne med side:

Download "Algoritmer og datastrukturer Kapittel 9 - Delkapittel 9.2"

Transkript

1 Delkapittel 9.2 Rød-svarte og trær Side 1 av 16 Algoritmer og datastrukturer Kapittel 9 - Delkapittel Rød-svarte og trær B-tre av orden 4 eller tre Et rød-svart tre og et B-tre av orden 4 er to forskjellige måter å oppfatte samme datastruktur. Et B-tre er ikke et binærtre. Det er et balansert tre der nodene kan ha flere enn to barn. I et binærtre kan en node ha maksimalt to barn. I et B-tre av orden m kan en node ha maksimalt m barn. Vi skal se på generelle B-trær i et senere avsnitt. Et B-tre av orden 4 kalles et tre siden en node kan ha 2, 3 eller 4 barn. Der gjelder: En node kan ha 1, 2 eller 3 verdier. En indre node har 2, 3 eller 4 barn. Antallet verdier i en indre node er alltid én mindre enn antallet barn som noden har. Alle bladnoder ligger på samme nivå i treet. Det tillates ikke duplikatverdier. Figur a) : Et tre Figur a) viser et tre. Treet har 8 noder, 3 indre noder (rotnoden og to til) og 5 bladnoder. I et tre er antallet verdier i en indre node alltid én mindre enn antallet barn som noden har. Vi ser på figuren at rotnoden har én verdi og dermed to barn. Rotnodens venstre barn har to verdier og tre barn, mens rotnodens høyre barn er én verdi og to barn. Sorteringsorden Verdiene i en node skal ligge i stigende sortert rekkefølge. I slike trær kan vi imidlertid ikke som for binære trær, snakke om venstre og høyre barn siden det kan være 2, 3 eller 4 barn. Men vi kan for enhver verdi inne i en indre node snakke om denne verdiens venstre og høyre barn. Vi ser på noden som inneholder verdiene 7 og 10 i Figur a): Vi kan si at verdien 7 har to barn - det venstre barnet er noden med verdiene 3 og 5 og det høyre barnet er noden med verdien 9. På samme måte har verdien 10 to barn - det venstre er noden med verdien 9 og det høyre noden med verdiene 11 og 12. Dette betyr spesielt at noden med verdien 9 er høyre barn til verdien 7 og venstre barn til naboverdien 10. Sorteringsrekkefølgen for verdiene i et tre blir dermed slik: Verdiene i hver node skal være sortert stigende. Hvis x er en vilkårlig verdi i en indre node, så skal største verdi i det venstre barnet til x være mindre enn x, og x skal være mindre enn den minste verdien i høyre barn til x. Oppgaver til avsnitt Bruk søkeordet tree på internett. Hva sier Wikipedia? Prøv så ordet B-tree.

2 Delkapittel 9.2 Rød-svarte og trær Side 2 av Innlegging og søking i et tre Gitt verdiene 18, 10, 25, 7, 5, 12, 11, 22, 9, 3, 15, 13, 16 og 30. Vi skal legge disse verdiene fortløpende inn i et tre. Vi starter med et tomt tre. Dermed må første verdi 18 legges i en rotnode. Det gir flg. figur: Figur a) : Rotnoden har verdien 18 Rotnoden har plass til tre verdier. De to neste (10 og 25) legges inn på rett sortert plass: Figur b) : Rotnoden har verdiene 10, 18, 25 Den neste verdien 7 er det imidlertid ikke plass til. Først setter vi 7 sammen med de tre verdiene og får i sortert rekkefølge 7, 10, 18, 25. Deretter deler vi noden i to noder. Den første av de to nodene skal inneholde de to første verdiene, dvs. 7 og 10. Den andre noden skal inneholde den siste (fjerde) verdien, dvs. 25. Den tredje verdien, dvs. 18, skal legges i en ny rotnode og denne skal få de to nodene som barn. Tilsammen slik: Figur c) : En rotnode og to bladnoder Verdien 5 hører hjemme i venstre bladnode og siden det er plass kan den legges rett inn: Figur d) : Den ene bladnoden er nå full Verdien 12 hører sorteringsmessig hjemme i bladnoden som er full. Da må vi gjøre som sist. Vi setter først 12 sammen med de andre verdiene og får i sortert rekkefølge 5, 7, 10, 12, Noden deles så i to noder. I den første legger vi 5 og 7, i den andre 12. Den tredje verdien, dvs. 10, skal flyttes opp til foreldernoden og plasseres på rett sortert plass der. De to nodene blir deretter venstre og høyre barn til verdien 10: Figur e) : Verdien 12 er lagt inn Det er plass i bladnodene til både 11, 22 og 9. De kan settes rett inn: Figur f) : Verdien 11, 22 og 9 er lagt inn Så kommer verdien 3. Den hører hjemme i bladnoden med verdiene 5, 7 og 9, men der er det fullt. Vi setter 3 sammen med de andre og får 3, 5, 7, 9. Noden deles i to. I den første legger

3 Delkapittel 9.2 Rød-svarte og trær Side 3 av 16 vi 3 og 5 og i den andre 9. Den tredje verdien, dvs. 7 flyttes opp til foreldernoden og legges på rett sortert plass der. De to nodene blir venstre og høyre barn til 7: Figur g) : Verdien 3 er lagt inn Verdien 15 hører hjemme i bladnoden med verdiene 11 og 12. Der er det ledig plass: Figur h) : Verdien 15 er lagt inn Så kommer 13. Den skal inn i noden som fra før har verdiene 11, 12, 15. Vi setter 13 sammen med dem og får i sortert rekkefølge 11, 12, 13, 15. Som før deler vi noden i to. I den første legger vi 11 og 12 og i den andre legger vi 15. Den tredje verdien, dvs. 13, skal flyttes opp til foreldernoden. Men foreldernoden er også full. Da må den deles i to noder. I sortert rekkefølge får vi da i foreldernoden verdiene 7, 10, 13, 18. De to første (7 og 10) legges etter oppdelingen i den første noden, den siste verdien (18) i den andre noden og den tredje verdien (13) flyttes opp og legges i en ny rotnode: Figur i) : Treet har fått et nytt nivå Nå er det bare 16 og 30 igjen. De tilhørende bladnodene har plass. Det gir flg. tre: Figur j) : Alle verdiene er satt inn Nodene kan også tegnes som tre små bokser («rektangulære» noder). Hvis noden har kun én verdi brukes første boks og med kun to verdier de to første boksene. Da blir treet slik: Figur k) : Nodene består av tre små bokser Algoritme for innlegging Eksemplet over gir flg. algoritme for innlegging av verdier: 1. Finn bladnoden som verdien hører til ut fra sorteringen. Hvis den ikke er full, legg verdien inn på rett sortert plass i noden.

4 Delkapittel 9.2 Rød-svarte og trær Side 4 av Hvis noden er full, sett først opp de fire (de tre gamle og den nye) verdiene sortert. Del noden i to. Legg de to første verdiene i første node og den siste (fjerde) verdien i andre node. Flytt den tredje verdien opp på rett sortert plass i foreldernoden hvis det finnes en foreldernode og den ikke allerede er full. De to nodene blir venstre og høyre barn til verdien. 3. Hvis det ikke er noen foreldernode, lag en ny node som da blir rotnode. Legg verdien der. Gå ellers til punkt 2) hvis det finnes en foreldernode og den er full. Algoritmen over vil alltid sørge for at det blir et korrekt tre. Men et slikt tre er ikke entydig. Det kan lages flere trær med de samme verdiene. Ta verdiene 2, 3 og 4 som eksempel. Det finnes to forskjellige trær som begge inneholder disse tre verdiene. Det er disse to trærne: Figur l) : To trær som begge inneholder 2, 3 og 4 Kravet til et tre er at ingen noder har flere enn tre verdier og dermed ikke flere enn fire barn, og at at alle bladnodene ligger på samme nivå. Begge trærne i Figur l) oppfyller det kravet. Det er imidlertid ønskelig at nodene i et tre er så fulle med verdier som mulig. Da får man normalt et mer effektivt tre. Det finnes flere forskjellige innleggingsalgoritmer, men alle lager trær av samme type. Problemet dukker først og fremst opp når verdier skal fjernes. Da vil det kunne bli mange noder med kun én verdi. Det finnes derfor mange algoritmer for fjerning. Alle fører til korrekte trær. Men noen av algoritmene er mer omhyggelige enn andre med å sørge for at det ikke blir for mange noder med enslige verdier. Fjerning er generelt mer komplisert enn innlegging. Søking i et tre er rett frem. Det er bare å bruke sorteringsrekkefølgen. Start i rotnoden og gå eventuelt videre til et barn basert på størrelsen på søkeverdien i forhold til nodeverdiene. Hvis en kommer til en bladnode og skal videre, er ikke verdien i treet. Oppgaver til avsnitt Sett først inn 14, så 17 og så 31 i treet i Figur k) eller Figur j). 2. I starten av dette avsnittet er det satt opp en samling verdier og et tre blir bygget ved at verdiene legges inn. Bygg opp det samme treet ved hjelp av B-tre appletten. Bruk B-tre av orden 4 (se innstillingen øverst og nederst på appletten). Sett også inn verdiene i Oppgave Sett inn verdiene 12, 7, 3, 16, 20, 14, 5, 19, 10, 17, 11, 2, 18, 1, 13, 9, 15, 8, 4, 6 (i den rekkefølgen) i et på forhånd tomt tre. Gjør det først for hånd. Du får en fasit ved å bruke appletten fra Oppgave 2. Eller du kan eventuelt gjøre det på papir parallelt med at du bruker en applett. Papir først og så appletten. 4. Gjør som i Oppgave 3, men bruke verdiene 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13.

5 Delkapittel 9.2 Rød-svarte og trær Side 5 av Fjerning av verdier i et tre Når en verdi skal fjernes må vi først finne den noden som inneholder verdien. Da er det to muligheter: 1) Den ligger i en indre node eller 2) den ligger i en bladnode. 1) Den ligger i en indre node: Ta treet under som eksempel. 13 skal fjernes. Se den rød pilen: Figur a) : Verdien 13 skal fjernes Vi finner først den som kommer etter 13 i sortert rekkefølge. Det er 15. Som vi ser ligger den lengst til venstre i en bladnode. La disse bytte plass. Da får vi treet: Figur b) : Verdiene 13 og 15 har byttet plass. Verdien 13 som skal fjernes, ligger nå i en bladnode. Med andre ord holder det å lage en regel (algoritme) for å fjerne verdier i bladnoder. 2) Verdien som skal fjernes ligger i en bladnode: Hvis det ikke er den enste verdien i bladnoden, fjerner vi verdien direkte. Hvis nodene i treet er tegnet som tre små bokser, må vi eventuelt flytte på den eller de gjenværende verdiene i noden slik at boksene er fylt opp fra venstre. Hvis vi fjerner 13 i treet i Figur m), blir det slik: Figur c) : Verdiene 13 er fjernet fra treet. eller slik hvis vi tegner treet med «runde» noder: Figur d) : Verdiene 13 er fjernet fra treet. Da får vi flg. generelle regel: Hvis verdien som skal fjernes ligger i en bladnode og noden inneholder to eller tre verdier, så kan verdien fjernes uten videre.

6 Delkapittel 9.2 Rød-svarte og trær Side 6 av 16 Hvis den verdien som skal fjernes er en enslig verdi i en bladnode, kan vi «låne». Hvis en av de to nærmeste søskennodene har to eller flere verdier, kan vi først flytte ned disse to nodenes felles forelderveri og så flytte den næremste søskenverdien opp til forledernoden. Ta utgangspunkt i treet i Figur c). Verdien 16 er enslig verdi. Da kan vi fjerne 16, flytte 18 ned og 22 opp. Det gir dette treet: Figur e) : Verdiene 16 er fjernet fra treet. Neste problem oppstår hvis vi skal slette en enslig verdi i en bladnode og det ikke er noen søskennoder å «låne» av. Da blir det mer komplisert. Anta at verdien 3 er fjernet i treet i Figur e), dvs. treet ser slik ut: Figur f) : Verdiene 3 er fjernet fra treet. Hvis vi skal slette 5 i treet i Figur f) får en situasjon der det ikke er noen søskennode å «låne» fra. Ta slår vi sammen verdien (5), søskenverdien (9) og de to verdienes felles forelderverdi (7) til én node, dvs. slik: Figur g) : Verdiene 5 er fjernet fra treet. Oppgaver til avsnitt xxxx

7 Delkapittel 9.2 Rød-svarte og trær Side 7 av Fra tre til rød-svart tre I et rød/svart tre har nodene to farger. I et vanlig binærtre vil venstre og/eller høyre peker i en node kunne være null. Her skal vi isteden si at den peker til en svart «nullnode». Et rød-svart tre er definert på følgende måte: 1. Et rød-svart tre er et binært søketre. 2. Nodene er enten røde eller svarte. Rotnoden er svart. 3. Barna til en rød node er svarte. 4. Pekere som i et vanlig tre peker til null, skal her isteden peke til en svart «nullnode». 5. Antall svarte noder på veien fra en nullnode og opp til roten er det samme uansett hvilken nullnode en starter i. Et tre og et rød-svart tre er to sider av samme sak. Et tre kan «oversettes» til et rød-svart tre. «Oversettelsen» skjer ved hjelp av flg. «omregningsformler»: Figur a): «Omregning» fra tre til rød-svart tre Vi starter med treet i Figur b) under. Det kan oversettes til det rød/svarte treet nedenfor ved at vi bruker en «omregningsformel» for hver node fra rotnoden og nedover: Figur b) : Et tre Figur c) : Et rød-svart tre

8 Delkapittel 9.2 Rød-svarte og trær Side 8 av 16 I det rød-svarte treet Figur c) er en «nullnode» markert med en liten svart runding. Vi kan sjekke om kravene til et rød-svart tre er oppfylt. 1) Det er et binært søketre. 2) Rotnoden er svart og de andre nodene er enten svarte eller røde. 3) Ingen rød node har et rødt barn. 4) Alle «nullnodene» er satt på. 5) Vi ser at hvis vi starter i en «nullnode» og går oppover mot roten, er det samme antall svarte noder på veien uansett hvilken «nullnode» vi starter i. Algoritmen for å «oversette» et tre til et rød-svart tre er ikke entydig. Formel 2 sier at vi kan omskape en node med to verdier til to noder der enten (2a) første verdi legges i en svart foreldernode og den andre verdien i et rødt høyrebarn eller (2b) at første verdi legges i et rødt venstrebarn og den andre verdien i en svart forelder. Treet Figur c) ble til ved at Formel 2a) ble brukt i alle tilfellene. Utseendet til det rød-svarte treet vil derfor bli forskjellig avhengig av hvilken av disse to måtene vi velger eller om vi blander dem. Men treet blir uansett et korrekt rød-svart tre. Oppgaver til avsnitt Ta utgangspunkt i treet i Figur b). Tegn det rød-svarte treet du får når du hele tiden bruker Formel 2b) når en node med to verdier «oversettes». 2. «Oversett» flg tre til et rød-svart tre: 3. «Oversett» flg tre til et rød-svart tre: Innlegging i et rød-svart tre Treets første verdi legges i en svart rotnode En verdi som skal legges inn i et ikke-tomt tre, legges inn ved hjelp av en «fra bunnen og opp»-teknikk (eng: bottom up). Først legges verdien på rett sortert plass i en rød node. Hvis dens forelder er svart, er vi ferdig. Hvis derimot foreldren er rød, må noe gjøres på grunn av pkt. 3 i definisjonen av et rød/svart tre. Situasjonen med at både forelder og barn er røde kan fremkomme på mange ulike måter. For å få færre slike tilfeller defineres det at en null-peker i en node isteden skal peke på en svart nullnode. Hvis både barn og forelder er røde, kan ikke foreldren være rotnoden siden rotnoden alltid er svart. Dermed må det finnes en besteforelder og den må være svart. Hvis besteforelder ikke var svart, ville vi hatt et tre der forelder og besteforelder begge er røde. Det er umulig på grunn av pkt. 3. Det er ikke sikkert at foreldren har et søsken på vanlig måte, men ved hjelp teknikken med nullnoder kan vi si at enhver node (bortsett fra roten) har et søsken.

9 Delkapittel 9.2 Rød-svarte og trær Side 9 av 16 Figur a): Rød-svarte trær der en rød node har rødt barn Vi setter navnet X på den nederste noden, F på dens forelder, B på dens besteforelder og S som navn på forelders søsken. Figur a) viser fire tilfeller der det er en nullnode som er søsken S til F. Generelt får vi to hovedtilfeller. Tilfelle I) er at S er svart og tilfelle II) at S er rød. I begge tilfellene får vi fire undertilfeller. I tilfellet I) kaller vi de fire undertilfellene 1a), 1b), 2a) og 2b). I tilfellet II) kaller vi dem 3a), 3b), 4a) og 4b). I tilfellet I) må vi både rotere og skifte marger, mens det i tilfellet II) holder å skifte farger. Nedenfor står en oppskrift for hvert av de åtte tilfellene: Hovdetilfellet I) - F er rød og S er svart Tilfellet 1a) I figuren lengst til venstre er F rød og S svart. Dette reparerer vi ved å gjøre en enkel høyrerotasjon (F opp og B ned) og et fargeskifte - F til svart og B til rød. Resultatet blir som i den høyre av de to figurene. Tilfellet 1b) I figuren lengst til venstre er F rød og S svart. Det reparerer vi ved å gjøre en enkel venstrerotasjon (F opp og B ned) og et fargeskifte - F til svart og B til rød. Resultatet blir som i den høyre av de to figurene. Tilfellet 2a) I figuren lengst til venstre er F rød og S svart. Det reparerer vi ved å gjøre en dobbel høyrerotasjon (X opp og B ned) og et fargeskifte - X til svart og B til rød. Resultatet blir som i den høyre av de to figurene.

10 Delkapittel 9.2 Rød-svarte og trær Side 10 av 16 Tilfellet 2b) I figuren lengst til venstre er F rød og S svart. Det reparerer vi ved å gjøre en dobbel venstrerotasjon (X opp og B ned) og et fargeskifte - X til svart og B til rød. Resultatet blir som i den høyre av de to figurene. Hovdetilfellet II) - F er rød og S er rød Tilfellet 3a) I figuren lengst til venstre er både F og S røde. Det reparerer vi ved å skifte farge på både F og S fra rød til svart, og å skifte farge på B fra svart til rød. Resultatet blir som i den høyre av de to figurene. Hvis B er roten, settes den tilbake til svart og hvis ikke, ser vi på forelder til B osv. Tilfellet 3b) I figuren lengst til venstre er både F og S røde. Det reparerer vi ved å skifte farge på både F og S fra rød til svart, og å skifte farge på B fra svart til rød. Resultatet blir som i den høyre av de to figurene. Hvis B er roten, settes den tilbake til svart og hvis ikke, ser vi på forelder til B osv. Tilfellet 4a) I figuren lengst til venstre er både F og S røde. Det reparerer vi ved å skifte farge på både F og S fra rød til svart, og å skifte farge på B fra svart til rød. Resultatet blir som i den høyre av de to figurene. Hvis B er roten, settes den tilbake til svart og hvis ikke, ser vi på forelder til B osv. Tilfellet 4b) I figuren lengst til venstre er både F og S røde. Det reparerer vi ved å skifte farge på både F og S fra rød til svart, og å skifte farge på B fra svart til rød. Resultatet blir som i den høyre av de to figurene. Hvis B er roten, settes den tilbake til svart og hvis ikke, ser vi på forelder til B osv.

11 Delkapittel 9.2 Rød-svarte og trær Side 11 av 16 «Fra bunnen og opp»-algoritme for innlegging. Husk at hvis en node mangler et barn, tenker vi oss isteden at det er en nullnode som er barnet. 1. Treets første verdi legges i en svart rotnode. 2. Generelt legges en ny verdi i en rød node på rett sortert plass i treet. La den hete X. 3. Hvis forelder F til X er svart, stopper vi. Hvis F er rød, må F ha en svart forelder B (beste-forelder til X) og F et søsken S (der S kan være en svart nullnode). 4. Hvis F sitt søsken S er svart, må det utføres en enkel eller en dobbel rotasjon (høyre eller venstre) og deretter et fargeskifte (F til svart og B til rød). Dermed kan vi stoppe. 5. Hvis F sitt søsken S er rød, må det utføres et fargeskifte (F og S til svart og B til rød). Hvis B er roten, settes den tilbake til svart og vi kan stoppe. Hvis ikke, omdøper vi B til X og går tilbake til pkt. 3. Oppgaver til avsnitt Eksperimenter med appletten Red/Black Tree Demonstration. a. Sett inn tallene 8, 7, 6, 5, 4, 3, 2, 1 (i den oppgitte rekkefølgen) i et på forhånd tomt rød/svart tre. Tegn treet etter hver innsetting. Bruk appleten parallelt. Dvs. tegn først og sett så inn i appletten og sjekk at du får samme resultet. b. Gjør som i a), men bruk tallene 10, 4, 7, 13, 11, 6, 8, 9. c. Gjør som i a), men bruk tallene 15, 18, 17, 3, 6, 10, 12, 13, 14. d. Gjør som i a), men bruk tallene 7, 5, 13, 9, 10, 12, 11, 6, Gjør som i Oppgave 1, men bruk Data Structure Visualizations. 3. Gjør som i Oppgave 1, men bruk denne appletten.

12 Delkapittel 9.2 Rød-svarte og trær Side 12 av Java-kode for et rød-svart tre Siden et rød-svart tre er et binært søketre, blir nodeklassen som før bortsett fra at nå skal nodene også ha en farge. Vi innfører derfor to fargekonstanter med navn SVART og RØD. Vi trenger også «nullnoder». I realiteten lager vi kun én nullnode som alle da kan peke til. Den noden får navnet NULL og settes opp som en konstant i klassen. Vi kaller klassen RSBinTre der R står for rød og S for svart: import java.util.*; public class RSBinTre<T> implements Beholder<T> private static final boolean SVART = true; private static final boolean RØD = false; private static final class Node<T> // en indre nodeklasse private T verdi; // nodens verdi private Node<T> venstre; // peker til venstre barn private Node<T> høyre; // peker til høyre barn private boolean farge; // RØD eller SVART // konstruktør private Node(T verdi, Node<T> v, Node<T> h, boolean farge) this.verdi = verdi; venstre = v; høyre = h; this.farge = farge; // slutt på class Node private final Node<T> NULL; private Node<T> rot; private int antall; private Comparator<? super T> comp; // en svart nullnode // treets rot // antall verdier // treets komparator public RSBinTre(Comparator<? super T> comp) // konstruktør rot = NULL = new Node<>(null,null,null,SVART); this.comp = comp; // en konstruksjonsmetode public static <T extends Comparable<? super T>> RSBinTre<T> lagtre() return new RSBinTre<>(Komparator.<T>naturlig()); // Instansmetodene skal inn her // slutt på class RSBinTre Programkode a)

13 Delkapittel 9.2 Rød-svarte og trær Side 13 av 16 Flere av metodene fra klassen SBinTre kan brukes i klassen RSBinTre. Men pga. nullnoden NULL må vi gjøre noen små endringer. F.eks. slik i metoden inneholder(t verdi): public boolean inneholder(t verdi) for (Node<T> p = rot; p!= NULL; ) int cmp = comp.compare(verdi,p.verdi); if (cmp > 0) p = p.høyre; else if (cmp < 0) p = p.venstre; else return true; // funnet return false; // ikke funnet Programkode b) Utfordringen ligger i metoden legginn(). Vi legger inn som i et vanlig binært søketre, men hvis treet må «repareres» etterpå, må vi kunne gå oppover. Det kan vi løse ved hjelp av en stakk. Alle nodene på veien nedover legges på stakken. Metoden starter derfor slik: public boolean legginn(t verdi) if (rot == NULL) // treet er tomt rot = new Node<>(verdi,NULL,NULL,SVART); // roten skal være svart antall++; return true; // vellykket innlegging Stakk<Node<T>> stakk = new TabellStakk<>(); // en stakk Node<T> p = rot; // hjelpevariabel int cmp = 0; // hjelpevariabel while (p!= NULL) stakk.legginn(p); // legger p på stakken cmp = comp.compare(verdi,p.verdi); // sammenligner if (cmp < 0) p = p.venstre; else if (cmp > 0) p = p.høyre; else return false; // til venstre // til høyre // duplikater ikke tillatt Node<T> x = new Node<>(verdi,NULL,NULL,RØD); // en rød node antall++; Node<T> f = stakk.taut(); if (cmp < 0) f.venstre = x; else f.høyre = x; // forelder til x // x blir venstre barn // x blir høyre barn if (f.farge == SVART) return true; // vellykket innlegging // Men hva hvis f er RØD? Programkode c)

14 Delkapittel 9.2 Rød-svarte og trær Side 14 av 16 Så langt er Programkode c) omtrent som for et vanlig binærtre. Det nye er å behandle situasjonen der x sin forelder f er rød. I så fall kan den ikke være rotnoden. Vi starter derfor med å hente forelderen b til f (dvs. besteforelderen til x) fra stakken. Deretter starter en while-løkke. I den finner vi først søskennoden s til f og så om s er et venstre eller et høyre barn. Hvis s er svart, får vi hovedtilfellet I) og hvis s er rød, hovedtilfellet II) i illustrasjonene: Node<T> b = stakk.taut(); // b for besteforelder while (true) Node<T> s = (f == b.venstre)? b.høyre : b.venstre; if (s.farge == SVART) // Rotasjoner og fargeskifte else // s.farge == RØD // Fargeskifte // while Programkode d) Hvis s.farge er SVART har vi fire undertilfeller - se illustrasjonene. I hver av dem inngår en rotasjon - enten en enkel eller en dobbel. Vi trenger derfor flg. fire rotasjonsmetoder: private static <T> Node<T> EHR(Node<T> p) // Enkel høyrerotasjon Node<T> q = p.venstre; p.venstre = q.høyre; q.høyre = p; return q; private static <T> Node<T> EVR(Node<T> p) // Enkel venstrerotasjon Node<T> q = p.høyre; p.høyre = q.venstre; q.venstre = p; return q; private static <T> Node<T> DHR(Node<T> p) // Dobbel høyrerotasjon Node<T> q = p.venstre; Node<T> r = q.høyre; q.høyre = r.venstre; r.venstre = q; p.venstre = r.høyre; r.høyre = p; return r;

15 Delkapittel 9.2 Rød-svarte og trær Side 15 av 16 private static <T> Node<T> DVR(Node<T> p) // Dobbel venstrerotasjon Node<T> q = p.høyre; Node<T> r = q.venstre; q.venstre = r.høyre; r.høyre = q; p.høyre = r.venstre; r.venstre = p; return r; Programkode e) De fire tilfellene 1a), 1b), 2a) og 2b) fra illustrasjonene må behandles hver for seg. For å finne hvem av dem som er aktuelle, må vi undersøke om x er venstre eller høyre barn til f og om f er venstre eller høyre barn til b. I alle tilfellene skal b bli rød. Det gir flg. kode: if (s.farge == SVART) b.farge = RØD; if (x == f.venstre) // 1a) eller 2b) if (f == b.venstre) // 1a) p = EHR(b); f.farge = SVART; // enkel høyre + fargeskifte else // x == f.høyre // 2b) p = DVR(b); x.farge = SVART; // dobbel venstre + fargeskifte else // x == f.høyre // 1b) eller 2a) if (f == b.venstre) // 2a) p = DHR(b); x.farge = SVART; // dobbel høyre + fargeskifte else // f == b.høyre // 1b) p = EVR(b); f.farge = SVART; // enkel venstre + fargeskifte if (b == rot) rot = p; // hvis b var rotnoden, må roten oppdateres else Node<T> q = stakk.taut(); if (b == q.venstre) q.venstre = p; else q.høyre = p; return true; // to røde noder på rad er nå avverget Programkode f)

16 Delkapittel 9.2 Rød-svarte og trær Side 16 av 16 I tilfellet s.farge er RØD har vi også fire undertilfeller - se illustrasjonene. Men denne gangen trengs det kun å skifte farger: else // s.farge == RØD f.farge = s.farge = SVART; if (b == rot) return true; b.farge = RØD; // f og s blir svarte // vi stopper // b blir RØD // Må sjekke om forelder til b (dvs. oldeforelder til x) er rød Node<T> o = stakk.taut(); // oldeforelder til x if (o.farge == SVART) return true; // vi stopper // nå har den røde noden b en rød forelder // vi omdøper x, f og b og fortsetter oppover x = b; f = o; b = stakk.taut(); // else Programkode g) Vi kan sette sammen alt dette til en fullstendig kode for metoden legginn(). Dette og kode for en del andre aktuelle metoder ligger på RSBinTre. Hvis du flytter hele klassen over til deg selv, vil du kunne kjøre flg. programbit: int[] a = Tabell.randPerm(10); RSBinTre<Integer> tre = RSBinTre.lagTre(); for (int k : a) tre.legginn(k); System.out.println(tre); // bruker tostring metoden for (int k : tre) System.out.print(k + " "); // bruker iteratoren tre.nullstill(); for (int k = 1; k <= 1_000_000; k++) tre.legginn(k); System.out.println("\n" + tre.høyde()); // treets høyde Programkode h) Oppgaver til avsnitt Legg inn RSBinTre hos deg og kjør Programkode h). Copyright Ulf Uttersrud, All rights reserved.

Algoritmer og datastrukturer Kapittel 9 - Delkapittel 9.2

Algoritmer og datastrukturer Kapittel 9 - Delkapittel 9.2 Delkapittel 9.2 Rød-svarte og 2-3-4 trær side 1 av 21 Algoritmer og datastrukturer Kapittel 9 - Delkapittel 9.2 9.2 Rød-svarte og 2-3-4 trær 9.2.1 B-tre av orden 4 eller 2-3-4 tre Et rød-svart tre og et

Detaljer

Algoritmer og datastrukturer Kapittel 9 - Delkapittel 9.1

Algoritmer og datastrukturer Kapittel 9 - Delkapittel 9.1 Delkapittel 9.1 Generelt om balanserte trær Side 1 av 13 Algoritmer og datastrukturer Kapittel 9 - Delkapittel 9.1 9.1 Generelt om balanserte trær 9.1.1 Hva er et balansert tre? Begrepene balansert og

Detaljer

Algoritmer og datastrukturer Kapittel 9 - Delkapittel 9.4

Algoritmer og datastrukturer Kapittel 9 - Delkapittel 9.4 Delkapittel 9.4 Splay-trær Side 1 av 7 Algoritmer og datastrukturer Kapittel 9 - Delkapittel 9.4 9.4 Splay-trær 9.4.1 Splay-rotasjoner Et splay-tre er et sortert binætre der treet restruktureres på en

Detaljer

G høgskolen i oslo. Emne: Algoritmer og datastrukturer. Emnekode: 80131A. Faglig veileder: UlfUttersrud. Gruppe(r) : Dato: 09.12.

G høgskolen i oslo. Emne: Algoritmer og datastrukturer. Emnekode: 80131A. Faglig veileder: UlfUttersrud. Gruppe(r) : Dato: 09.12. G høgskolen i oslo Emne: Algoritmer og datastrukturer Emnekode: 80131A Faglig veileder: UlfUttersrud Gruppe(r) : Dato: 09.12.2004 Eksamenstid: 9-14 Eksamensoppgaven består av: Tillatte hjelpemidler Antall

Detaljer

Algoritmer og datastrukturer Kapittel 11 - Delkapittel 11.2

Algoritmer og datastrukturer Kapittel 11 - Delkapittel 11.2 Algoritmer og datastrukturer Kapittel 11 - Delkapittel 11.2 11.2 Korteste vei i en graf 11.2.1 Dijkstras metode En graf er et system med noder og kanter mellom noder. Grafen kalles rettet Notasjon Verdien

Detaljer

Algoritmer og datastrukturer Eksamen

Algoritmer og datastrukturer Eksamen Eksamensoppgave i Algoritmer og datastrukturer ved Høgskolen i Oslo Side 1 av 5 Algoritmer og datastrukturer Eksamen 30.11.2010 Eksamenstid: 5 timer Hjelpemidler: Alle trykte og skrevne + håndholdt kalkulator

Detaljer

Algoritmer og datastrukturer Eksamen

Algoritmer og datastrukturer Eksamen Eksamen - Algoritmer og datastrukturer - Høgskolen i Oslo og Akershus - 27.11.2012 Side 1 av 6 Algoritmer og datastrukturer Eksamen 27.11.2012 Eksamensoppgaver Råd og tips: Bruk ikke for lang tid på et

Detaljer

Algoritmer og datastrukturer Eksamen 22. februar 2011

Algoritmer og datastrukturer Eksamen 22. februar 2011 Side 1 av 5 Algoritmer og datastrukturer Eksamen 22. februar 2011 Eksamenstid: 5 timer Hjelpemidler: Alle trykte og skrevne + håndholdt kalkulator som ikke kommuniserer. Faglærer: Ulf Uttersrud Råd og

Detaljer

Algoritmer og datastrukturer Eksamen

Algoritmer og datastrukturer Eksamen Algoritmer og datastrukturer Eksamen 02.12.2009 Eksamenstid: 5 timer Hjelpemidler: Alle trykte og skrevne + håndholdt kalkulator som ikke kommuniserer. Faglærer: Ulf Uttersrud Råd og tips: Bruk ikke for

Detaljer

Algoritmer og datastrukturer Kapittel 5 - Delkapittel 5.1

Algoritmer og datastrukturer Kapittel 5 - Delkapittel 5.1 Delkapittel 5.1 Binære trær side 1 av 71 Algoritmer og datastrukturer Kapittel 5 - Delkapittel 5.1 5.1 Binære trær 5.1.1 Binære trærs egenskaper Binære trær (eng: binary tree), og trær generelt, er en

Detaljer

Algoritmer og datastrukturer Kapittel 1 - Delkapittel 1.3

Algoritmer og datastrukturer Kapittel 1 - Delkapittel 1.3 Delkapittel 1.3 Ordnede tabeller Side 1 av 70 Algoritmer og datastrukturer Kapittel 1 - Delkapittel 1.3 1.3 Ordnede tabeller 1.3.1 Permutasjoner En samling verdier kan settes opp i en rekkefølge. Hver

Detaljer

Algoritmer og datastrukturer Kapittel 4 - Delkapittel 4.3

Algoritmer og datastrukturer Kapittel 4 - Delkapittel 4.3 Delkapittel 4.3 En toveiskø (deque) Side 1 av 5 Algoritmer og datastrukturer Kapittel 4 - Delkapittel 4.3 4.3 En toveiskø (deque) 4.3.1 Grensesnittet Toveiskø En stakk kan godt ses på som en kø der vi

Detaljer

Algoritmer og datastrukturer Kapittel 3 - Delkapittel 3.1

Algoritmer og datastrukturer Kapittel 3 - Delkapittel 3.1 Delkapittel 3.1 Grensesnittet Liste Side 1 av 11 Algoritmer og datastrukturer Kapittel 3 - Delkapittel 3.1 3.1 En beholder 3.1.1 En beholder En pappeske er en beholder En beholder er noe vi kan legge ting

Detaljer

Algoritmer og datastrukturer Kapittel 1 - Delkapittel 1.8

Algoritmer og datastrukturer Kapittel 1 - Delkapittel 1.8 Delkapittel 1.8 Algoritmeanalyse Side 1 av 12 Algoritmer og datastrukturer Kapittel 1 - Delkapittel 1.8 1.8 Algoritmeanalyse 1.8.1 En algoritmes arbeidsmengde I Delkapittel 1.1 ble det definert og diskutert

Detaljer

Algoritmer og datastrukturer Kapittel 2 - Delkapittel 2.1

Algoritmer og datastrukturer Kapittel 2 - Delkapittel 2.1 Delkapittel 2.1 Plangeometriske algoritmer Side 1 av 7 Algoritmer og datastrukturer Kapittel 2 - Delkapittel 2.1 2.1 Punkter, linjesegmenter og polygoner 2.1.1 Polygoner og internett HTML-sider kan ha

Detaljer

Algoritmer og datastrukturer Løsningsforslag

Algoritmer og datastrukturer Løsningsforslag Algoritmer og datastrukturer Løsningsforslag Eksamen 23. februar 2011 Oppgave 1A Et Huffmantre blir alltid et fullt tre, dvs. alle indre noder har to barn. Hvis vi tegner et tre ved hjelp av de bitkodene

Detaljer

Algoritmer og datastrukturer Eksamen

Algoritmer og datastrukturer Eksamen Algoritmer og datastrukturer Eksamen 24.02.2010 Eksamenstid: 5 timer Hjelpemidler: Alle trykte og skrevne + håndholdt kalkulator som ikke kommuniserer. Faglærer: Ulf Uttersrud Råd og tips: Bruk ikke for

Detaljer

EKSAMEN med løsningsforslag

EKSAMEN med løsningsforslag EKSAMEN med løsningsforslag Emnekode: ITF20006 Emne: Algoritmer og datastrukturer Dato: Eksamenstid: 20. mai 2009 kl 09.00 til kl 13.00 Hjelpemidler: 8 A4-sider (4 ark) med egne notater Kalkulator Faglærer:

Detaljer

Algoritmer og datastrukturer Eksamen

Algoritmer og datastrukturer Eksamen 1 Algoritmer og datastrukturer Eksamen 29.11.2011 Eksamenstid: 5 timer Hjelpemidler: Alle trykte og skrevne + håndholdt kalkulator som ikke kommuniserer. Faglærer: Ulf Uttersrud Råd og tips: Bruk ikke

Detaljer

EKSAMEN. Algoritmer og datastrukturer. Eksamensoppgaven: Oppgavesettet består av 11 sider inklusiv vedlegg og denne forsiden.

EKSAMEN. Algoritmer og datastrukturer. Eksamensoppgaven: Oppgavesettet består av 11 sider inklusiv vedlegg og denne forsiden. EKSAMEN Emnekode: ITF20006 Emne: Algoritmer og datastrukturer Dato: Eksamenstid: 20. mai 2008 kl 09.00 til kl 13.00 Hjelpemidler: 4 A4-sider (2 ark) med valgfritt innhold Kalkulator Faglærer: Mari-Ann

Detaljer

Algoritmer og datastrukturer Kapittel 5 - Delkapittel 5.4

Algoritmer og datastrukturer Kapittel 5 - Delkapittel 5.4 Delkapittel 5.4 Huffmantrær Side 1 av 50 Algoritmer og datastrukturer Kapittel 5 - Delkapittel 5.4 5.4 Huffmantrær 5.4.1 Datakomprimering D. Huffman Et Huffmantre er et fullt binærtre med spesielle egenskaper

Detaljer

Emnekode: I-Dato: I ~ Antall oppgaver: I I Aiie -sk:i=rftlige - bme trykte og håndskrevne, samt alle typer

Emnekode: I-Dato: I ~ Antall oppgaver: I I Aiie -sk:i=rftlige - bme trykte og håndskrevne, samt alle typer G høgskolen i oslo I Emne: Emnekode: ~ I Faglig veileder: Algoritmer og datastrukturer LO 140 A UlfUttersrud I Gruppe(r): I Eksamensoppgaven IbestAr av: - l Tillatte hjelpemidler: - - Antall sider (inkl.

Detaljer

09.12.2003 9-14. ~ta11 oppgaver: 4. Nle skriftlige hjelpemidler-både trykte og håndskrevne, er tillatt

09.12.2003 9-14. ~ta11 oppgaver: 4. Nle skriftlige hjelpemidler-både trykte og håndskrevne, er tillatt I Kontrollert I høgskolen i oslo Emne Emnekode: Faglig veileder: Algoritmer og datastrukturer 80 131A UlUttersrud ppe(r): Dato: Eksamenstid:- 09.12.2003 9-14 Eksamensoppgaven består av: ta11 sider (inkl

Detaljer

Algoritmer og datastrukturer Løsningsforslag

Algoritmer og datastrukturer Løsningsforslag 1 Algoritmer og datastrukturer Løsningsforslag Eksamen 29. november 2011 Oppgave 1A Verdien til variabelen m blir lik posisjonen til den «minste»verdien i tabellen, dvs. bokstaven A, og det blir 6. Oppgave

Detaljer

Fagnr: A. Ant. vedlegg: 1 (2 sider)

Fagnr: A. Ant. vedlegg: 1 (2 sider) Fag: Algoritmer datastrukturer og Fagnr: 50 131 A Faglig ansv.: Ulf Uttersrud Sensor: Tor Lønnestad Ant. sider 3 Ant. oppgaver: 3 Ant. vedlegg: 1 (2 sider) Dato: 15.02.2002 Eksamenstid 9-14 c Råd og tips:

Detaljer

Dagens plan: INF2220 - Algoritmer og datastrukturer. Repetisjon: Binære søketrær. Repetisjon: Binære søketrær

Dagens plan: INF2220 - Algoritmer og datastrukturer. Repetisjon: Binære søketrær. Repetisjon: Binære søketrær Dagens plan: INF2220 - lgoritmer og datastrukturer HØTEN 2007 Institutt for informatikk, Universitetet i Oslo (kap. 4.7) (kap. 12.2) Interface ollection og Iterator (kap. 3.3) et og maps (kap. 4.8) INF2220,

Detaljer

INF2220: Forelesning 2

INF2220: Forelesning 2 INF2220: Forelesning 2 Balanserte søketrær Rød-svarte trær (kapittel12.2) B-trær (kapittel 4.7) REPETISJON: BINÆRE SØKETRÆR 2 Binære søketrær 8 4 12 2 7 9 15 6 11 13 16 For enhver node i et binært søketre

Detaljer

Algoritmer og datastrukturer A.1 Filbehandling på bit-nivå

Algoritmer og datastrukturer A.1 Filbehandling på bit-nivå Vedlegg A.1 Filbehandling på bit-nivå Side 1 av 9 Algoritmer og datastrukturer A.1 Filbehandling på bit-nivå A.1 Filbehandling på bit-nivå A.1.1 Sammendrag Klassen BitInputStream gjør det mulig å lese

Detaljer

INF2220: Forelesning 2. Balanserte søketrær Rød-svarte trær (kapittel12.2) B-trær (kapittel 4.7)

INF2220: Forelesning 2. Balanserte søketrær Rød-svarte trær (kapittel12.2) B-trær (kapittel 4.7) INF2220: Forelesning 2 Balanserte søketrær Rød-svarte trær (kapittel12.2) B-trær (kapittel 4.7) REPETISJON: BINÆRE SØKETRÆR 2 Binære søketrær 8 4 12 2 7 9 15 6 11 13 16 For enhver node i et binært søketre

Detaljer

NITH PG4200 Algoritmer og datastrukturer Løsningsforslag Eksamen 4.juni 2013

NITH PG4200 Algoritmer og datastrukturer Løsningsforslag Eksamen 4.juni 2013 NITH PG4200 Algoritmer og datastrukturer Løsningsforslag Eksamen 4.juni 20 ette løsningsforslaget er til tider mer detaljert enn det man vil forvente av en eksamensbesvarelse. et er altså ikke et eksempel

Detaljer

INF2220: Forelesning 2

INF2220: Forelesning 2 INF2220: Forelesning 2 Mer om analyse av algoritmer Analyse av binære søketrær Balanserte søketrær Rød-svarte trær (kapittel12.2) B-trær (kapittel 4.7) ANALYSE AV ALGORITMER 2 Analyse av tidsforbruk Hvor

Detaljer

Algoritmer og datastrukturer Løsningsforslag

Algoritmer og datastrukturer Løsningsforslag Algoritmer og datastrukturer Løsningsforslag Eksamen 30. november 2010 Oppgave 1A Et turneringstre for en utslagsturnering med n deltagere blir et komplett binærtre med 2n 1 noder. I vårt tilfelle får

Detaljer

Definisjon: Et sortert tre

Definisjon: Et sortert tre Binære søketrær Definisjon: Et sortert tre For alle nodene i et binært søketre gjelder: Alle verdiene i nodens venstre subtre er mindre enn verdien i noden Alle verdiene i nodens høyre subtre er større

Detaljer

Fra Kap.10 Binære søketre (BS-tre) Sist oppdatert 20.03.10 Definere en abstrakt datastruktur binært søketre. Vise hvordan binær søketre kan brukes

Fra Kap.10 Binære søketre (BS-tre) Sist oppdatert 20.03.10 Definere en abstrakt datastruktur binært søketre. Vise hvordan binær søketre kan brukes Fra Kap.10 Binære søketre (BS-tre) Sist oppdatert 20.03.10 Definere en abstrakt datastruktur binært søketre. Vise hvordan binær søketre kan brukes til å løse problemer. Undersøke ulike implementasjoner

Detaljer

Algoritmer og datastrukturer Assignment 11 Side 1 av 5

Algoritmer og datastrukturer Assignment 11 Side 1 av 5 Assignment 11 Side 1 av 5 Oppgave 1 Utregning av ASCII summer, og hashfunksjon: Hashfunksjon: A(s) % n Nøkkel ASCII SUM (ASCII SUM) % 8 ANNE 290 2 PER 231 7 NINA 294 6 ANNI 294 6 ALI 214 6 KAREN 369 1

Detaljer

EKSAMEN. Algoritmer og datastrukturer

EKSAMEN. Algoritmer og datastrukturer EKSAMEN Emnekode: ITF20006 Emne: Algoritmer og datastrukturer Dato: Eksamenstid: 20. mai 2009 kl 09.00 til kl 13.00 Hjelpemidler: 8 A4-sider (4 ark) med egne notater Kalkulator Faglærer: Gunnar Misund

Detaljer

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO 1 UNIVERSITETET I OSLO Det matematisk-naturvitenskapelige fakultet Eksamen i : IN 115 Eksamensdag : Lørdag 20 mai, 2000 Tid for eksamen : 09.00-15.00 Oppgavesettet er på : 5 sider Vedlegg : Intet. Tillatte

Detaljer

Repetisjon: Binære. Dagens plan: Rød-svarte trær. Oppgave (N + 1)!

Repetisjon: Binære. Dagens plan: Rød-svarte trær. Oppgave (N + 1)! Repetisjon: Binære søketrær Dagens plan: Rød-svarte trær (kap. 12.2) B-trær (kap. 4.7) bstrakte datatyper (kap. 3.1) takker (kap. 3.3) For enhver node i et binært søketre gjelder: lle verdiene i venstre

Detaljer

Algoritmer og Datastrukturer

Algoritmer og Datastrukturer Eksamen i Algoritmer og Datastrukturer IAI 21899 Høgskolen i Østfold Avdeling for informatikk og automatisering Torsdag 3. november 2, kl. 9. - 14. Hjelpemidler: Alle trykte og skrevne hjelpemidler. Kalkulator.

Detaljer

Ordliste. Obligatorisk oppgave 1 - Inf 1020

Ordliste. Obligatorisk oppgave 1 - Inf 1020 Ordliste. Obligatorisk oppgave 1 - Inf 1020 I denne oppgaven skal vi tenke oss at vi vil holde et register over alle norske ord (med alle bøyninger), og at vi skal lage operasjoner som kan brukes til f.

Detaljer

Et eksempel: Åtterspillet

Et eksempel: Åtterspillet Trær Et eksempel: Åtterspillet To spillere som «trekker» annenhver gang I hvert trekk velges et av tallene 1, 2, 3, men ikke tallet som motspiller valgte i forrige trekk Valgte tall summeres fortløpende

Detaljer

Løsningsforslag EKSAMEN

Løsningsforslag EKSAMEN 1 Løsningsforslag EKSAMEN Emnekode: ITF20006 000 Dato: 18. mai 2012 Emne: Algoritmer og datastrukturer Eksamenstid: 09:00 til 13:00 Hjelpemidler: 8 A4-sider (4 ark) med egne notater Faglærer: Gunnar Misund

Detaljer

Definisjon av binært søketre

Definisjon av binært søketre Binære søketrær Definisjon av binært søketre For alle nodene i et binært søketre gjelder: Alle verdiene i nodens venstre subtre er mindre enn verdien i noden Alle verdiene i nodens høyre subtre er større

Detaljer

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO UNIVERSITETET I OSLO Det matematisk-naturvitenskapelige fakultet Kandidatnr Eksamen i INF1000 Grunnkurs i objektorientert programmering Eksamensdag: Prøveeksamen tirsdag 23. november 2010 Tid for eksamen:

Detaljer

Algoritmer og datastrukturer Binære søketrær

Algoritmer og datastrukturer Binære søketrær Delkapittel 5.2 Binære søketrær side 1 av 44 Algoritmer og datastrukturer 5.2 - Binære søketrær 5.2 Binære søketrær 5.2.1 Hva er et binært søketre? Navnet binært søketre (eng: binary search tree) indikerer

Detaljer

Algoritmer og datastrukturer Kapittel 2 - Delkapittel 2.2

Algoritmer og datastrukturer Kapittel 2 - Delkapittel 2.2 Delkapittel 2.2 Konvekse polygoner Side 1 av 7 Algoritmer og datastrukturer Kapittel 2 - Delkapittel 2.2 2.2 Konvekse polygoner 2.2.1 Konveksitet La p 0, p 1, p 2....., p n-1 være en samling på n punkter

Detaljer

Lars Vidar Magnusson

Lars Vidar Magnusson B-Trær Lars Vidar Magnusson 5.3.2014 Kapittel 18 B-trær Standard operasjoner Sletting B-Trær B-trær er balanserte trær som er designet for å fungere bra på sekundære lagringsmedium e.g. harddisk. Ligner

Detaljer

INF1010 Binære søketrær ++

INF1010 Binære søketrær ++ INF1010 Binære søketrær ++ Programeksempler med insetting, gjenfinning av noder i et binært søketre samt eksempler på hvordan lage en liste av et binærtre. Hva må du kunne om binære søketrær i INF1010

Detaljer

Løsnings forslag i java In115, Våren 1996

Løsnings forslag i java In115, Våren 1996 Løsnings forslag i java In115, Våren 1996 Oppgave 1a For å kunne kjøre Warshall-algoritmen, må man ha grafen på nabomatriseform, altså en boolsk matrise B, slik at B[i][j]=true hvis det går en kant fra

Detaljer

Algoritmer og datastrukturer Kapittel 4 - Delkapittel 4.4

Algoritmer og datastrukturer Kapittel 4 - Delkapittel 4.4 Delkapittel 4.4 En prioritetskø Side 1 av 8 Algoritmer og datastrukturer Kapittel 4 - Delkapittel 4.4 4.4 En prioritetskø 4.4.1 Grensesnittet PrioritetsKø En prioritetskø (engelsk: priority queue) er en

Detaljer

Norges Informasjonsteknologiske Høgskole

Norges Informasjonsteknologiske Høgskole Oppgavesettet består av 6 (seks) sider. Norges Informasjonsteknologiske Høgskole PG4200 Algoritmer og datastrukturer Side 1 av 6 Tillatte hjelpemidler: Ingen Varighet: 3 timer Dato: 6. august 2014 Fagansvarlig:

Detaljer

EKSAMEN. Dato: 18. mai 2017 Eksamenstid: 09:00 13:00

EKSAMEN. Dato: 18. mai 2017 Eksamenstid: 09:00 13:00 EKSAMEN Emnekode: ITF20006 Emne: Algoritmer og datastrukturer Dato: 18. mai 2017 Eksamenstid: 09:00 13:00 Hjelpemidler: Alle trykte og skrevne Kalkulator Faglærer: Jan Høiberg Om eksamensoppgavene: Oppgavesettet

Detaljer

INF110 Algoritmer og datastrukturer TRÆR. Vi skal i denne forelesningen se litt på ulike typer trær:

INF110 Algoritmer og datastrukturer TRÆR. Vi skal i denne forelesningen se litt på ulike typer trær: TRÆR Vi skal i denne forelesningen se litt på ulike typer trær: Generelle trær (kap. 4.1) Binærtrær (kap. 4.2) Binære søketrær (kap. 4.3) Den siste typen trær vi skal behandle, B-trær (kap. 4.7) kommer

Detaljer

Fagnr: A. Ant. vedlegg: 1 (2 sider)

Fagnr: A. Ant. vedlegg: 1 (2 sider) Fag: Algoritmer og datastrukturer Fagnr: 50 3 A Faglig ansv.: Ulf Uttersrud Sensor: Tor Lønnestad Ant. sider: 3 Ant. oppgaver: 3 Ant. vedlegg: (2 sider) Dato: 0.2.200~ Eksamenstid: 9-4 RAd og tips: Bruk

Detaljer

Oppgave 1 LØSNINGSFORSLAG. Eksamen i INF desember Betrakt følgende vektede, urettede graf:

Oppgave 1 LØSNINGSFORSLAG. Eksamen i INF desember Betrakt følgende vektede, urettede graf: INF100 Algoritmer og datastrukturer INF100 Algoritmer og datastrukturer Oppgave 1 LØSNINGSFORSLAG Betrakt følgende vektede, urettede graf: V 1 V Eksamen i INF100 1. desember 004 V V 4 V 4 V V Ragnar Normann

Detaljer

Fagnr: SO 131 A. Ant. vedlegg: 1 (2 sider)

Fagnr: SO 131 A. Ant. vedlegg: 1 (2 sider) Fag: Algoritmer datastrukturer og Fagnr: SO 131 A Faglig ansv.: Ulf Uttersrud Sensor: Tor Lønnestad Ant. sider: 4 Ant. oppgaver: 3 Ant. vedlegg: 1 (2 sider) Dato: 10.12.2001 Eksamenstid: 9-14 RAd og tips:

Detaljer

Flerveis søketrær og B-trær

Flerveis søketrær og B-trær Flerveis søketrær og B-trær Flerveis søketre * Generalisering av binært søketre Binært søketre: Hver node har maksimalt 2 subtrær/barn og 1 verdi Barna ligger sortert på verdi i forhold til den ene verdien

Detaljer

Binære søketrær. En ordnet datastruktur med raske oppslag. Sigmund Hansen

Binære søketrær. En ordnet datastruktur med raske oppslag. Sigmund Hansen Binære søketrær En ordnet datastruktur med raske oppslag Sigmund Hansen Lister og trær Rekke (array): 1 2 3 4 Lenket liste (dobbelt-lenket): 1 2 3 4 Binært søketre: 3 1 4 2 Binære

Detaljer

INF1010 Rekursive metoder, binære søketrær. Algoritmer: Mer om rekursive kall mellom objekter Ny datastruktur: binært tre

INF1010 Rekursive metoder, binære søketrær. Algoritmer: Mer om rekursive kall mellom objekter Ny datastruktur: binært tre INF1010 Rekursive metoder, binære søketrær Algoritmer: Mer om rekursive kall mellom objekter Ny datastruktur: binært tre public void skrivutmeg ( ) { System. out. println (navn + " er venn med " + minbestevennheter

Detaljer

Oppgave 1 a. INF1020 Algoritmer og datastrukturer. Oppgave 1 b

Oppgave 1 a. INF1020 Algoritmer og datastrukturer. Oppgave 1 b Oppgave 1 1 a INF1020 Algoritmer og datastrukturer Forelesning 14: Gjennomgang av eksamen vår 2001 oppgave 1,2,4 Arild Waaler Institutt for informatikk, Universitetet i Oslo Oppgave 1 a Programmer en ikke-rekursiv

Detaljer

HØGSKOLEN I SØR-TRØNDELAG Avdeling for informatikk og e-læring AITeL

HØGSKOLEN I SØR-TRØNDELAG Avdeling for informatikk og e-læring AITeL HØGSKOLEN I SØR-TRØNDELAG Avdeling for informatikk og e-læring AITeL Delprøve Kandidatnr: Prøvedato: 2. mars 2005 Varighet: 3 timer (9:00 12:00) Fagnummer: LO196D Fagnavn: Videregående programmering med

Detaljer

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO BOKMÅL Eksamen i : UNIVERSITETET I OSLO Det matematisk-naturvitenskapelige fakultet INF1020 Algoritmer og datastrukturer Eksamensdag : Fredag 15. desember 2006 Tid for eksamen : 15.30 18.30 Oppgavesettet

Detaljer

Algoritmer og datastrukturer Vedlegg A.2 BitOutputStream

Algoritmer og datastrukturer Vedlegg A.2 BitOutputStream Vedlegg A.2 BitOutputStream Side 1 av 6 Algoritmer og datastrukturer Vedlegg A.2 BitOutputStream A.2 BitOutputStream A.2.1 Instansiering og skriving BitOutputStream har fire konstruktører og to konstruksjonsmetoder

Detaljer

Diagnosekart for oblig 2, INF3/4130 h07

Diagnosekart for oblig 2, INF3/4130 h07 Diagnosekart for oblig 2, INF3/4130 h07 Dag Sverre Seljebotn 1. november 2007 Dette er et dokument jeg har skrivd for å gjøre det enklere å gi tilbakemelding på obligene, siden så mange ting går igjen

Detaljer

Eks 1: Binærtre Binærtretraversering Eks 2: Binærtre og stakk

Eks 1: Binærtre Binærtretraversering Eks 2: Binærtre og stakk Godkjent oblig 1? Les e-post til din UiO-adresse Svar på e-post fra lablærer Ingen godkjenning før avholdt møte med lablærer Godkjentlistene brukes ikke til å informere om status for obligene Ta vare på

Detaljer

Algoritmer og Datastrukturer IAI 21899

Algoritmer og Datastrukturer IAI 21899 Eksamen i Algoritmer og Datastrukturer IAI 21899 Høgskolen i Østfold Avdeling for informatikk og automatisering Torsdag 30. november 2000, kl. 09.00-14.00 LØSNINGSFORSLAG 1 Del 1, Binære søketrær Totalt

Detaljer

Løsningsforslag ukeoppg. 9: 19. - 25. okt (INF1000 - Høst 2011)

Løsningsforslag ukeoppg. 9: 19. - 25. okt (INF1000 - Høst 2011) Løsningsforslag ukeoppg. 9: 19. - 25. okt (INF1000 - Høst 2011) HashMap, innstikksortering, javadoc (kap. 9.1-9.11, m.m. i "Rett på Java" 3. utg.) NB! Legg merke til at disse er løsningsforslag. Løsningene

Detaljer

Dagens tema: 12 gode råd for en kompilatorskriver. Sjekking av navn. Lagring av navn. Hvordan finne et navn?

Dagens tema: 12 gode råd for en kompilatorskriver. Sjekking av navn. Lagring av navn. Hvordan finne et navn? Dagens tema: 12 gode råd for en kompilatorskriver Hva skal gjøres med navn? Sjekking av navn Hvordan sjekke navn? Testutskrifter 12 gode råd En kompilator må også sjekke riktig navnebruk: Det må ikke forekomme

Detaljer

OPPGAVE 5b og 8b Java Kode

OPPGAVE 5b og 8b Java Kode OPPGAVE 5b og 8b Java Kode public class Kant boolean behandlereturavbil() BehandleReturAvBil behandler = new BehandleReturAvBil(this); String regnr; int kmstand, tanknivaa; boolean erskadet; // 1: Få verdiene

Detaljer

Rekursjon. Binærsøk. Hanois tårn.

Rekursjon. Binærsøk. Hanois tårn. Rekursjon Binærsøk. Hanois tårn. Hvorfor sortering (og søking) er viktig i programmering «orden» i dataene vi blir fort lei av å lete poleksempel internett «alt» er søking og sortering alternativer til

Detaljer

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO UNIVERSITETET I OSLO Det matematisk-naturvitenskapelige fakultet Eksamen i INF1020 Algoritmer og datastrukturer Eksamensdag: 15. desember 2004 Tid for eksamen: 14.30 17.30 Oppgavesettet er på 6 sider.

Detaljer

Algoritmer og datastrukturer A.1 BitInputStream

Algoritmer og datastrukturer A.1 BitInputStream Vedlegg A.1 BitInputStream Side 1 av 8 Algoritmer og datastrukturer A.1 BitInputStream A.1 BitInputStream A.1.1 Instansiering BitInputStream har fire konstruktører og to konstruksjonsmetoder (eng: factory

Detaljer

Lars Vidar Magnusson Kapittel 13 Rød-Svarte (Red-Black) trær Rotasjoner Insetting Sletting

Lars Vidar Magnusson Kapittel 13 Rød-Svarte (Red-Black) trær Rotasjoner Insetting Sletting Rød-Svarte Trær Lars Vidar Magnusson 21.2.2014 Kapittel 13 Rød-Svarte (Red-Black) trær Rotasjoner Insetting Sletting Rød-Svarte Trær Rød-Svarte trær (red-black trees) er en variasjon binære søketrær som

Detaljer

EKSAMEN Løsningsforslag. med forbehold om bugs :-)

EKSAMEN Løsningsforslag. med forbehold om bugs :-) 1 EKSAMEN Løsningsforslag med forbehold om bugs :-) Emnekode: ITF20006 000 Dato: 20. mai 2011 Emne: Algoritmer og datastrukturer Eksamenstid: 09:00 til 13:00 Hjelpemidler: 8 A4-sider (4 ark) med egne notater

Detaljer

13.09.2012 LITT OM OPPLEGGET. INF1000 EKSTRATILBUD Stoff fra uke 1-3 12. September 2012 Siri Moe Jensen EKSEMPLER

13.09.2012 LITT OM OPPLEGGET. INF1000 EKSTRATILBUD Stoff fra uke 1-3 12. September 2012 Siri Moe Jensen EKSEMPLER .9.22 LITT OM OPPLEGGET INF EKSTRATILBUD Stoff fra uke - 2. September 22 Siri Moe Jensen Målgruppe: De som mangler forståelse for konseptene gjennomgått så langt. Trening får du ved å jobbe med oppgaver,

Detaljer

TOD063 Datastrukturer og algoritmer

TOD063 Datastrukturer og algoritmer TOD063 Datastrukturer og algoritmer Øving : 3 Utlevert : Uke 7 Innleveringsfrist : 26. februar 2010 Klasse : 1 Data og 1 Informasjonsteknologi Gruppearbeid: 2-3 personer pr. gruppe. Oppgave 1 Vi skal lage

Detaljer

Kap.12. Flervegssøketre. Studerer 2-3 og 2-4 trær. Sist oppdatert

Kap.12. Flervegssøketre. Studerer 2-3 og 2-4 trær. Sist oppdatert Kap.12 Flervegssøketre Sist oppdatert 12.04.10 Studerer 2-3 og 2-4 trær Motivasjon n maks = antall elementer i et fullt binært tre med nivåer 0 k ; (en node har ett element) n maks = 2 0 + 2 1 + + 2 k

Detaljer

... Når internminnet blir for lite. Dagens plan: Løsning: Utvidbar hashing. hash(x) katalog. O modellen er ikke lenger gyldig ved

... Når internminnet blir for lite. Dagens plan: Løsning: Utvidbar hashing. hash(x) katalog. O modellen er ikke lenger gyldig ved Dagens plan: Utvidbar hashing (kapittel 5.6) B-trær (kap. 4.7) Abstrakte datatyper (kap. 3.1) Stakker (kap. 3.3) Når internminnet blir for lite En lese-/skriveoperasjon på en harddisk (aksesstid 7-12 millisekunder)

Detaljer

Algoritmeanalyse. (og litt om datastrukturer)

Algoritmeanalyse. (og litt om datastrukturer) Algoritmeanalyse (og litt om datastrukturer) Datastrukturer definisjon En datastruktur er den måten en samling data er organisert på. Datastrukturen kan være ordnet (sortert på en eller annen måte) eller

Detaljer

Algoritmer og datastrukturer Løsningsforslag

Algoritmer og datastrukturer Løsningsforslag Algoritmer og datastrukturer ved Høgskolen i OsloSide 1 av 6 Algoritmer og datastrukturer Løsningsforslag Eksamen 24. februar 2010 Oppgave 1A 1. Komparatoren sammenligner først lengdene til de to strengene.

Detaljer

Algoritmer og Datastrukturer

Algoritmer og Datastrukturer Eksamen i Algoritmer og Datastrukturer IAI 20102 Høgskolen i Østfold Avdeling for informatikk og automatisering Lødag 5. juni 2004, kl. 09.00-13.00 Hjelpemidler: Alle trykte og skrevne hjelpemidler. Kalkulator.

Detaljer

Oppgave 3 a. Antagelser i oppgaveteksten. INF1020 Algoritmer og datastrukturer. Oppgave 3. Eksempelgraf

Oppgave 3 a. Antagelser i oppgaveteksten. INF1020 Algoritmer og datastrukturer. Oppgave 3. Eksempelgraf Oppgave 3 3 a IN1020 Algoritmer og datastrukturer orelesning 15: Gjennomgang av eksamen vår 2001 oppgave 3 Arild Waaler Institutt for informatikk, Universitetet i Oslo 11. desember 2006 Oppgave 3 a. Antagelser

Detaljer

Heap* En heap er et komplett binært tre: En heap er også et monotont binært tre:

Heap* En heap er et komplett binært tre: En heap er også et monotont binært tre: Heap Heap* En heap er et komplett binært tre: Alle nivåene i treet, unntatt (muligens) det nederste, er alltid helt fylt opp med noder Alle noder på nederste nivå ligger til venstre En heap er også et

Detaljer

Dagens tema: Mer av det dere trenger til del 1

Dagens tema: Mer av det dere trenger til del 1 Dagens tema Dagens tema: Mer av det dere trenger til del 1 Hvilke klasser trenger vi? Uttrykk Typer Testutskrifter 12 gode råd Dagens tema Prosjektet Utifra dette AlboC-programmet: int pot2 (int x) { int

Detaljer

INF2220: Forelesning 1. Praktisk informasjon Analyse av algoritmer (kapittel 2) (Binær)trær (kapittel )

INF2220: Forelesning 1. Praktisk informasjon Analyse av algoritmer (kapittel 2) (Binær)trær (kapittel ) INF2220: Forelesning 1 Praktisk informasjon Analyse av algoritmer (kapittel 2) (Binær)trær (kapittel 4.1-4.3 + 4.6) PRAKTISK INFORMASJON 2 Praktisk informasjon Kursansvarlige Ragnhild Kobro Runde (ragnhilk@ifi.uio.no)

Detaljer

En implementasjon av binærtre. Dagens tema. Klassestruktur hovedstruktur abstract class BTnode {}

En implementasjon av binærtre. Dagens tema. Klassestruktur hovedstruktur abstract class BTnode {} En implementasjon av binærtre Dagens tema Eksempel på binærtreimplementasjon Rekursjon: Tårnet i Hanoi Søking Lineær søking Klassestruktur hovedstruktur abstract class { class Person extends { class Binaertre

Detaljer

Løsningsforslag. Oppgave 1.1. Oppgave 1.2

Løsningsforslag. Oppgave 1.1. Oppgave 1.2 Løsningsforslag Oppgave 1.1 7 4 10 2 5 9 12 1 3 6 8 11 14 13 Oppgave 1.2 1 2 3 4 5 6 7 8 9 10 11 12 13 14 1 Oppgave 1.3 Rekursiv løsning: public Node settinn(person ny, Node rot) if (rot == null) return

Detaljer

Algoritmer og Datastrukturer

Algoritmer og Datastrukturer Eksamen i Algoritmer og Datastrukturer IAI 20102 Høgskolen i Østfold Avdeling for informatikk og automatisering Lødag 5. juni 2004, kl. 09.00-13.00 LØSNINGSFORSLAG 1 Del 1 60% Oppgave 1.1-10% Forklar kort

Detaljer

Norsk informatikkolympiade 2014 2015 1. runde. Sponset av. Uke 46, 2014

Norsk informatikkolympiade 2014 2015 1. runde. Sponset av. Uke 46, 2014 Norsk informatikkolympiade 014 015 1. runde Sponset av Uke 46, 014 Tid: 90 minutter Tillatte hjelpemidler: Kun skrivesaker. Det er ikke tillatt med kalkulator eller trykte eller håndskrevne hjelpemidler.

Detaljer

Tre måter å lese fra terminal. Java 4. Eksempel. Formatert utskrift til skjerm

Tre måter å lese fra terminal. Java 4. Eksempel. Formatert utskrift til skjerm Mer om easyio Mer om forgreninger Løkker 7. september 2004 Ole Christian Lingjærde Gruppen for bioinformatikk Institutt for informatikk Universitetet i Oslo Java 4 1 Tre måter å lese fra terminal Først:

Detaljer

Algoritmer og datastrukturer Kapittel 3 - Delkapittel 3.3

Algoritmer og datastrukturer Kapittel 3 - Delkapittel 3.3 Delkapittel 3.3 En lenket liste side 1 av 12 Algoritmer og datastrukturer Kapittel 3 - Delkapittel 3.3 3.3 En lenket liste 3.3.1 Lenket liste med noder En lenket liste (eller en pekerkjede som det også

Detaljer

Rekursiv programmering

Rekursiv programmering Rekursiv programmering Babushka-dukker En russisk Babushkadukke er en sekvens av like dukker inne i hverandre, som kan åpnes Hver gang en dukke åpnes er det en mindre utgave av dukken inni, inntil man

Detaljer

EKSAMEN. Emne: Algoritmer og datastrukturer

EKSAMEN. Emne: Algoritmer og datastrukturer 1 EKSAMEN Emnekode: ITF20006 000 Dato: 18. mai 2012 Emne: Algoritmer og datastrukturer Eksamenstid: 09:00 til 13:00 Hjelpemidler: 8 A4-sider (4 ark) med egne notater Faglærer: Gunnar Misund Oppgavesettet

Detaljer

Soloball. Steg 1: En roterende katt. Sjekkliste. Test prosjektet. Introduksjon. Vi begynner med å se på hvordan vi kan få kattefiguren til å rotere.

Soloball. Steg 1: En roterende katt. Sjekkliste. Test prosjektet. Introduksjon. Vi begynner med å se på hvordan vi kan få kattefiguren til å rotere. Soloball Introduksjon Scratch Introduksjon Vi skal nå lære hvordan vi kan lage et enkelt ballspill med Scratch. I soloball skal du styre katten som kontrollerer ballen, slik at ballen ikke går i nettet.

Detaljer

Algoritmer og Datastrukturer

Algoritmer og Datastrukturer Eksamen i Algoritmer og Datastrukturer IAI 21899 Høgskolen i Østfold Avdeling for informatikk og automatisering Lørdag 15. desember 2001, kl. 09.00-14.00 Hjelpemidler: Alle trykte og skrevne hjelpemidler.

Detaljer

MED TIDESTIMATER Løsningsforslag

MED TIDESTIMATER Løsningsforslag Oppgavesettet består av 12 (mange) sider. Norges Informasjonsteknologiske Høgskole PG4200 Algoritmer og datastrukturer Side 1 av 12 Tillatte hjelpemidler: Ingen Varighet: 3 timer Dato: 6. august 2014 Fagansvarlig:

Detaljer

Universitetet i Bergen Det matematisk-naturvitenskapelige fakultet Institutt for informatikk

Universitetet i Bergen Det matematisk-naturvitenskapelige fakultet Institutt for informatikk Side 1 av 20 Universitetet i Bergen Det matematisk-naturvitenskapelige fakultet Institutt for informatikk Bokmål Eksamen i emnet INF100 Grunnkurs i programmering Torsdag 27. november 2014 Tid: 09:00 14:00

Detaljer

Det matematisk-naturvitenskapelige fakultet

Det matematisk-naturvitenskapelige fakultet LØSNINGSFORSLAG - KOMMENTARER til SENSOR N.B. RETTELSE 23.05 og 26.05 pkt. e) :UNIVERSITETET I OSLO Det matematisk-naturvitenskapelige fakultet Eksamen i : IN 5 Eksamensdag : Lørdag 20 mai, 2000 Tillatte

Detaljer

Løsnings forslag i java In115, Våren 1998

Løsnings forslag i java In115, Våren 1998 Løsnings forslag i java In115, Våren 1998 Oppgave 1 // Inne i en eller annen klasse private char S[]; private int pardybde; private int n; public void lagalle(int i) if (i==n) bruks(); else /* Sjekker

Detaljer

Oblig 4 (av 4) INF1000, høsten 2012 Værdata, leveres innen 9. nov. kl. 23.59

Oblig 4 (av 4) INF1000, høsten 2012 Værdata, leveres innen 9. nov. kl. 23.59 Oblig 4 (av 4) INF1000, høsten 2012 Værdata, leveres innen 9. nov. kl. 23.59 Formål Formålet med denne oppgaven er å gi trening i hele pensum og i å lage et større program. Løsningen du lager skal være

Detaljer