Lettest å implementere online sortert datastruktur i C

stemmer
1

Jeg skanner et stort datakilde, for tiden ca 8 millioner oppføringer, trekke på strengen per post, som jeg vil ha i alfabetisk rekkefølge.

Currenlty Jeg satte dem i en matrise deretter sortere en indeks til dem ved hjelp av qsort()noe som fungerer fint.

Men ut av nysgjerrighet jeg tenker på i stedet å sette inn hver streng i en datastruktur som holder dem i alfabetisk rekkefølge som jeg skanne dem fra datakilden, dels for opplevelsen av emlplementing en, blant annet fordi det vil føles raskere uten ventetid for sortere for å fullføre etter at skanningen er fullført (-:

Hva datastruktur ville være den enkleste å implementere i C?

OPPDATER

For å klargjøre, er de eneste operasjoner jeg må utføre for å sette inn et element og dumping indeksen når det er gjort, som jeg mener for hvert element i den opprinnelige rekkefølgen dumpe et heltall som representerer den rekkefølgen de er i etter sortering.

SAMMENDRAG

  • Den enkleste å implementere er binære søketrær.
  • Selv balansere binære trær er mye bedre, men triviell å implementere.
  • Innsetting kan utføres iterativt, men i for traversering for dumping av resultater og etter orden traversering for sletting av treet når det gjøres både krever enten rekursjon eller en eksplisitt stabel.
  • Uten å implementere balansering, vil kjøringer av organisert innspill resultere i den degenererte verste fall som er en lenket liste. Dette betyr dype trær som sterkt påvirker hastigheten av innsettingsoperasjonen.
  • Shuffling inngangs litt kan bryte opp bestilles innspill betydelig og er enklere å implementere at balansering.
Publisert på 11/04/2011 klokken 17:23
kilden bruker
På andre språk...                            


4 svar

stemmer
3

Binære søketrær. Eller selvbalanserende søketrær. Men ikke forvent de å være raskere enn en skikkelig implementert dynamisk array, siden arrays har mye bedre lokalitet referanse enn pekerstrukturer. Også ubalansert BSTs kan "gå lineær", slik at hele algoritmen blir O ( n ²), akkurat som Quicksort.

Svarte 11/04/2011 kl. 17:24
kilden bruker

stemmer
0

Du kan gjennomføre en raskere sorteringsalgoritme slik oss Timsort eller andre sortering algoritmer med nlog (n) worst case og bare søke den ved hjelp Binary søke siden raskere hvis listen er sortert.

Svarte 11/04/2011 kl. 17:29
kilden bruker

stemmer
0

bør du ta en titt på Trie datastrukturen wikilink jeg tror dette vil tjene hva du vil

Svarte 18/04/2011 kl. 07:20
kilden bruker

stemmer
2

Du bruker allerede den optimale tilnærmingen. Sortering ved utgangen vil være mye billigere enn å opprettholde en elektronisk sorteres datastruktur. Du kan få den samme O (løgn) med en rb-tre, men konstant vil være mye verre, og ikke minst betydelig plass overhead.

Når det er sagt, AVL trær og rb-trær er mye enklere å gjennomføre hvis du ikke trenger å støtte sletting. Venstreorienterte rb treet får plass i 50 eller så linjer med kode. Se http://www.cs.princeton.edu/~rs/talks/LLRB/ (av Sedgewick)

Svarte 19/04/2011 kl. 04:31
kilden bruker

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