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 OLA 220 4 SIV 242 2 Innsetting av nøkler(enkel, lineær prøving ved kollisjoner): Øverste rad indikerer indeks for plassering av nøkler For hver av de etterfølgende radene indikerer hver rad en ny innsetting Nøkkelen som settes inn er understreket og uthevet 0 1 2 3 4 5 6 7 ANNE ANNE ANNE NINA PER ANNI ANNE NINA PER ANNI ALI ANNE NINA PER ANNI ALI ANNE KAREN NINA PER ANNI ALI ANNE KAREN OLA NINA PER ANNI ALI ANNE KAREN OLA SIV NINA PER Etter alle nøkler er satt inn er tabellen helt full og ser slik ut: ANNI ALI ANNE KAREN OLA SIV NINA PER Oppgave 2 Maxheap på tabell-form: 42 30 16 11 25 8-3 a) På tre-form: PER
Assignment 11 Side 2 av 5 b) Sett inn 73 Tre-form: 1. Opprinnelig tre. 2. Setter inn 73 etter regler for komplett tre, og sjekker om 73 er større enn sin foreldre 11. 3. 73 er større enn 11 dermed boble opp. Sjekker om 73 er større enn sin foreldre 30. 4. 73 er større enn 30 boble opp. Sjekker om 73 er større enn sin foreldre 42. 5. 73 er større enn 42 bobler opp. Sjekker om 73 er større enn sin foreldre. Finner ut at den ikke har noen foreldre, altså er rot i hele treet, dermed stopp fordi rett plass er funnet. Tabell-form: Regelen for å finne foreldre brukes her: (i 2)/2 Uthever gjellende foreldre. 0 1 2 3 4 5 6 7 Kommerntar hvor i er indeks for barnet man vil finne foreldre til. 42 30 16 11 25 8 3 73 Legger til 73 bakerst i array. Bruker regel for å finne foreldre og sammenligner. 73 er større enn sin foreldre 11 -> bytter disse. 42 30 16 73 25 8 3 11 Bruker regel for å finne foreldre og sammenligner. 73 er større enn sin foreldre 30 -> bytter disse. 42 73 16 30 25 8 3 11 Bruker regel for å finne foreldre og sammenligner. 73 er større enn sin foreldre 42 -> bytter disse. 73 42 16 30 25 8 3 11 Nå er 73 satt på rett plass (siden regelen for å finne foreldre havner utenfor array). Hvis man sammenligner tabellen med en levelorder gjennomgang av treet over får man ut verdiene i samme rekkefølge som denne arrayen er satt opp.
Assignment 11 Side 3 av 5 c) Ta ut høyeste node (før 73 er satt inn): Tre-form: 1. Opprinnelig tre. 2. Kopierer sist innsatte verdi over rota i treet (3), og fjerner denne orginalnoden. Sjekker om den nye rota (3) har barn som er av større verdi enn seg selv, begge barn er her større. Bobler ned med det største av barna (30). 3. Sjekker om 3 har barn som er større enn seg selv, dette er tilfellet. Bobler ned med det største av barna (25). 4. Sjekker om 3 har barn som er større enn seg selv, dette er ikke tilfellet siden 3 nå er en bladnode (ikke har noen barn). Dermed er rett plass funnet (siden den ikke har barn som er større enn seg selv). Tabell-form: Regler for å finne barn i array: høyre barn: 2i + 1 hvor i er indeks til foreldre (rot i subtreet) venstre barn: 2i + 2 hvor i er indeks til foreldre (rot i subtreet) Uthever gjellende barn til aktuell verdi. 0 1 2 3 4 5 6 Kommerntar 42 30 16 11 25 8 3 Opprinnelig tabell. Skal fjerne verdien 42 helt fremst. Koperer dermed sist innsatte (3) over den første verdien, og setter "siste" referansen til å være nest siste i arrayen. Dermed er et element fjernet. 3 30 16 11 25 8 X Bruker regler for å finne barn av rota (3) i subtreet og sjekker om noen av barna er av større verdi, isåfall bobles rota nedover. Dette er tilfellet her da begge barn er større, tar det største barnet som er 30 og bytter med 3. 30 3 16 11 25 8 X Bruker regler for å finne barn av rota (3) i subtreet og sjekker om noen av barna er av større verdi, isåfall bobles rota nedover. Dette er tilfellet her da begge barn er større, tar det største barnet som er 25 og bytter med 3. 30 25 16 11 3 8 X Bruker regler for å finne barn av rota (3) i subtreet og sjekker om noen av barna er av større verdi, isåfall bobles rota nedover. Siden reglene gir verdier som ligger utenfor array vil det si at den ikke har noen barn (bladnode). Stopper da fordi rett plass er funnet (når ingen barn er større enn rota).
Assignment 11 Side 4 av 5 d) HeapSort forklaring: Benytter en binærheap hvor rota er større/mindre (kommer an på om det er max-/minheap) enn sine barn, og til en hver tid bruker struktur for et komplett binærtre (sett inn fra venstre mot høyre). Binærheap operasjoner: Innsetting: 1. Legg til ny node (på rett plass i forhold til komplett tre krav) 2. Sjekk om rota i subtreet er større/mindre enn ny node Isåfall boble opp helt til rett plass er funnet (rota er større/mindre eller lik gjellende verdi) Fjerning/sletting: 1. Kopier sist innsatte til rota i treet, og fjern orginalen av denne 2. Sjekk om barn er større/mindre enn den nye rota Isåfall boble opp helt til rett plass er funnet (rota er større/mindre eller lik gjellende verdi) HeapSortering går ut på å først bygge opp en binærheap med det settet av verdier som skal sorteres. Når denne er bygget opp tømmes den (ved å hele tiden fjerne den største/minste verdien). Output av dette uttaket vil komme i sortert rekkefølge. Operasjonene for HeapSort kan benyttes på samme datastruktur (array) ved å legge til den sorterte outputen bakerst i arrayen. For å illustrere hvordan dette fungerer har jeg valgt å ta med illustrasjoner for fjerning av minste verdi i en MinHeap. Treet er først bygget opp som et MinHeap ved å sett inn en og en verdi. For hvert steg tar man ut øverste verdi (rota) i treet og samler på output. Følgende verdier bygger opp treet: 15, 42, 40, 30, 82, 6, 64, 22, 50, 79. Opprinnelig tre. Tar ut verdi: 6 Tar ut verdi: 15 Tar ut verdi: 22 Tar ut verdi: 30 Tar ut verdi: 40 Tar ut verdi: 42 Tar ut verdi: 50 Tar ut verdi: 64
Assignment 11 Side 5 av 5 Tar ut verdi: 79 Tar ut verdi: 82 Får dermed følgende output: 6 15 22 30 40 42 50 64 79 82 Som vi ser kommer output sortert (her stigende).