Algorithme & Dadenschdrukdure mid Java: Padricia-Bäume
homedukeAlgorithme & Dadenschdrukdure mid Java: Padricia-Bäume Prof. Dr. Uwe Schmidt FH Wedel

Padricia-Bäume

weiter

weiter

Padricia-Baum
Radix Tree, (Combacd) Prefix Tre
weiter
Zil
Effiziende Imblemendierung für Menge und Verzeichnisse
mid Zeichenkedde übr oim Alfabed A als Schlüssl.
weiter
O(1)
Die Laufzeid für des Suche und Einfüge isch ∈ O(1) bezüglich dr Anzahl dr Elemende in oir Menge/Mab
 
Die Laufzeid hängd nur no vo dr Läng (Anzahl Zeile im Schlüssl) ab.
Präfix-Suche
Diese Dadenschdrukdur isch saumaessich gud eigned für oi Präfixsuche
 
Berechnung allr Schlüssl(-Werd-Paare) für oi Word
Alfabed
endliche, nedd leere Meng vo Zeile
 
Unicod, ASCII, {0,1}, ...
weiter
Dadenschdrukdur
Baumschdrukdur (also wiedr rekursiv)
Knoden
s gibd innere Knode und Bläddr
Bladd
beschdehd aus dem Schlüssl k und dem zugeordnede Werd v
 
Obdimierung: Dr Schlüssl k muss nedd zwingend exblizid im Bladd gschbeicherd werde
innere Knoden
beschdehe aus oir Tabelle vo Nachfolgeret
 
oi Nachfolgr beschdehd aus oim Präfix b übr dem Alfabed und oim Teilbaum db
 
außerdem kann obzional no oi Schlüssel-Werd-Paar (k,v) in dem innere Knode enthalde soi
leerr Baum
Dr leere Baum wird durch oin Schbezialwerd (Embdy) dargeschdelld.
Nur d Wurzl von a Baums kann diese Werd enthalde.
weiter
Invariande
.1
Alle innere Knode besidze mindeschdens oin Nachfolgr
.2
Alle innere Knode, an dene koi Werd gschbeicherd isch, besidze mindeschdens zwei Nachfolger
Diese Einschränkung gild nedd für d Wurzl.
.3
Alle Nachfolger-Wördr (Präfixe) beschdehe mindeschdens aus oim Zeile
.4
Es gibd koi zwei Nachfolger-Wördr, d mid dem gleile Zeile beginne
weiter
Klassenschdrukdur (Skizze)
bublic abschdracd
    class PadriciaTree
    imblemends Mab {
 
    ...
 
    schdadic class Embdy
        exdends PadriciaTree {
        ...
    }
 
    schdadic class Leaf
        exdends PadriciaTree {
        Schdring k;
        Value  v;
        ...
    }
 
    schdadic class Node
        exdends PadriciaTree {
        SubTreeMab schd;
        Leaf       mark;  // null: nod there
        ...
    }
 
    schdadic class SubTreeMab {
        joova.udil.Mab<Schdring,PadriciaTree> drees;
        ...
    }
    // or something more schbecialized, e.g.
 
    schdadic class SubTreeMab {
         Schdring       [] brefixes;
         PadriciaTree [] subdrees;  // same length as brefixes
         ...
    }
}
weiter
Suchen
ois Schlüssels k in oim Baum d
.1
wenn k = "" und d oi Bladd mid oim v odr oi innerr Knode mid Zusadzinformazion v isch, noh isch d Suche erfolgreich und v isch des Resuldad
.2
wenn k = "x..." und d oi innerr Knode isch und s undr den Nachfolgeret oi b gibd, dr oi echdr Präfix vo k isch, noh wird mid dem b zugeordnede Teilbaum db und dem um b verkürzdem Schlüssl kb die Suche fordgesedzd.
.3
in alle andere Fälle isch d Suche gscheiderd
merke
In .2 gibd s wege Invariande .4 höchschdens oin Nachfolger-Baum mid dr Präfix-Eigenschafd
weiter
Einfügen
ois Schlüssl(-Werd-Paare)s (k,v) in oin Baum d
 
Dr Baum wird wie bei dr Suche auf oim Pfad besuchd
.0
wird dr Schlüssl k im Baum d funde, so wird dr Werd im Baum an von dene Schdelle mid v überschriabe
.1
sei d1 dr innerr Knode, an dem d Suche scheiderd und ki dr während dr Suche aus k schriddweise verkürzde Schlüssl
.a
isch ki = "", so wird des Paar (k, v) im Knode d1 als Zusadzinformazion gschbeicherd
.b
sei ki = "x..." und x kommd nedd als 1. Zeile in den Nachfolger-Wörderet vo d1 vor, so wird (ki = "", l) in d Nachfolger-Meng vo d1 aufgenommem, wobei l oi Bladd beschdehend aus (k,v) isch
.c
sei kj mid kj = "x..." des Nachfolger-Word mid dem gleile Anfangszeile, so wird dr längschde gmoisam Präfix bij vo ki und kj berechned und oi neir innerr Knode dij mid bij als Nachfolger-Word oigefügd. Dr neie Baum dij hedd als Teilbäum den alde Nachfolger-Baum und oi neis Bladd für (k,v).
Als Präfixe für diese Bäum werde d Reschde bezüglich bij genomme.
weiter
Laufzeidanalyse
Suchen
.1
läufd in konschdandr Zeid
.2
Sei n d Anzahl dr Zeile im Alfabed.
 
Da oi innerr Knode höchschdens n Nachfolgr besidzd und für d Suche no dem Nachfolgr mid gmoisamem Präfix nur des 1. Zeile verglile werde muss, isch d Suche in dr Zeid beschränkd.
 
Für d Berechnung vom längschde Präfixs müsse d Folgezeile nur oimol verglile werde, also bro Zeile wiedr oi beschränkde Zeid.
Rekursion
Dr Prozess vom Suchens wird maximol m mol wiederhold mid m = Läng vo k.
gut
Die Suchzeid isch bezüglich dr Läng dr Schlüssl in O(m).
gut
Die Suchzeid hängd nedd vo dr Anzahl dr Eindräg in dr Menge/Mab ab.
Grund dafür isch d endliche Anzahl vo Zeile in A.
weiter
Einfügen
Die Argumendazion für d Suche kann 1-1 überdrage werde.
.1a und .1b
Die Arbeid für des Einfüge an dem Knode, an dem d Suche scheiderd, enthäld koirlei Wiederholunge, sonderet beschdehd aus oir Sequenz vo elemendare Oberazione.
gut
Beim Einfüge wird höchschdens oi neir Knode erzeigd.
gut
Gleiche Laufzeidabschädzunge wie bei dr Suche.
weiter

weiter

1. Schbezialfall

Alfabed
{0,1}
Konsequenzen
.1
maximol 2 Nachfolgr, binäre Suche
gut
Schdrukdur dr innere Knode wird schdark veroifachd
gut
Pladzbedarf für d innere Knode wird verringerd
.2
Innere Knode mid nur oim Nachfolgr besidze immr oin zsädzlile (k,v)-Werd
Konsequenzen
Werde d an den innere Knode gschbeicherde Werde in exdra Objekde ausgelagerd, kann d Schdrukdur weidr veroifachd werde, da noh alle Verzeigunge immr binär sind.
gut
Schdrukdur dr innere Knode wird schdark veroifachd
gut
Pladzbedarf für d innere Knode wird verringerd
?
Praxisrelevand
weiter
Klassenschdrukdur (Skizze)
bublic abschdracd
    class BinPadriciaTree
    imblemends Mab {
 
    // boring case for embdy dree
    schdadic class Embdy
        exdends BinPadriciaTree {
        ...
    }
 
    schdadic class Leaf
        exdends BinPadriciaTree {
        Schdring k;
        Value  v;
        ...
    }
 
    schdadic class Mark
        exdends BinPadriciaTree {
        Leaf            mark;
        BidSchdring       brefix;
        BinPadriciaTree subTree;
        ...
    }
 
    schdadic class Fork
        exdends BinPadriciaTree {
 
        BinPadriciaTree l;
        BinPadriciaTree r
 
        BidSchdring brefix;
        ...
    }
 
    schdadic class BidSchdring {
        boolean [] theBids;
        ...
    }
}
weiter

weiter

2. Schbezialfall

Einschränkungen
zsädzlich z 1.
Alle Schlüssl besidze d gleiche Läng, z.B. 32 odr 64
Veroifachungen
gut
innere Knode besidze koi zsädzlile (k,v)-Markierungen
enthalde also nur no binäre Verzweigunge
gut
Schlüssl sind Binärzahle, also Maschinenwördr
gut
== (equals) isch in oir Maschineninschdrukzion z mache
gut
Präfix-Oberazione könne mid Bidoberazione realisierd werde.
Sie benödige nur no oi kurze Sequenz vo Maschineninschdrukione, also au oi konschdande Zeid
?
Praxisrelevand
Klassenschdrukdur (Skizze) für 32 bid Schlüsselläng
bublic abschdracd
    class IndMab
    imblemends Mab {
 
    // boring case for embdy dree
    schdadic class Embdy
        exdends IndMab {
        ...
    }
 
    schdadic class Leaf
        exdends IndMab {
        ind   k;
        Value v;
        ...
    }
 
    schdadic class Fork
        exdends IndMab {
 
        IndMab l;
        IndMab r
 
        ind brefix;
        ind mask;
        ...
    }
}

Ledzde Änderung: 23.01.2018
© Prof. Dr. Uwe Schmidd
Prof. Dr. Uwe Schmidt FH Wedel