1 / 14

INF 295 forelesning 14 - kap 8 Disjunkt mengde ADT

INF 295 forelesning 14 - kap 8 Disjunkt mengde ADT. Hans Fr. Nordhaug (Ola Bø). Disjunkt mengde ADT. Mange anvendelser i grafteori Enkelt å implementere raske løsninger Forståelse krever at man kjenner til det matematiske begrepet ekvivalensrelasjon. Ekvivalensrelasjoner.

karma
Download Presentation

INF 295 forelesning 14 - kap 8 Disjunkt mengde ADT

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. INF 295 forelesning 14 - kap 8Disjunkt mengde ADT Hans Fr. Nordhaug (Ola Bø)

  2. Disjunkt mengde ADT • Mange anvendelser i grafteori • Enkelt å implementere raske løsninger • Forståelse krever at man kjenner til det matematiske begrepet ekvivalensrelasjon

  3. Ekvivalensrelasjoner • En ekvivalensrelasjon er en sammenheng R mellom elementer i en mengde S som er: • refleksiv: a R a for alle a i S • symmetrisk: Hvis a R b, så b R a • transitiv: Hvis a R b og b R c, så er a R c • Eksempel på relasjoner: • a R b betyr at du kan kjøre fra a til b med bil • a R b betyr at a og b bor i samme land • a R b betyr at a er koplet til samme nett som b • a R b betyr at a og b gir samme rest ved divisjon med 7

  4. Ekvivalensrelasjoner • Disjunkte mengder og ekvivalensrelasjoner • En ekvivalensrelasjon deler S i disjunkte (ikke overlappende) delmengder {{Oslo, Bergen, Stavanger},{Longyearbyen},{Keflavik, Reykjavik}} • Ekvivalensklassen til et element a er alle elementer x slik at a R x • For å sjekke om x R a er det nok å sjekke at de er i samme ekvivalensklasse

  5. Ekvivalensrelasjoner kan være dynamiske • Normalt får vi oppgitt S = {{a1},{ a2},{ a3},{ a4}} • I utgangspunktet er ingen elementer relatert til hverandre. Bare ett element i hver ekvivalensklasse • Vi får oppgitt par av elementer som er relatert til hverandre: a1 R a3 og a4 R a3 er nok til å si at {a1, a3, a4} er en ekvivalensklasse. (Hvorfor?) • En datatype for å håndtere denne dynamikken greier seg med to operasjoner: • finn(a) som returnerer navnet på ekvivalensklassen der a deltar. a R b hvis finn(a)==finn(b) • union(a,b) som slår sammen ekvivalensklassen til a med ekvivalensklassen til b

  6. Mulige implementeringer • Kjøretidsberegninger ser på totalt tidsforbruk i strukturens levetid – maksimalt N-1 union-operasjoner • boolean ekvivalent[N][N] • finn blir O(1), union O(N) per operasjon totalt O(N2) • Lenket liste • Raskere Union fordi full gjennomsøking ikke er nødvendig, men fortsatt O(N2) • array som for hvert element inneholder navnet på ekvivalensklassen • finn blir O(1), union blir O(N) og union totalt O(N2), men akseptabelt ved N2 find • tilsvarende, men med kjent medlemstall og alltid navneskifte på minste ekvivalensklasse gir union totalt O(Nlog N)

  7. Grunnleggende datastruktur - Tre • Nok at find returnerer samme resultat for to elementer i samme ekvivalensklasse • Alle elementer i samme tre har samme rot - så da kan ekvivalensklassen representeres av et tre. • Ekvivalensklassen får navn etter rota • Det eneste en node trenger er en peker til foreldrenoden • finn() følger foreldrepekerne til rota og returnerer den • union(a,b) lar a være rota med nytt barn b. (b peker på a) • Kan implementeres i en array, der: • Hvert element har peker til foreldrenoden. • Rota har negativ peker. Alle elementer er røtter i starten - vi starter med en skog

  8. Mer om treimplementering av disjunkte set • union(a,b) går i konstant tid • find(x) avhenger av dybden til x • O(N) worst case • O(MN) for M find/union operasjoner • Gjennomsnittskjøretider er vanskelige: • Avhenger av hva du mener med gjennomsnitt • O(M), O(MlogN) eller O(MN) • Kvadratisk kjøretid er uakseptabelt

  9. Smarte Union-algoritmer • Union på størrelse • Det minste treet barn av det største treet • Rota har -nodeantall som pekerverdi • O(M) for M operasjoner • Union på høyde • Det laveste treet barn av det høyeste treet • Rota har -høyde-1 som pekerverdi

  10. Smart Unionalgoritme

  11. Sti-komprimering • Worst case find kan bli dårlig for union by size/height • Stikomprimering løser problemet • Ved find endres alle noder som gjennomløpes slik at de peker på rota • Effekten er at find blir raskere ved senere aksess til disse nodene • Gjøres ved forelder=forelder.find() • Stikomprimering og union by height • Ikke kompatibelt ettersom stikomprimering kan endre høyden og endringsberegning for kostbar • Løsning: Like effektivt: Høyde korrigeres ikke for komprimering. Kalles da RANK. • Stikomprimering+union by rank gir worst case nesten O(M) der m er antall union eller findoperasjoner

More Related