Presentasjon lastes. Vennligst vent

Presentasjon lastes. Vennligst vent

INF 295 forelesning 14 - kap 8 Disjunkt mengde ADT Hans Fr. Nordhaug (Ola Bø)

Liknende presentasjoner


Presentasjon om: "INF 295 forelesning 14 - kap 8 Disjunkt mengde ADT Hans Fr. Nordhaug (Ola Bø)"— Utskrift av presentasjonen:

1 INF 295 forelesning 14 - kap 8 Disjunkt 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 = {{a 1 },{ a 2 },{ a 3 },{ a 4 }} 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: a 1 R a 3 og a 4 R a 3 er nok til å si at {a 1, a 3, a 4 } 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(N 2 ) Lenket liste Raskere Union fordi full gjennomsøking ikke er nødvendig, men fortsatt O(N 2 ) array som for hvert element inneholder navnet på ekvivalensklassen finn blir O(1), union blir O(N) og union totalt O(N 2 ), men akseptabelt ved N 2 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

9 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

10 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

11 Smart Unionalgoritme

12

13 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

14


Laste ned ppt "INF 295 forelesning 14 - kap 8 Disjunkt mengde ADT Hans Fr. Nordhaug (Ola Bø)"

Liknende presentasjoner


Annonser fra Google