Più facile da implementare struttura di dati on-line ordinato in C

voti
1

Sto scansione di una grande fonte di dati, attualmente di circa 8 milioni di voci, l'estrazione su stringa per ogni voce, che voglio in ordine alfabetico.

Currenlty li inserisce in una matrice quindi ordinare un indice utilizzando qsort()che funziona bene.

Ma per curiosità sto pensando di inserire invece ogni stringa in una struttura di dati che li mantiene in ordine alfabetico come li scruto dall'origine dati, in parte per l'esperienza di emlplementing uno, in parte perché si sentono più veloce senza l'attesa per il tipo di completare dopo la scansione è stata completata (-:

Che struttura di dati sarebbe la più semplice da implementare in C?

AGGIORNARE

Per chiarire, le uniche operazioni devo eseguire stanno inserendo un elemento e l'indice di scarico quando è fatto, vale a dire per ogni articolo nell'ordine originale scaricare un intero che rappresenta l'ordine è in dopo la cernita.

SOMMARIO

  • Il più facile da implementare sono alberi binari di ricerca.
  • Appartamenti bilanciamento alberi binari sono molto meglio, ma non banale da implementare.
  • L'inserimento può essere fatto in modo iterativo, ma in ordine di attraversamento per lo scarico i risultati e post-ordine di attraversamento per l'eliminazione dell'albero quando fatto entrambi richiedono sia la ricorsione o uno stack esplicito.
  • Senza implementare il bilanciamento, percorsi di ingresso ordinato si tradurrà nel peggiore dei casi degenere, che è una lista collegata. Questo significa che gli alberi profondi influire gravemente la velocità dell'operazione di inserimento.
  • Mescolare un po 'l'ingresso può rompere ordinato di ingresso in modo significativo ed è più facile da implementare che il bilanciamento.
È pubblicato 11/04/2011 alle 18:23
fonte dall'utente
In altre lingue...                            


4 risposte

voti
3

Alberi binari di ricerca. O alberi di ricerca auto-bilanciamento. Ma non aspettatevi quelli di essere più veloce di un array dinamico correttamente attuato, dal momento che gli array sono molto meglio località di riferimento rispetto alle strutture di puntatore. Inoltre, BST sbilanciati possono "andare lineare", così il vostro intero algoritmo diventa O ( n ²), proprio come quicksort.

Risposto il 11/04/2011 a 18:24
fonte dall'utente

voti
0

Si potrebbe implementare un algoritmo di ordinamento più veloce come noi timsort o altri algoritmi di ordinamento con nlog (n) caso peggiore e basta cercare utilizzando ricerca binaria fin dalla sua più velocemente se l'elenco è ordinato.

Risposto il 11/04/2011 a 18:29
fonte dall'utente

voti
0

si dovrebbe dare un'occhiata a Trie datastructure wikilink penso che questo servirà ciò che si vuole

Risposto il 18/04/2011 a 08:20
fonte dall'utente

voti
2

Stai già utilizzando l'approccio ottimale. Ordina alla fine sarà molto più conveniente che il mantenimento di una linea allineati struttura di dati. È possibile ottenere lo stesso O (log N) con un RB-albero, ma la costante sarà molto peggio, per non parlare di un overhead significativo spazio.

Detto questo, alberi AVL e RB-alberi sono molto più semplici da implementare se non è necessario per sostenere la cancellazione. Di sinistra albero rb può andare bene in 50 o giù di righe di codice. Vedere http://www.cs.princeton.edu/~rs/talks/LLRB/ (da Sedgewick)

Risposto il 19/04/2011 a 05:31
fonte dall'utente

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