1 / 156

Kap 09 Tre

Kap 09 Tre. Slektstre. Slektstre med ulike generasjoner (foreldre, barn, barnebarn, …). Student-opplysninger. Trestruktur med studentopplysninger (fødselsnr, navn, adresse, kurs, eksamener). Subtre er en del av et tre og er selv et tre. Filkataloger. Filkataloger. Kompilering.

cady
Télécharger la présentation

Kap 09 Tre

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Kap 09 Tre

  2. Slektstre Slektstre med ulike generasjoner (foreldre, barn, barnebarn, …)

  3. Student-opplysninger Trestruktur med studentopplysninger (fødselsnr, navn, adresse, kurs, eksamener) Subtre er en del av et tre og er selv et tre

  4. Filkataloger Filkataloger

  5. Kompilering Kompilering av program ved programsplitting i en trestruktur void main ( ) { int a,b; cout << ”Oppgi a: ”; cin >> a; cout << ”Oppgi b: ”; cin >> b; if(a>b) cout << ”Største tall: ” << a; else cout << ”Største tall: ” << b; }

  6. Tre - Definisjon Et tre T er en endelig mengde av noder med følgende egenskaper: 1. Enten er mengden tom, T = Ø, eller 2. Mengden består av en node R kalt rot og de resterende nodene er partisjonert i n >= 0 såkalte subtrær T1, T2, …, Tn hvor hver Ti selv er et tre. T = {R} U T1 U T2 U … U Tn = {R, T1, T2, …, Tn}

  7. Tre - Eksempler T = {A} A A T = {A, {B}} B A B D T = {A, {B, {C}}, {D, {E, {F}}, {G}, {H}}} C E G H F

  8. Tre - Definisjoner T = {R, T1, T2, …, Tn} Graden til en node er antall subtre assosiert med denne noden. Et løv er en node med grad null (har ingen subtre). Hver rot Ri i subtreet Ti til treet T kalles et barn til R. Tilsvarende defineres barnebarn, … . Roten R i treet T kalles foreldreelement til alle røttene Ri i subtreet Ti 1 < i <= n. Tilsvarende defineres besteforeldre. To røtter Ri og Rj av distinkte subtrær Ti og Tj i treet T kalles søsken.

  9. Tre - Eksempler A Graden til A er 2 Graden til B er 1 Graden til C er 0 Graden til D er 3 C, F, G og H er løv B og D er barn til A C, E, G og H er barnebarn til A F er barn til E A er foreldreelement til B og D B og D er søsken E, G og H er søsken B D C E G H F

  10. Tre - Definisjoner Gitt et tre T med en mengde V av noder. En vei P i T er definert som en ikke-tom sekvens av noder P = {v1, v2, …, vk} hvor viV for 1 <= i <= k slik at den i-te noden vi er foreldreelement til den (i+1)-te noden vi+1. Lengden av veien P er k-1. A Veien P = {A, D, E, F} har lengde 3. Veien P = {D,H} har lengde 1. Veien P = {B} har lengde 0. B D C E G H F

  11. Tre - Definisjoner Gitt et tre T med en mengde V av noder. Nivået eller dybden til en node viV i T er definert som lengden av den entydige veien i T fra roten R til noden vi. Høyden til en node viV i T er definert som den lengste veien fra noden vitil et løv. Høyden til et tre T er definert som høyden til roten R. La vi og vjV. vi sies å være en forgjenger til vj hvis det finnes en vei fra vi til vj. vi og vj kan være samme node. vi sies å være en ekte forgjenger til vj hvis det finnes en vei med lengde ulik null fra vi til vj. Tilsvarende defineres etterfølger og ekte etterfølger.

  12. Tre - Definisjoner A Nivået til A er 0 Nivået til B er 1 Nivået til C er 2 Nivået til F er 3 Høyden til A er 3 Høyden til B er 1 Høyden til C er 0 Høyden til F er 0 Høyden til G er 0 Høyden til treet T er lik høyden til A, dvs 3 D er forgjenger (også ekte forgjenger) til E D er forgjenger (også ekte forgjenger) til F D er forgjenger til D G er etterfølger (også ekte etterfølger) til A G er etterfølger til G B D C E G H F

  13. N-ary Tre - Definisjon Et N-ary tre T er et tre hvor alle nodene har samme grad N. T = {R, T0, T1, …, TN-1} hvor hver Ti er et N-ary tre Det tomme treet kalles en ekstern nodefordi det ikke har noe subtre. Et ikke-tomt tre kalles en intern node. Et løv er en intern node som kun har eksterne subtrær.

  14. N-ary Tre - EksempelTertiær tre (N = 3) A T = {A,Ø,Ø,Ø} A T = {A,{B,Ø,Ø,Ø},Ø,Ø} B = Ø = tomt tre

  15. N-ary Tre - Teorem 9.1 Teorem 9.1: Et N-ary tre med n >= 0 noder inneholder (N-1)n+1 eksterne noder. Bevis: La antall eksterne noder være e. Siden hver node unntatt roten (tom eller ikke) har ett foreldreelement, må det være (n+e-1)/N foreldreelementer i treet siden hvert foreldreelement har N barn. Herav har vi: n = (n+e-1)/N som gir e = (N-1)n+1.

  16. N-ary Tre - Teorem 9.1 - Eksempel A B D C E G H F N = 3 Interne noder : n = 8 Eksterne noder : e = (N-1)n+1 = (3-1)8+1 = 17

  17. N-ary Tre - Teorem 9.2 1 k k+1 … … Teorem 9.2: La T være et N-ary tre med høyde h >= 0. Maksimalt antall interne noder i T er da gitt ved: (Nh+1-1)/(N-1) Bevis: (ved induksjon) La T være et N-ary tre med høyde null. Det består av en intern node og N tomme subtrær. Teoremet holder derfor for h = 0 siden (N0+1-1)/(N-1) = (N-1)/(N-1) = 1. Anta at teoremet holder for h = 0,1,2,…,k hvor k >= 0. La T være et N-ary tre med høyde k+1. Et slikt tre består av en rot og N subtrær hver inneholdene høyst (Nk+1-1)/(N-1) interne noder. Maksimalt antall interne noder er derfor: N(Nk+1-1)/(N-1)+1 = (Nk+2-1)/(N-1)

  18. N-ary Tre - Teorem 9.2 - Eksempel N = 3 Høyde = 3 Maksimalt antall interne noder = (33+1 - 1)/(3-1) = 80/2 = 40

  19. N-ary Tre - Corollar 9.2 Corollar 9.2: La T være et N-ary tre med høyde h >= 0. Maksimalt antall eksterne noder i T er da gitt ved: (N-1)(Nh+1-1)/(N-1) + 1 = Nh+1 nmax Hint (fra teorem 9.1): emax = (N-1)nmax + 1

  20. N-ary Tre - Corollar 9.2 N = 3 Høyde = 3 Maksimalt antall eksterne noder = Nh+1 = 33+1 = 34 = 81

  21. N-ary Tre - Teorem 9.3 1 k k+1 … … Teorem 9.3: La T være et N-ary tre med høyde h >= 0. Maksimalt antall løv noder i T er da gitt ved: Nh Bevis: (ved induksjon) La T ha høyde null. T består av nøyaktig en node som har N tomme subtrær. Den ene noden er derfor et løv. Teoremet holder for h = 0 siden N0 = 1. Anta at teoremet holder for h = 0,1,2,…,k. La T ha høyde k+1. Foruten en rot R består T av N subtrær som hver har høyest Nk løv. Maksimalt antall løv er derfor N x Nk = Nk+1

  22. N-ary Tre - Teorem 9.3 N = 3 Høyde = 3 Maksimalt antall løv = Nh = 33 = 27

  23. Binært tre - Definisjon Et binært tre er et N-ary tre hvor N = 2, dvs hver node har eksakt to barn (uten eksterne noder maksimalt to barn). T = {R, TL, TR} TL og TR kalles for henholdsvis venstre subtre og høyre subtre. A A B C B C = D D

  24. Tre gjennomløping A B D Tre gjennomløping: - Bredde først gjennomløp - Dybde først gjennomløp - PreOrden gjennomløp - InOrden gjennomløp (kun for binært tre) - PostOrden gjennomløp C E H F

  25. Tre gjennomløpingBredde først Bredde først gjennomløp: Gjennomløping etter nivå: 0,1,2,... A A - B - D - C - E - G - H - F B D C E H G F

  26. Tre gjennomløpingDybde førstPreOrden PreOrden gjennomløp: 1. Besøk roten 2. PreOrden gjennomløp av subtrærne til roten A B D A - B - C - D - E - F - G - H C E H G F

  27. Tre gjennomløpingDybde førstPreOrden (for binært tre) PreOrden gjennomløp: 1. Besøk roten 2. Gjennomløp venstre subtre 3. Gjennomløp høyre subtre A B D A - B - C - D - E - F - H C E H F

  28. Tre gjennomløpingDybde førstInOrden (kun for binært tre) InOrden gjennomløp: 1. Gjennomløp venstre subtre 2. Besøk roten 3. Gjennomløp høyre subtre A B D C - B - A - F - E - D - H C E H F

  29. Tre gjennomløpingDybde førstPostOrden PostOrden gjennomløp: 1. PostOrden gjennomløp av subtrærne til roten 2. Besøk roten A B D C - B - F - E - G - H - D - A C E H G F

  30. Tre gjennomløpingDybde førstPostOrden (for binært tre) PostOrden gjennomløp: 1. Gjennomløp venstre subtre 2. Gjennomløp høyre subtre 3. Besøk roten A B D C - B - F - E - H - D - A C E H F

  31. Tre gjennomløpingDybde førstOppsummering: Pre- / In- / Post-Orden (for binært tre) PreOrden 1. Roten 2. Venstre subtre 3. Høyre subtre InOrden 1. Venstre subtre 2. Roten 3. Høyre subtre PostOrden 1. Venstre subtre 2. Høyre subtre 3. Roten 1 2 3 2 3 1 3 1 2 A-B-C-D-E-F-H C-B-A-F-E-D-H C-B-F-E-H-D-A A B D C E H F

  32. Operator Aritmetisk tre Operand Operand Et aritmetisk tre er et binært tre hvor hver node enten er en operand eller en binær operator. I et subtre bestående av rot, venstre subtre og høyre subtre, vil roten bestå av den operatoren som skal virke mellom de to operandene plassert som venstre og høyre subtre. ( a - b ) + c * ( e / f )

  33. Traversering av et binært treAritmetisk tre Preorder traversal : + - a b * c / e f 1. Besøk roten 2. Gjennomløp venstre subtre 3. Gjennomløp høyre subtre ( a - b ) + c * ( e / f ) Inorder traversal : ( a - b ) + c * ( e / f ) 1. Gjennomløp venstre subtre 2. Besøk roten 3. Gjennomløp høyre subtre Postorder traversal : a b - c e f / * + 1. Gjennomløp venstre subtre 2. Gjennomløp høyre subtre 3. Besøk roten

  34. Aritmetisk treInOrden gjennomløp 1. Skriv venstreparentes 2. Gjennomløp venstre subtre 3. Skriv roten 4. Gjennomløp høyre subtre 5. Skriv høyre parentes (( a - b ) + (c * ( e / f ))) ( a - b ) + c * ( e / f )

  35. Lineær implementering av binært tre Vi kan representere et binært tre med høyde h vha en en-dimensjonal tabell med størrelse 2 h+1 - 1 Nodene lagres på følgende måte: 1. Lagre roten i lokasjon nr 1. 2. Hvis en node er lagret i lokasjon nr n, så skal venstre barn lagres i lokasjon nr 2n og høyre barn i lokasjon nr 2n+1.

  36. Lineær implementering av binært treAritmetisk tre ( a - b ) + c * ( e / f )

  37. Lineær implementering av binært treAritmetisk tre ( a - b ) + c * ( e / f ) Fordeler: - Enkel sammenheng mellom far/barn. Far i lokasjon n => barn i lokasjon 2n og 2n+1. Et barn i lokasjon n => far i lokasjon n DIV 2. - Kan lett implementeres i alle språk. Ulemper: - Kan medføre plass-sløsing. - Kan medføre mye flytting ved. innsetting/sletting.

  38. Heap Heap er hensiktsmessig bl.a. ved sortering, prioritetskø og komprimering En heap er en trestruktur med følgende undergrupper: MaxHeap Generelt tre hvor hver node har nøkkelverdi større enn eller lik nøkkelverdi til hvert av sine barn MaxBinHeap Binært tre hvor hver node har nøkkelverdi større enn eller lik nøkkelverdi til hvert av sine barn MinHeap Generelt tre hvor hver node har nøkkelverdi mindre enn eller lik nøkkelverdi til hvert av sine barn MinBinHeap Binært tre hvor hver node har nøkkelvedi mindre enn eller lik nøkkelverdi til hvert av sine barn 8 5 7 4 3 2 6 1 8 5 7 3 2 6 1 2 5 3 9 6 8 4 7 2 5 3 7 9 4 8

  39. HeapBinary Heap Benytter lineær implementering med innsetting fra venstre, nivå for nivå MaxBinHeap Binært tre hvor hver node har nøkkelverdi større enn eller lik nøkkelverdi til hvert av sine barn MinBinHeap Binært tre hvor hver node har nøkkelvedi mindre enn eller lik nøkkelverdi til hvert av sine barn

  40. HeapInsert to a max binary heap 1. Adder nytt element til bunnen av heap’en. 2. Sammenlign nytt element med foreldre-element. Hvis korrekt rekkefølge, stopp. 3. Hvis ikke korrekt rekkefølge, bytt nytt element med foreldre-element og fortsett i pkt 2.

  41. HeapInsert to a max binary heap - Algorithm Insert_MaxBinHeap (a,n,x) n := n + 1 a[n]:= x child := n parent := n div 2 WHILE parent >=1 DO IF a[parent] < a[child] THEN swap(a[parent],a[child]) child :=parent parent :=parent div 2 ELSE parent :=0 // stop ENDWHILE

  42. HeapDelete from a max binary heap 1. Kopier roten i heap’en. 2. Erstatt roten med siste element i siste nivå. Hvis korrekt rekkefølge, stopp. 3. Hvis ikke korrekt rekkefølge, gjennomfør ’buble-down’ (swap med det største barnet), inntil heap-egenskapen er gjenopprettet.

  43. HeapDelete from a max binary heap Delete_MaxBinHeap (a,n,top,empty) IF (n == 0) THEN empty :=true ELSE empty := false top :=a[1] a[1] := a[n] n := n – 1 parent := 1 child := 2 WHILE (child <= n – 1) DO IF (a[child] < a[child+1]) THEN child := child + 1 ENDIF IF (a[child] > a[parent]) THEN swap(a[parent],a[child]) parent := child child := 2*child ELSE child := n // stop ENDIF ENDWHILE ENDIF

  44. HeapBuilding a max binary heap - Algorithm 4 8 3 2 7 5 Gitt en array a[1..n] av elementer i vilkårlig rekkefølge. Induksjon: 1. a[1] er en heap 2. Anta at a[1..k] er en heap 3. Tilordning av a[1..k+1] til en heap Benytt Insert_MaxBinHeap til å innsette element nr k+1 i heap a[1..k] 4 8 3 2 7 5 8 4 • 8 4 • 8 4 3 • 8 4 3 2 • 8 7 3 2 4 • 8 7 5 2 4 3 8 4 3 8 4 3 2 8 7 3 2 4 Build_MaxBinHeap (a,n) FOR i := 2 TO n DO Insert_MaxBinHeap(a,i-1,a[i]) ENDFOR 8 7 5 2 4 3

  45. HeapRearrange a max binary heap - Algorithm Rearrange_MaxBinHeap (a,n) child := n parent := n div 2 WHILE parent >=1 DO IF a[parent] < a[child] THEN swap(a[parent],a[child]) child := parent parent := parent div 2 ELSE parent := 0 // stop ENDWHILE Insert_MaxBinHeap (a,n,x) n := n + 1 a(n) := x Rearrange_MaxBinHeap(a,n+1)

  46. HeapHeapSort - Algorithm [1/2] HeapSort_MaxBinHeap (a,n) Build_MaxBinHeap(a,n) FOR (i := n DOWNTO 2) DO swap(a[1],a[i]) Rearrange_MaxBinHeap(a,i-1) ENDFOR 4 8 3 2 7 5 8 7 5 2 4 3 8 7 5 2 4 3 swap Rearrange i = 6 3 7 5 2 4 8 7 4 5 2 38 i = 5 34 5 2 7 8 5 43 2 7 8 i = 4 2 435 7 8 4 2 3 5 7 8 i = 3 3 2 4 5 7 8 3 2 4 5 7 8 i = 2 2 3 4 5 7 8 2 3 4 5 7 8

  47. HeapHeapSort - Algorithm [2/2] 8 7 5 2 4 3 8 7 5 2 4 3 swap Rearrange i = 6 3 7 5 2 4 8 7 4 5 2 38 i = 5 34 5 2 7 8 5 43 2 7 8 i = 4 2 435 7 8 4 2 3 5 7 8 i = 3 3 2 4 5 7 8 3 2 4 5 7 8 i = 2 2 3 4 5 7 8 2 3 4 5 7 8 3 7 5 2 4 8 7 4 5 2 3 8 3 4 5 2 78 5 4 3 2 78 2 4 3 578 4 2 3 578 3 2 4 578 3 2 4 578 2 34 578 2 34 578

  48. Data-komprimeringAscii-tabellSkrivbare tegn Ascii-kode: 0-255 28 = 256 0-127 27 = 128 Skrivbare tegn Binært Dec Tegn 010 0000 32 Space 010 0001 33 ! … 010 1000 40 ( 100 0001 65 A 100 0010 66 B 100 0011 67 C … 110 0001 97 a 110 0010 98 b 110 0011 99 c …

  49. Data-komprimering Binært Dec Tegn 010 0000 32 Space 010 0001 33 ! … 010 1000 40 ( 100 0001 65 A 100 0010 66 B 100 0011 67 C … 110 0001 97 a 110 0010 98 b 110 0011 99 c … 0 1 00 01 10 11 000 001 010 011 100 101 110 111 … H a l l o Hallo 10010000 1100001 1101100 1101100 110 1111

  50. Data-komprimeringHuffman encoding - Prioritetskø vha Heap La vanlige tegn ha korte bitsekvenser, mens uvanlige tegn får lange bitsekvenser Tegn Frekvens A 5 B 2 C 3 D 4 E 10 F 1 F 1 D 4 B 2 A 5 E 10 C 3 MinBinHeap

More Related