Törlés eljárása bináris kereső fába

szavazat
7

Tekintsük a törlés eljárási BST, ha a csomópont törölni két gyermeke van. Tegyük fel, hogy én mindig cserélje ki a csomópont tartja a minimális kulcsot a jobb részfa.

A kérdés a következő: ezt az eljárást kommutatív? Ez azt jelenti, törlése x majd y ugyanazt az eredményt, mint törlésével első y, majd x?

Azt hiszem, a válasz nem, de én nem találom egy ellenpélda, sem kitalálni érvényes érvelés.

EDIT:

Talán megvan, hogy világosabb.

Tekintsük a transplant(node x, node y)eljárás: ez az x értéket helyettesítse y (és annak részfa). Tehát, ha én szeretnék törölni egy csomópont (mondjuk x), amely két gyerek i cserélje ki a csomópont tartja a minimális kulcsot a jobb részfa:

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)

A kérdés az volt, hogyan lehet bizonyítani a fenti eljárás nem kommutatív.

A kérdést 07/06/2010 15:46
a forrás felhasználó
Más nyelveken...                            


4 válasz

szavazat
17

Törlés (általában) nem kommutatív. Itt van egy ellenpélda:

    4
   / \
  3   7
     /
    6

Mi lenne, ha törölni 4, majd 3?

Amikor töröl 4, megkapjuk 6, mint az új root:

   6
  / \
 3   7

Törlése 3 nem változtatja meg a fát, de számunkra ez:

  6
   \
    7

Mi lenne, ha törli a 3, majd 4?

Amikor töröl 3 a fa nem változik:

 4
  \
   7
  /
 6

Azonban, ha most törli a 4. az új gyökér válik 7:

  7
 /
6

Az így kapott két fák nem azonos, ezért a törlés nem kommutatív.

UPDATE

Nem olvastam a megszorítással, hogy ez az, amikor bármikor törölheti a csomópont 2 gyermek részére. A megoldás az általános esetre. Majd frissíteni, ha / amikor találok egy ellenpélda.

Szintén újítás

Nem tudom a konkrét bizonyíték, de fogok becslésekbe:

Az általános esetben, kezeli a törléseket eltérő attól függően, hogy van két gyerek, egy gyerek, vagy nincs gyermeke. Az ellenpélda I feltéve, először törölje a csomópontot, két gyermek, majd egy csomópontot, amely egy gyermek. Ezt követően, törlöm a csomópont gyermek nélkül, majd egy másik csomópontot, amely egy gyermek.

Abban a speciális esetben, csak törlés csomópontok két gyermek, azt szeretné, hogy az esetben, ha mindkét csomópont azonos sub-tree (mivel ez nem számít, ha azok különböző al-fák, akkor biztos lehet benne, hogy a teljes szerkezet nem változik, sorrendjén alapuló törlés). Amire igazán szükség annak bizonyítására, hogy vajon a sorrendben törlését csomópontok azonos sub-tree, ahol minden egyes csomópont két gyermeke van, az ügyeket.

Vegyünk két csomópont A és B, ahol A egy őse B. Aztán tovább finomíthatja a kérdés, hogy:

Van törlés kommutatív, ha figyelembe törlését két csomópont egy bináris keresés Tree egy ős-leszármazott kapcsolata egymással (ez azt jelentené, hogy azok az azonos sub-tree)?

Ha töröl egy csomópont (mondjuk A), áthalad a jobb részfa, hogy megtalálják a legkisebb elem. Ez a csomópont lesz a levél csomópont, és sohasem lehet egyenlő B (mert B két gyerek, és nem lehet a levél csomópont). Akkor majd cserélje ki a értéke, melynek értéke ezen levél csomópont. Ez azt jelenti, hogy az egyetlen szerkezeti változás, hogy a fa a csere egy értéke az érték a levél-csomópont, és a veszteség a levél-csomópont.

Ugyanez a folyamat vesz részt a B. Azaz, akkor cserélje ki az értéke a csomópont és cserélje a levél-csomópont. Így általában, ha töröl egy csomópontot, két gyermek, az egyetlen szerkezeti változás az értékváltozás a csomópont törlendő, és törölték a levél csomópont, aki értéket használ a csere .

A kérdés tehát tovább finomították:

Tud garantálja, hogy mindig ugyanazt a csere csomópont sorrendjétől függetlenül törlés (ha mindig törli a csomópont két gyerek)?

A válasz (szerintem) igen. Miért? Íme néhány észrevételt:

  • Tegyük fel, hogy törli a leszármazott csomópont első és az ős csomópont második. Az al-fa úgy módosították, amikor törölte a leszármazott csomópont nem a bal oldali részfa az ős csomópont jobb fia. Ez azt jelenti, hogy ez a sub-tree marad. Mi ez azt is jelenti, függetlenül a megrendelés törlését, két különböző al-fák módosított, ezért a művelet kommutatív.
  • Ismét mondjuk törli a leszármazott csomópont első és az ős csomópont második. Az al-fa úgy módosították, amikor törölte a leszármazott csomópont van a bal oldali részfa az ős csomópont jobb fia. De még itt, nincs átfedés. Ennek az az oka, ha törli a leszármazott csomópont először, akkor nézd meg a bal részfa a leszármazott csomópont jobb gyermeke. Ha majd törölje az előd csomópont, akkor soha nem megy le, hogy a sub-tree, mert akkor mindig megy a bal felé, miután megadta az ős csomópont jobb gyermek bal al-fa. Tehát újra, függetlenül attól, hogy mit töröl első módosít különböző al-fák és így úgy tűnik, nem számít a sorrend.
  • Egy másik eset, ha törli az ős csomópont első és úgy találja, hogy a minimális csomópont egy gyermek a leszármazott csomópont. Ez azt jelenti, hogy a leszármazott csomópont lesz a végén egy gyerek, és törli az egyik gyermek triviális. Most vegyük azt az esetet, ha ebben a helyzetben, akkor hagyni a leszármazott csomópont először. Akkor váltaná értékét a leszármazott csomópont jobb fia, majd törölje a megfelelő gyermek. Aztán amikor törli az előd csomópont, akkor a végén megtaláljuk a ugyanazt a minimális csomópont (a régi törölt csomópont bal gyermeke, ami szintén a helyébe csomópont bal gyerek). Akárhogy is, ha a végén ugyanazt a szerkezetet.

Ez nem egy szigorú bizonyítás; ez csak néhány észrevételt tettem. Minden eszközzel, nyugodtan lök lyukak!

Válaszolt 07/06/2010 18:32
a forrás felhasználó

szavazat
0

Válaszolnék ide Vivin második frissítés.

Azt hiszem, ez egy jó átdolgozása a kérdést:

Van törlés kommutatív, ha figyelembe törlését két csomópont egy bináris keresés Tree egy ős-leszármazott kapcsolata egymással (ez azt jelentené, hogy azok az azonos sub-tree)?

de ez a merész alatti mondat nem igaz:

Ha töröl egy csomópont (mondjuk A), áthalad a jobb részfa, hogy megtalálják a legkisebb elem. Ez a csomópont lesz a levél csomópont , és sohasem lehet egyenlő B

mivel a minimum elem egy részfa jogát is joga van gyermeke . Tehát ez nem egy levél. Nevezzük a minimális elem egy részfa jogát successor(A). Nos, ez igaz, hogy B nem lehet successor(A), de lehet annak jobb részfa. Tehát, ez a rendetlenség.

Megpróbálom összefoglalni.

hipotézis :

  1. A és B két gyermeket.
  2. A és B jelentése azonos részfa.

Egyebek tudjuk levezetni hipotézis:

  1. B nincs successor(A)sem jelentése successor(B).

Most, tekintettel arra, hogy azt gondolja, van 4 különböző esetekben (a szokásos módon, Hagy egy őse B):

  1. B egy bal részfa
  2. B egy őse successor(A)
  3. successor(A) egy őse B
  4. B és utóda (A) nincs kapcsolat. (Azok különböző A. részfákat)

Azt hiszem (de persze nem tudja bizonyítani azt), hogy az esetek 1, 2 és 4 nem számít. Tehát csak abban az esetben successor(A)egy őse B törlés eljárás nem kommutatív. Vagy mégis?

Azt át a labdát:)

Üdvözlettel.

Válaszolt 11/06/2010 18:45
a forrás felhasználó

szavazat
2

Úgy tűnik számomra, hogy az ellenpélda mutatja Vivin válasza az egyetlen esetben nem kommutativitás, és hogy valóban távozik a korlátozás, hogy csak csomópontok kétgyermekes törölhető.

De ez is kiküszöbölhető, ha dobja, amit úgy tűnik, hogy az egyik Vivin telephelyén, amely szerint meg kell áthalad a jobb részfa a lehető legkisebb találni elfogadható utódja. Ha ehelyett mindig elősegítik a legkisebb csomópontot a jobb részfa utódjának, függetlenül attól, hogy milyen messze van kiderül, hogy kell elhelyezni, akkor is, ha tudjuk pihenni a korlátozás törlését csomópontok kevesebb, mint két gyerek, Vivin eredményét

    7
   /
  6
nem érjük el, ha kezdjük

    4
   / \
  3 7
     /
    6

Ehelyett, akkor először törölni 3 (jogutód nélküli), majd törli 4 (6, mint utódja), így

    6
     \
      7

ami ugyanaz, mintha a rendelést törlés fordított.

Törlés akkor lenne kommutatív, és azt hiszem, ez mindig kommutatív, mivel a feltevést neveztem (jogutódja mindig legkisebb csomópont jobb részfa a törölt csomópont).

Nem kell egy hivatalos igazolást nyújtani, csupán egy felsorolás esetekben:

  1. Ha a két csomópont törölni kell a különböző részfák, akkor a törlés az egyik nem befolyásolja a másik. Csak akkor, ha azok ugyanazon az úton lehet a sorrendben törlés esetleg befolyásolhatja az eredményt.

    Tehát semmilyen hatással kommutativitás csak akkor lehet, ha egy őse csomópont és egyike annak leszármazottai egyaránt el kell hagyni. Most, hogyan függőleges viszony befolyásolja kommutativitás?

  2. Leszármazottja a bal részfa az ős. Ez a helyzet nem befolyásolja kommutativitás mert az utód jön a jobb részfa, és nem érinti a bal részfa egyáltalán.

  3. Leszármazottja a jobb részfa az ős. Ha az ős utódja mindig a legkisebb csomópontot a jobb részfa, majd sorrendben törlés nem tudja megváltoztatni a választott utód, nem számít, milyen leszármazottja hagyni előtt vagy után az őse. Még ha az utódja az ős kiderül, hogy a leszármazott csomópont, amely szintén el kell hagyni, hogy a leszármazott is ki lett cserélve a következő legnagyobb csomópont, és hogy leszármazottja nem lehet a saját bal részfa fennmaradó kell foglalkozni . Tehát törlését ős és a jobb részfa leszármazottja mindig kommutatív.

Válaszolt 06/04/2011 19:34
a forrás felhasználó

szavazat
0

Azt hiszem, van két egyformán életképes módon törölni egy csomópont, ha van 2 gyerek:
UGRÁS A 4. ESET ...

1. eset: törli 3 (Leaf csomópont)
 2 3
 / \ -> / \
1 3 1


2. eset: törli 2 (Bal gyermek csomópont)
 2 3
 / \ -> / \
1 3 1


3. eset: törli 2 (Jobb gyermek csomópont)
 2 2
 / \ -> / \
1 3 3

______________________________________________________________________
4. eset: törli 2 (bal és jobb gyermek csomópontok)
 2 2 3
 / \ -> / \ vagy / \      
1 3 1 3
mind a munka, és kapott különböző fák :) ______________________________________________________________________
Amint algoritmus leírása itt olvasható: http: // www .mathcs.emory.edu / ~ Cheung / Tanfolyamok / 323 / tematikája / Fák / 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

Válaszolt 10/10/2016 01:02
a forrás felhasználó

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