Eksempel: Uttrykkstrær I uttrykkstrær inneholder bladnodene operander (konstanter, variable,... ), mens de interne nodene inneholder operatorer.

Like dokumenter
Generelle trær BINÆRTRÆR. Binærtrær

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

Dagens tema. INF Algoritmer og datastrukturer. Binærtrær. Generelle trær

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

INF2220: Forelesning 1

INF2220: Forelesning 1

Hva er en algoritme? INF HØSTEN 2006 INF1020. Kursansvarlige Ragnar Normann E-post: Dagens tema

INF2220: Forelesning 2

INF1010 Binære søketrær ++

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

INF Algoritmer og datastrukturer. Hva er INF2220? Algoritmer og datastrukturer

INF2220: Forelesning 2

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

Binære trær: Noen algoritmer og anvendelser

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

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

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

Binære søketrær. Et notat for INF1010 Stein Michael Storleer 16. mai 2013

Definisjon av binært søketre

Gjøre noe i hele treet = kalle på samme metode i alle objekten. Java datastruktur Klassestruktur

EKSAMEN med løsningsforslag

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

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

Definisjon: Et sortert tre

Trær. En datastruktur (og abstrakt datatype ADT)

EKSAMEN. Algoritmer og datastrukturer

HENRIK IBSEN VILLANDEN SKUESPILL I FEM AKTER (1884) Etterord av Bjørn Hemmer

Kap 9 Tre Sist oppdatert 15.03

Algoritmer og Datastrukturer

Lars Vidar Magnusson

Løsningsforslag. Oppgave 1.1. Oppgave 1.2

Object [] element. array. int [] tall

INF1010 siste begreper før oblig 2

Balanserte binære søketrær

INF2220: Gruppe me 2. Mathias Lohne Høsten 2017

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

Dagens tema INF1010 INF1010 INF1010 INF1010

INF1010 LISTER. Listeelementer og listeoperasjoner. Foran. Bak

Algoritmer og datastrukturer Eksamen

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

Algoritmer og Datastrukturer

Et eksempel: Åtterspillet

Definisjon. I et binært tre har hver node enten 0, 1 eller 2 barn

Selv-balanserende søketrær

PG4200 Algoritmer og datastrukturer Forelesning 7

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

EKSAMEN. Dato: 9. mai 2016 Eksamenstid: 09:00 13:00

Algoritmer og datastrukturer Eksamen

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

Enkle datastrukturer. Lars Greger Nordland Hagen. Introduksjon til øvingsopplegget og gjennomgang av python

Algoritmer og datastrukturer Kapittel 9 - Delkapittel 9.2

INF Algoritmer og datastrukturer

INF Algoritmer og datastrukturer

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

Hvorfor sortering og søking? Søking og sortering. Binære søketrær. Ordnet innsetting forbereder for mer effektiv søking og sortering INF1010 INF1010

UNIVERSITETET I OSLO

Kapittel 9: Sortering og søking Kort versjon

INF Algoritmer og datastrukturer

Oppgavesettet består av 7 sider, inkludert denne forsiden. Kontroll& at oppgaven er komplett før du begynner å besvare spørsmålene.

Oppsummering. Kort gjennomgang av klasser etc ved å løse halvparten av eksamen Klasser. Datastrukturer. Interface Subklasser Klasseparametre

EKSAMEN. Dato: 28. mai 2018 Eksamenstid: 09:00 13:00

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

Algoritmer og Datastrukturer IAI 21899

Inf 1000 høst 2005 Løsningsforslag ordinær eksamen

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

Kapittel 9: Sortering og søking Kort versjon

Algoritmer og datastrukturer Kapittel 9 - Delkapittel 9.2

Løsningsforslag til INF110 h2001

alternativer til sortering og søking binære trær søketrær Ikke-rekursiv algoritme som løser Hanois tårn med n plater

Algoritmer og Datastrukturer

Kapittel 8: Sortering og søking

INF Algoritmer og datastrukturer

IN Algoritmer og datastrukturer

UNIVERSITETET I OSLO

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

Dagens temaer. Sortering: 4 metoder Søking: binærsøk Rekursjon: Hanois tårn

Lars Vidar Magnusson

INF Algoritmer og datastrukturer

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

Repetisjon. INF gruppe 13

Ny/utsatt EKSAMEN. Dato: 5. januar 2018 Eksamenstid: 09:00 13:00

Løsningsforslag for Obligatorisk Oppgave 3. Algoritmer og Datastrukturer ITF20006

Oppgave 1. Løsningsforslag til eksamensoppgave. ITF20006 Algoritmer og datastrukturer Postorden traversering:

1- og 2-veis Innkapsling Java Stabel Kø Prio-kø Iterator. Enveis- og toveislister Innkapsling («boxing») (Big Java 6.8.5)

Kapittel 9: Sortering og søking Kort versjon

KONTINUASJONSEKSAMEN

INF1020 Algoritmer og datastrukturer. Dagens plan

Dagens tema. Sortering. Fortsettelse om programmering vha tråder.

Trær. Består av sammenkoblede noder Hver node har 0 eller flere barne-noder. Må være asyklisk. Et tre med n noder har n-1 kanter.

Algoritmer og datastrukturer Kapittel 11 - Delkapittel 11.2

Algoritmer og datastrukturer Løsningsforslag

UNIVERSITETET I OSLO

Eksamen i IN 110, 18. mai 1993 Side 2 Del 1 (15%) Vi skal se på prioritetskøer av heltall, der vi hele tiden er interessert i å få ut den minste verdi

Obligatorisk oppgave 1 INF1020 h2005

EKSAMENSOPPGAVE. INF-1101 Datastrukturer og algoritmer. Adm.bygget, rom K1.04 og B154 Ingen

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

Liste som abstrakt konsept/datatype

Sist gang (1) IT1101 Informatikk basisfag. Sist gang (2) Oppgave: Lenket liste (fysisk) Hva menes med konseptuelt og fysisk i forb med datastrukturer?

Algoritmer og datastrukturer Kapittel 9 Delkapittel 9.2

Transkript:

TRÆR Generelle trær Dagens plan: Kort repetisjon Generelle trær Binærtrær Implementasjon Traversering Binære søketrær Definisjon Søking, innsetting og sletting Gjennomsnitts-analyse (!) Eksempel: Ibsens skuespill Program class A class B class C class D int i int i int j int tall String s char c class TreNode { Object element; TreNode forstebarn; TreNode nestesosken; Ark 1 av 24 Forelesning 29.8.2005 Forelesning 29.8.2005 Ark 2 av 24 Binærtrær Et binærtre er et tre der hver node aldri har mer enn to barn. Dersom det bare er ett subtre, må det være angitt om dette er venstre eller høyre subtre. Eksempel: Uttrykkstrær I uttrykkstrær inneholder bladnodene operander (konstanter, variable,... ), mens de interne nodene inneholder operatorer. * + * I verste fall blir dybden N-1! 5 2 + Implementasjon Siden hver node har maks to barn, kan vi ha pekere direkte til dem: class BinNode { int tall; BinNode venstre; BinNode hoyre; 1 4 Mulige skrivemåter for dette uttrykket: Prefiks: Infiks: Postfiks: Forelesning 29.8.2005 Ark av 24 Forelesning 29.8.2005 Ark 4 av 24

Traversering av binærtrær oppsummering Oppgave 4.5 Vis at et binærtre med høyde h har maksimalt 2 h+1 1 noder. void traverser(binnode n) { if (n!= null) { < Gjør PREFIKS-operasjonene > traverser(n.venstre); < Gjør INFIKS-operasjonene > traverser(n.hoyre); < Gjør POSTFIKS-operasjonene > Forelesning 29.8.2005 Ark 5 av 24 Forelesning 29.8.2005 Ark av 24 Binære søketrær Binære søketrær er en variant av binærtrær hvor følgende holder for hver node i treet: Alle verdiene i nodens venstre subtre er mindre enn verdien i noden selv. Alle verdiene i nodens høyre subtre er større enn verdien i noden selv. 8 1 4 12 2 7 9 15 11 1 1 2 4 Søking: Rekursiv metode public BinNode finn(int x, BinNode t) { if (t == null) { return null; else if (x < t.tall) { return finn(x, t.venstre); else if (x > t.tall) { return finn(x, t.hoyre); else { return t; Hva hvis vi har like verdier? ( ukeoppgave) Forelesning 29.8.2005 Ark 7 av 24 Forelesning 29.8.2005 Ark 8 av 24

Søking: Ikke-rekursiv metode public BinNode finn(int x, BinNode t) { BinNode n = t; while (n!= null && n.tall!= x) { if (x < n.tall) { n = n.venstre; else { n = n.hoyre; return n; Innsetting Ideen er enkel: Gå nedover i treet på samme måte som ved søking. Hvis tallet finnes i treet allerede gjøres ingenting. Hvis du kommer til en null-peker uten å ha funnet tallet: sett inn en ny node (med tallet) på dette stedet. 2 8 1 4 Forelesning 29.8.2005 Ark 9 av 24 Forelesning 29.8.2005 Ark 10 av 24 Sletting Sletting er vanskeligere. Etter å ha funnet noden som skal fjernes har vi flere mulige situasjoner. Noden er en bladnode: Kan fjernes direkte. Noden har to barn: Erstatt verdien i noden med den minste verdien i høyre subtre. Slett noden som denne minste verdien var i. Noden har bare ett barn: Foreldrenoden kan enkelt hoppe over den som skal fjernes. 2 8 1 4 1 2 8 5 4 Forelesning 29.8.2005 Ark 11 av 24 Forelesning 29.8.2005 Ark 12 av 24

Rekursiv metode for å fjerne et tall: public BinNode fjern(int x, BinNode t) { if ( t == null) { return null; if (x < t.tall) { t.venstre = fjern(x, t.venstre); else if (x > t.tall) { t.hoyre = fjern(x, t.hoyre); else if (t.venstre!= null && t.hoyre!= null) { t.tall = finnminste(t.hoyre); t.hoyre = fjern(t.tall, t.hoyre); else if (t.venstre!= null) { t = t.venstre; Gjennomsnitts-analyse Intuitivt vil vi forvente at alle operasjonene vi utfører på et binært søketre vil ta O(log n) tid siden vi hele tiden grovt sett halverer størrelsen på treet vi jobber med. Det kan bevises at den gjennomsnittlige dybden til nodene i treet er O(log n) når alle innsettingsrekkefølger er like sannsynlige (se MAW kapittel 4..5). else { t = t.hoyre; return t; Forelesning 29.8.2005 Ark 1 av 24 Forelesning 29.8.2005 Ark 14 av 24 Eksempel: Ibsen Problem: Vi ønsker å analysere Henrik Ibsens skuespill. Hvilke ord har Ibsen brukt? Hvor mange forskjellige ord? Hvilke ord er mest brukt? De mest brukte ordene (fra UiB): Antall % Kum. 1 1950.09.09 det 2 18241 2.89 5.98 jeg 1774 2.81 8.80 og 4 122 2.10 10.89 i 5 115 2.09 12.98 er 99 1.5 14.51 at 7 912 1.48 15.98 du 8 8927 1.42 17.40 ikke 9 811 1.2 18.72 de 10 7711 1.22 19.94 en 11 7299 1.1 21.10 har 12 7152 1.1 22.2 som 1 971 1.11 2.4 mig 14 901 1.09 24.4 for 15 795 1.08 25.51 til 1 71 1.0 2.5 så 17 14 1.00 27.5 med 18 554 0.88 28.44 han 19 5524 0.88 29.2 den 20 511 0.84 0.1 på Vildanden Vi skal se på ett av Ibsens skuespill: VILDANDEN. SKUESPIL I FEM AKTER AF HENRIK IBSEN. København. 1884 PERSONERNE: Grosserer Werle, værksejer o+s+v+ Gregers Werle, hans søn. Gamle Ekdal. Hjalmar Ekdal, den gamles søn, fotograf. Gina Ekdal, Hjalmars hustru. Hedvig, deres datter, 14 år. Fru Sørby, grossererens husbestyrerinde. Relling, læge. Molvik, forhenværende teolog. Bogholder Gråberg. Pettersen, grossererens tjener. Lejetjener Jensen. En blegfed herre. En tyndhåret herre. En nærsynt herre. Sex andre herrer, middagsgæster hos grossereren. Flere lejetjenere. Første akt foregår hos grosserer Werle, de fire følgende akter hos fotograf Ekdal.. FØRSTE AKT. ------ I grosserer Werles hus. Kostbart og bekvemt indrettet arbejdsværelse; bogskabe og stoppede møbler; skrivebord med papirer og protokoller midt på gulvet; tændte lamper med grønne skærme, således at værelset er dæmpet belyst. Åben fløjdør med fratrukne forhæng på bagvæggen. Forelesning 29.8.2005 Ark 15 av 24 Forelesning 29.8.2005 Ark 1 av 24

Implementasjon Hvilke ord har Ibsen brukt? Ide: Leser inn ordene fra fil og lagrer dem i et binært søketre. Like ord telles opp. Hvilke ord er mest brukt? Ide: Lager et nytt søketre sortert på antall ganger hvert ord er brukt! import easyio.*; public class Ibsen { public static void main(string[] args) { String ord; int antallord = 0; IbsenTre tre = new IbsenTre(); FrekvensTre frektre = new FrekvensTre(); String sep = ". :,;-?!\"\n"; In innfil = new In(args[0]); innfil.skipsep(sep); while (!innfil.endoffile()) { ord = innfil.inword(sep).tolowercase(); tre.settinn(new IbsenElem(ord)); antallord++; innfil.skipsep(sep); System.out.println("Antall ord: " + antallord); System.out.println("Ulike ord: " + tre.size()); frektre.innsetting(tre.getrot()); frektre.skrivinnfiks(); Forelesning 29.8.2005 Ark 17 av 24 Forelesning 29.8.2005 Ark 18 av 24 Klassen BinNode Vanlig node i binært søketre: class BinNode { Comparable element; BinNode venstre; BinNode hoyre; BinNode(Comparable x) { element = x; Klassen IbsenElem Tar vare på ordene og teller opp antall forekomster: class IbsenElem implements Comparable { String ord; int antall; IbsenElem (String s) { ord = s; antall = 1; public int compareto(object x) { IbsenElem e = (IbsenElem) x; return ord.compareto(e.ord); public String tostring() { return (ord + " " + antall); Forelesning 29.8.2005 Ark 19 av 24 Forelesning 29.8.2005 Ark 20 av 24

Klassen BinSokeTre Generell klasse for binære søketrær der noe gjøres ved like elementer: void settinn(comparable x) void oppdater(binnode n, Comparable x) Kalles av settinn hvis x allerede finnes i treet (i node n). Default: Ingenting gjøres. int sammenlign(comparable n1, Comparable n2) Kalles av settinn for å sammenligne elementet som skal settes inn med de som allerede finnes i treet. Default: n1.compareto(n2). Tre sortert på ord: class IbsenTre extends BinSokeTre { void oppdater(binnode n, Comparable e) { IbsenElem ie = (IbsenElem) n.element; ie.antall++; NB! Treet blir veldig skjevt, med 88 noder i venstre subtre og bare 158 noder i høyre subtre. Hva er årsaken til dette? int size() BinNode getrot() Forelesning 29.8.2005 Ark 21 av 24 Forelesning 29.8.2005 Ark 22 av 24 Tre sortert på frekvens: class FrekvensTre extends BinSokeTre { int sammenlign(comparable c1, Comparable c2) { IbsenElem e1 = (IbsenElem) c1; IbsenElem e2 = (IbsenElem) c2; Binære søketrær: oppsummering return e1.antall - e2.antall; void oppdater(binnode n, Comparable e) { if (n.venstre == null) { n.venstre = new BinNode(e); else { BinNode b = new BinNode(e); b.venstre = n.venstre; n.venstre = b; antallnoder++; void innsetting(binnode n) { if (n!= null) { settinn(n.element); innsetting(n.venstre); innsetting(n.hoyre); Forelesning 29.8.2005 Ark 2 av 24 Forelesning 29.8.2005 Ark 24 av 24