Eenvoudigst te implementeren online naargelang datastructuur in C

stemmen
1

Ik ben het scannen van een grote gegevensbron, op dit moment ongeveer 8 miljoen ingangen, extraheren op koord per ingang, die ik wil in alfabetische volgorde.

Currenlty Ik zet ze in een array dan soort een index om ze met behulp van qsort()die prima werkt.

Maar uit nieuwsgierigheid Ik denk aan in plaats daarvan het inbrengen van elke snaar in een datastructuur die hen onderhoudt in alfabetische volgorde als ik ze scannen vanuit de gegevensbron, deels voor de ervaring van emlplementing één, deels omdat het sneller zal voelen zonder het wachten op het soort te voltooien nadat de scan is voltooid (-:

Welke gegevens structuur zou de meest eenvoudig te implementeren in C zijn?

BIJWERKEN

Ter verduidelijking, de enige handelingen ik moet uitvoeren zijn het invoegen van een item en het dumpen van de index wanneer het klaar is, en daarmee bedoel ik voor elk item in de oorspronkelijke volgorde te dumpen een geheel getal dat de order is in na sortering.

OVERZICHT

  • De makkelijkste te implementeren binary search bomen.
  • Self balancing binaire bomen zijn veel beter, maar niet triviaal te implementeren.
  • Insertion kan iteratief worden gedaan, maar in orde traversal voor het dumpen van de resultaten en de post-order traversal voor de boom te verwijderen wanneer beide gedaan vereisen ofwel recursie of een expliciete stack.
  • Zonder de uitvoering balancing, zullen runs van bestelde ingang resulteren in de gedegenereerde ergste geval dat een gekoppelde lijst. Dit betekent diepe bomen die ernstige invloed hebben op de snelheid van de invoegbewerking.
  • Het schudden van de invoer iets kunnen breken besteld ingang aanzienlijk en is gemakkelijker te implementeren dat balancing.
De vraag is gesteld op 11/04/2011 om 18:23
bron van user
In andere talen...                            


4 antwoorden

stemmen
3

Binaire zoekboom. Of zelfbalancerende search bomen. Maar verwacht niet dat die sneller dan dat een correct toegepast dynamisch array, omdat arrays hebben veel betere plaats van de referentie dan pointer structuren. Ook kan onevenwichtige BSTS "go lineair", zodat je hele algoritme wordt O ( n ²), net als quicksort.

antwoordde op 11/04/2011 om 18:24
bron van user

stemmen
0

Je kon een snellere sorteer-algoritme zoals ons Timsort of andere sorteeralgoritmen met een NLOG (n) het slechtste geval uit te voeren en zoek het gewoon af met binaire zoeken sinds zijn sneller als de lijst wordt gesorteerd.

antwoordde op 11/04/2011 om 18:29
bron van user

stemmen
0

moet u een kijkje nemen op Trie gegevensstructuur nemen wikilink Ik denk dat dit zal dienen wat je wilt

antwoordde op 18/04/2011 om 08:20
bron van user

stemmen
2

U maakt al gebruik van de optimale aanpak. Sorteren op het einde zal veel goedkoper dan het behoud van een online naargelang datastructuur. U kunt dezelfde O (LOGN) komen met een rb-boom, maar de constante zal veel erger zijn, niet tot een aanzienlijke ruimte overhead te noemen.

Dat gezegd hebbende, AVL bomen en rb-bomen zijn veel eenvoudiger uit te voeren als je niet hoeft te verwijderen ondersteunen. Linkse rb boom kan passen in 50 of zo regels code. Zie http://www.cs.princeton.edu/~rs/talks/LLRB/ (door Sedgewick)

antwoordde op 19/04/2011 om 05:31
bron van user

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