Concrete voorbeelden van het gebruik van binaire zoekboom?

stemmen
14

Ik begrijp hoe binaire zoekboom worden uitgevoerd, maar ik ben niet zeker wat zijn de voordelen van het gebruik van het over de hash tabellen die de meeste programmeertalen in hun standaard bibliotheken hebben gebouwd.

Kan iemand geef voorbeelden van real-world problemen oplosbaar met binaire zoeken bomen?

De vraag is gesteld op 16/02/2011 om 00:44
bron van user
In andere talen...                            


5 antwoorden

stemmen
1

Een voorbeeld waarbij een binaire boom nodig is binair ruimtedelingen in computer graphics

http://en.wikipedia.org/wiki/Binary_space_partitioning

Een binaire boom is nodig omdat het algoritme het behoud van de relaties tussen de knooppunten in de binaire boom vereist. Er zijn vele andere algoritmen waarbij de structuur van de boom is belangrijk, en dus een hash tabel is niet een passende structuur.

Een andere goede reden voor het gebruik van een binaire boom in plaats van een hash-tabel is als je niet gemakkelijk een efficiënte hash voor uw data items kan genereren, maar u kunt een vergelijking functie te genereren.

Vaak eenvoudig opslaan en ophalen van gegevens een hash tabel optimaler, maar moeilijker te implementeren.

antwoordde op 16/02/2011 om 00:53
bron van user

stemmen
0

Een van de meest over het hoofd gezien is dat veel file systemen maken gebruik van binaire bomen om directory listings te beheren. Ze gebruiken zelden een gewone binaire boom, maar wat variatie, zoals een B-boom. Dit komt omdat de vraag naar on-disk storage van de boom is heel belangrijk om de details van de uitvoering. De reden dat ze gebruik maken van dit soort structuur is voor de efficiëntie en snelheid. Dit laat hen dingen zoals ondersteuning duizenden bestanden in een map. De vergelijking van bestanden maken en verwijderen keer benadrukken efficiëntie voor dit aspect van het bestandssysteem.

Binaire bomen worden ook gebruikt op vele games die 3D-objecten te maken. Nogmaals, de reden is snelheid. In feite is de snelheid is zo belangrijk dat sommige game-engines, zoals de Quake engine eigenlijk de binaire boom pre-gegenereerde en pre-geoptimaliseerde als onderdeel van de kaart bouwproces.

antwoordde op 16/02/2011 om 00:56
bron van user

stemmen
0

Een ding om op te merken is dat de binaire zoekboom zijn ruimte efficiënt. Bijvoorbeeld, u 10 integers opslaan en u een hashfunctie die is toegewezen 0-99, vervolgens u moet een array van 100 integers. Als je gewend Binary Search Tree, dan zou je slechts zoveel geheugen toe te wijzen zoals vereist door de 10 elementen

antwoordde op 16/02/2011 om 00:57
bron van user

stemmen
29

Er zijn een paar theoretische voordelen van binary search bomen over hash tables:

  1. Ze slaan hun elementen in gesorteerde volgorde . Dit betekent dat als je wilt om de container op te slaan op een manier waar u gemakkelijk de waarden in gesorteerde volgorde kunnen bezoeken, een BST is waarschijnlijk een betere keuze dan een hash tabel. Bijvoorbeeld, als u een verzameling van studenten op te slaan en vervolgens uit te printen alle leerlingen in alfabetische volgorde, een BST is een aanzienlijk betere keuze dan een hash tabel.

  2. Ze ondersteunen efficiënt range queries. Omdat BSTS worden opgeslagen in gesorteerde volgorde, is het gemakkelijk om vragen van het formulier te beantwoorden "welke waarden in het bereik [x, y]?" in een binaire zoekboom. Om dit te doen, heb je een zoekopdracht in de boom voor het kleinste element groter is dan x en de grootste element kleiner dan y, dan itereren over de elementen van de boom tussen hen. Beide query in O (lg n) tijd op een gebalanceerde structuur, zodat de totale looptijd van deze bewerking is O (lg n + k), waarbij k het aantal elementen aan de zoekopdracht.

  3. Ze ondersteunen efficiënt naaste buren queries. Hashtabellen zijn speciaal ontworpen zodat zelfs enigszins andere producten totaal verschillende hash-codes. Dit geeft de hash-waarden de dispersie ze moeten voorkomen clustering teveel elementen op één plek. Maar het betekent ook dat je nodig hebt om een lineaire scan over de hash tabel doen om elementen die kunnen worden "afgesloten" om wat je zoekt te vinden. Met een BST, kunt u efficiënt vinden van de voorganger en opvolger van enige waarde die u wilt, zelfs als het niet in de boom.

  4. Ze kunnen beter worst-case garanties. Hashtabel meeste implementaties een soort gedegenereerde geval dat een operatie in het ergste geval kunnen afbreken O (n). A linear probing hashtabel of een geketende hashtabel kan met een slechte verzameling elementen vereisen O (n) maal per opzoeken of vereisen O (n) keer op herkauwen. Inbouw in sommige soorten van evenwichtige BSTS, zoals rood / zwart bomen, AVL bomen, of AA bomen, is altijd het slechtste geval O (lg n).

Als u bereid bent om BSTS om meer uitgebreide boomstructuren generaliseren bent, dan zijn er veel toepassingen waarbij een boom kan worden gebruikt om problemen veel efficiënter dan in een hash-tabel op te lossen. Hier zijn een paar voorbeelden:

  1. kd-bomen kunt u multidimensionale gegevens op te slaan terwijl de ondersteuning van snelle range queries in multidimensionale ruimte, alsmede efficiënte naaste buren lookups. U kunt ze gebruiken voor de indeling (luie leeralgoritmes) of computationele geometrie.

  2. Link / gevelde bomen kunnen worden gebruikt voor max-flow problemen veel efficiënter dan de meeste conventionele algoritmen in staat zou stellen op te lossen. Goede push / herlabelen algoritmes gebruiken om vaart te zetten achter hun implementaties.

  3. Disjuncte ingestelde bossen kan worden gebruikt partities elementen handhaven asymptotisch efficiënt mogelijk (afgeschreven α (n) per bijwerken, waarbij α (n) de inverse functie Ackermann). Ze worden gebruikt in tal van fast-minimum spanning tree algoritmen, evenals een aantal maximum-matching algoritmen.

  4. Binary hopen kan worden gebruikt om prioriteitswachtrijen efficiënt te implementeren. Complexere bomen kunnen worden gebruikt voor de opbouw binomiale hopen en Fibonacci hopen , die van groot belang zijn in de theoretische informatica.

  5. Besluit van de bomen kan worden gebruikt in machine learning voor de indeling, en als model in de theoretische informatica te grenzen aan de looptijden van de verschillende algoritmes te bewijzen.

  6. Ternair zoeken bomen zijn een alternatief voor de pogingen die zijn gebaseerd op als licht gewijzigd BST. Ze zorgen voor een zeer snelle lookup en het inbrengen van elementen en voor ijle datasets zijn zeer beknopt.

  7. B-bomen worden door veel database-systemen efficiënt opzoeken elementen waar de toegang tot de schijf is een beperkende factor.

  8. Binary ruimte partitionering bomen zijn een veralgemening van kd-bomen die kunnen worden gebruikt om snel te maken computer graphics (ze werden gebruikt voor het optimaliseren van het teruggeven in het originele spel Doom) en doe collision-detectie.

  9. BK-bomen kunt u alle woorden die binnen een bepaalde bewerking afstand van zo'n ander woord snel te bepalen, en meer in het algemeen naar alle punten in een metrische ruimte te vinden binnen een bepaalde afstand van een ander punt.

  10. Fusion bomen zijn een alternatief voor tafels voor integer toetsen die zeer snel ondersteuning voor lookups, inserties en verwijderingen hebben hash.

  11. van Emde Boas bomen ander alternatief tabellen integer toetsen die lookup, insertie, deletie, opvolger en voorganger O steunen (lg lg n) tijd per element hash. Sommige database-systemen maken gebruik van VEB bomen om de prestaties te optimaliseren.

Ik ben niet zeker hoe on-topic is dit antwoord, maar het moet u een gevoel voor hoe geweldig en krachtig BSTS en meer algemene boomstructuren kunnen geven.

antwoordde op 16/02/2011 om 01:05
bron van user

stemmen
0

Dit zou waarschijnlijk een reactie, maar-in evenwicht brengen BST (s) (log (n)) worden op grote schaal in plaats van gebruikt BSTS. Plain BSTS hebben worst-case O (N) insertie / uitname tijd.

antwoordde op 16/02/2011 om 03:14
bron van user

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