Sletting prosedyre for et binært søketre

stemmer
7

Tenk Slettingen på BST, når noden å slette har to barn. La oss si at jeg alltid erstatte den med noden holder minimum nøkkelen i sin rett treet.

Spørsmålet er: er denne prosedyren kommutativ? Det vil si, slette x og y har samme resultat enn å slette første y og deretter x?

Jeg tror svaret er nei, men jeg kan ikke finne et moteksempel, og heller finne ut hvilken som helst gyldig resonnement.

REDIGERE:

Kanskje jeg har fått til å være klarere.

Vurdere transplant(node x, node y)prosedyre: den erstatte x med y (og dens undertreet). Så, hvis jeg ønsker å slette en node (si x) som har to barn jeg erstatte den med noden holder minimum nøkkelen i sin rett treet:

y = minimum(x.right)
transplant(y, y.right) // extracts the minimum (it doesn't have left child)
y.right = x.right
y.left = x.left
transplant(x,y)

Spørsmålet var hvordan å bevise prosedyren ovenfor er ikke kommutativ.

Publisert på 07/06/2010 klokken 14:46
kilden bruker
På andre språk...                            


4 svar

stemmer
17

Delesjon (generelt) er ikke kommutativ. Her er et moteksempel:

    4
   / \
  3   7
     /
    6

Hva om vi sletter 4 og 3?

Når vi sletter 4, får vi seks som ny root:

   6
  / \
 3   7

Slette tre endrer ikke på treet, men gir oss dette:

  6
   \
    7

Hva om vi sletter tre og fire?

Når vi sletter tre treet ikke endres:

 4
  \
   7
  /
 6

Men når vi nå slette fire, blir den nye roten 7:

  7
 /
6

De to resulterende trær ikke er det samme, og derfor sletting er ikke kommutativ.

OPPDATER

Jeg har ikke lest den begrensning at dette er når du alltid slette en node med 2 barn. Min løsning er for det generelle tilfellet. Jeg skal oppdatere det hvis / når jeg kan finne en counter-eksempel.

en annen oppdatering

Jeg har ikke konkrete bevis, men jeg kommer til å gjette:

I det generelle tilfellet, håndterer du slettinger forskjellig basert på om du har to barn, ett barn eller ingen barn. I counter-eksemplet jeg gitt, jeg først slette en node med to barn og deretter en node med ett barn. Etter det jeg slette en node uten barn og deretter en annen node med ett barn.

I det spesielle tilfellet bare slette noder med to barn, vil du vurdere saken der begge noder er i samme sub-treet (siden det ville ingen rolle om de er i forskjellige sub-trær, og du kan være sikker på at generelle struktur vil ikke endres basert på rekkefølgen av delesjonen). Hva du virkelig trenger å bevise er om rekkefølgen på sletting av noder i samme sub-treet, der hver node har to barn, saker.

Tenk to noder A og B, hvor A er en stamfar til B. Deretter kan du avgrense spørsmålet være:

Er sletting kommutativ når du vurderer sletting av to noder fra et binært søketre som har en stamfar-kommer forhold til hverandre (dette ville innebære at de er i samme sub-treet)?

Når du sletter en node (la oss si A), du traversere riktig sub-treet for å finne minimum element. Denne noden vil være en bladnode og kan aldri være lik B (fordi B har to barn, og kan ikke være en bladnode). Du vil da erstatte verdien av A med verdien av denne blad-node. Hva dette betyr er at den eneste strukturelle endringer til treet er utskifting av en verdi med verdien av blad-node, og tap av blad-node.

Den samme prosessen er involvert for B. Det vil si at du erstatte verdien av noden og erstatte et blad-node. Så generelt, når du sletter en node med to barn, er den eneste strukturelle endringen endringen i verdien av noden du sletter, og sletting av bladnoden som er verdien du vil bruke som erstatning .

Så spørsmålet er videreutviklet:

Kan du garantere at du alltid vil få samme erstatning node uavhengig av rekkefølgen på sletting (når du er alltid å slette en node med to barn)?

Svaret (tror jeg) er ja. Hvorfor? Her er noen observasjoner:

  • La oss si du sletter kommer node først og stamfar node andre. Sub-tre som ble endret da du slettet kommer noden er ikke i venstre sub-treet til stamfar noden rett barn. Det betyr at dette sub-treet forblir upåvirket. Hva dette betyr også er uavhengig av rekkefølgen av delesjon, to forskjellige er undertrær modifisert og derfor vil driften er kommutativ.
  • Igjen, la oss si du sletter kommer node først og stamfar node andre. Sub-tre som ble endret da du slettet kommer node er i venstre sub-treet til stamfar noden rett barn. Men også her er det ingen overlapping. Årsaken er når du sletter kommer node først, du ser på venstre sub-tre av kommer nodens høyre barn. Når du deretter slette stamfar node, vil du aldri gå ned som sub-treet, siden du vil alltid gå mot venstre når du går inn i stamfar nodens høyre barnets venstre sub-treet. Så igjen, uavhengig av hva du sletter første du endrer forskjellige sub-trær og så ser det ut for spiller ingen rolle.
  • Et annet tilfelle er hvis du sletter stamfar node først, og du finner ut at minimumspunktet er et barn av kommer node. Dette betyr at kommer noden vil ende opp med ett barn, og slette ett barn er trivielt. Nå vurdere saken hvor i dette scenariet, slettet du etterkommer node først. Da ville du erstatte verdien av kommer node med sin rett barnet og deretter slette den rette barn. Så når du sletter stamfar node, ender du opp med å finne den samme minimumspunktet (den gamle slettet nodens venstre barnet, som også er erstattet nodens venstre barn). Uansett, ender du opp med samme struktur.

Dette er ikke en streng bevis; Dette er bare noen observasjoner jeg har gjort. For all del, gjerne stikke hull!

Svarte 07/06/2010 kl. 17:32
kilden bruker

stemmer
0

Jeg svarer her for å Vivin nest oppdatering.

Jeg tror dette er en god omstøpt av spørsmålet:

Er sletting kommutativ når du vurderer sletting av to noder fra et binært søketre som har en stamfar-kommer forhold til hverandre (dette ville innebære at de er i samme sub-treet)?

men denne dristige setningen nedenfor er ikke sant:

Når du sletter en node (la oss si A), du traversere riktig sub-treet for å finne minimum element. Denne noden vil være en bladnode og kan aldri være lik B

siden den minste elementet i A rett deltre kan ha rett barn . Så det er ikke et blad. La oss kalle det minste elementet i A rett deltre successor(A). Nå er det sant at B ikke kan være successor(A), men det kan være i sin rett treet. Så det er et rot.

Jeg prøver å oppsummere.

hypotese :

  1. A og B har to barn hver.
  2. A og B er i det samme undertreet.

Andre ting vi kan utlede fra hypotese:

  1. B er ikke successor(A), verken A successor(B).

Nå, gitt at, jeg tror det er 4 forskjellige tilfeller (som vanlig, la være A en stamfar til B):

  1. B er i en venstre deltre
  2. B er en stamfar av successor(A)
  3. successor(A) er en stamfar av B
  4. B og etterfølger (A) ikke har noe forhold. (De er i forskjellige As subtre)

Jeg tror (men selvfølgelig jeg kan ikke bevise det) at saker 1, 2 og 4 ikke saken. Så, bare i tilfelle successor(A)er en stamfar til B Slettingen kan ikke være kommutativ. Eller kunne det?

Jeg slå gjennom:)

Hilsen.

Svarte 11/06/2010 kl. 17:45
kilden bruker

stemmer
2

Det virker for meg at counterexample vist i Vivin svar er det eneste tilfelle av ikke-commutativity, og at det er faktisk elimineres ved begrensning at bare noder med to barn kan slettes.

Men det kan også bli eliminert hvis vi forkaste det som synes å være en av Vivin lokaler, som er at vi skal krysse rett treet så lite som mulig å finne noen akseptabel etterfølger. Hvis du istedet vi alltid fremme den minste node i høyre subtre som etterfølger, uansett hvor langt unna det viser seg å være lokalisert, så selv om vi slappe av begrensningen om sletting av noder med færre enn to barn, Vivin resultat

    7
   /
  6
er aldri nådd hvis vi starter på

    4
   / \
  3 7
     /
    6

I stedet må vi først slette 3 (uten etterfølger) og deretter slette 4 (med 6 som etterfølger), noe som ga

    6
     \
      7

som er den samme som om rekkefølgen av delesjonen ble reversert.

Sletting vil da være kommutativ, og jeg tror det er alltid kommutative, gitt forutsetningen jeg har kalt (etterfølger er alltid minste node i høyre subtre av slettede node).

Jeg har ikke et formelt bevis å tilby, bare en opplisting av tilfeller:

  1. Hvis de to noder som skal slettes er i forskjellige undertrær, deretter sletting av en påvirker ikke den andre. Bare når de er i den samme banen kan rekkefølgen av delesjonen muligens påvirke utfallet.

    Så noen effekt på commutativity kan komme bare når en stamfar node og en av dens etterkommere er begge slettet. Nå, hvordan deres vertikale forhold påvirker commutativity?

  2. Kommer i venstre subtre av stamfar. Denne situasjonen vil ikke påvirke commutativity fordi etterfølger kommer fra høyre subtre og kan ikke påvirke venstre treet i det hele tatt.

  3. Kommer i den høyre subtre av stamfar. Hvis stamfar etterfølger er alltid den minste node i riktig treet, så rekkefølgen på sletting kan ikke endre valget av etterfølger, uansett hva kommer slettes før eller etter stamfar. Selv om etterfølgeren til stamfar viser seg å være etterkommer node som også skal slettes, kan det kommer også erstattes med neste største node til det, og at etterkommer ikke egen venstre subtre resterende skal behandles . Så sletting av en stamfar og noen rett-subtre kommer vil alltid være kommutativ.

Svarte 06/04/2011 kl. 18:34
kilden bruker

stemmer
1

Jeg tror det er to like levedyktig måte å slette en node, når den har 2 barn:
GÅ TIL CASE 4 ...

Tilfelle 1: delete 3 (Leaf node)
 2 3
 / \ -> / \
1 3 1


Tilfelle 2: slette 2 (Venstre barnenode)
 2 3
 / \ -> / \
1 3 1


Sak 3: slette 2 (Høyre barn node)
 2 2
 / \ -> / \
1 3 3

______________________________________________________________________
Sak 4: delete 2 (venstre og høyre barn noder)
 2 2 3
 / \ -> / \ eller / \      
1 3 1 3
både arbeid og har ulike følge trær :) ______________________________________________________________________
Som algoritme forklart her: http: // www .mathcs.emory.edu / ~ cheung / Emner / 323 / Pensum / trær / AVL-delete.html Deleting a node with 2 children nodes: 1) Replace the (to-delete) node with its in-order predecessor or in-order successor 2) Then delete the in-order predecessor or in-order successor

Svarte 10/10/2016 kl. 01:02
kilden bruker

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more