Ευκολότερο να εφαρμοστεί σε απευθείας σύνδεση ταξινόμηση δομή δεδομένων σε C

ψήφοι
1

Είμαι σάρωση ενός μεγάλου αρχείου προέλευσης δεδομένων, επί του παρόντος περίπου 8 εκατομμύρια εγγραφές, εξαγωγή σε στοιχειοσειράς ανά είσοδο, το οποίο θα ήθελα κατ 'αλφαβητική σειρά.

Currenlty Τους έβαλα σε μια σειρά, στη συνέχεια, το είδος δείκτη να τα χρησιμοποιούν qsort()οποίο δουλεύει μια χαρά.

Αλλά από περιέργεια Σκέφτομαι αντί για την εισαγωγή κάθε χορδή σε μια δομή δεδομένων που τους διατηρεί σε αλφαβητική σειρά όπως τους σαρώσει από την πηγή δεδομένων, εν μέρει για την εμπειρία της emlplementing μία, εν μέρει επειδή θα αισθάνονται πιο γρήγορα, χωρίς την αναμονή για το είδος για να ολοκληρωθεί μετά την ολοκλήρωση της σάρωσης (-:

Ποια δομή δεδομένων θα είναι το πιο εύκολο να εφαρμοστεί σε C;

ΕΚΣΥΓΧΡΟΝΙΖΩ

Για να διευκρινιστεί, είναι οι μόνες εργασίες που πρέπει να εκτελέσει την εισαγωγή ενός στοιχείου και απόρριψη του δείκτη όταν το κάνει, και με αυτό εννοώ για κάθε στοιχείο στην αρχική σειρά χωματερή έναν ακέραιο αριθμό που αντιπροσωπεύει τη σειρά είναι στο μετά τη διαλογή.

ΠΕΡΙΛΗΨΗ

  • Ο ευκολότερος να εφαρμόσει τα δυαδικά δέντρα αναζήτησης.
  • Αυτο εξισορρόπηση δυαδικά δέντρα είναι πολύ καλύτερα, αλλά μη τετριμμένη για την εφαρμογή της.
  • Η εισαγωγή μπορεί να γίνει επαναληπτικά, αλλά σε σειρά διάσχισης για την απόρριψη της αποτελέσματα και μετά την παραγγελία διάσχισης για τη διαγραφή του δέντρου, όταν γίνεται τόσο απαιτούν είτε αναδρομή ή ρητή στοίβα.
  • Χωρίς την εφαρμογή εξισορρόπηση, σειρές διέταξε εισόδου θα έχει ως αποτέλεσμα την εκφυλισμένη χειρότερη περίπτωση η οποία είναι συνδεδεμένη λίστα. Αυτό σημαίνει βαθιά δέντρα που έχουν αντίκτυπο σε μεγάλο βαθμό την ταχύτητα της λειτουργίας εισαγωγής.
  • Ανακάτεμα της εισόδου ελαφρά μπορεί να διαλύσει διέταξε εισόδου σημαντικά και είναι πιο εύκολο να εφαρμοστεί αυτή η εξισορρόπηση.
Δημοσιεύθηκε 11/04/2011 στις 18:23
πηγή χρήστη
Σε άλλες γλώσσες...                            


4 απαντήσεις

ψήφοι
3

Δυαδικά δέντρα αναζήτησης. Ή αυτο-εξισορρόπησης δέντρα αναζήτησης. Αλλά μην περιμένετε εκείνους να είναι ταχύτερη από ό, τι μια ορθή εφαρμογή δυναμικό πίνακα, δεδομένου ότι πίνακες έχουν πολύ καλύτερη τοποθεσία αναφοράς από τις δομές του δείκτη. Επίσης, ασύμμετρη BSTs μπορεί να «πάει γραμμική», έτσι ώστε ολόκληρο αλγόριθμο σας γίνεται O ( n ²), όπως quicksort.

Απαντήθηκε 11/04/2011 στις 18:24
πηγή χρήστη

ψήφοι
0

Θα μπορούσε να εφαρμόσει έναν αλγόριθμο πιο γρήγορη διαλογή όπως μας Timsort ή άλλων αλγορίθμων ταξινόμησης με nlog (n) χειρότερη περίπτωση και απλά να κάνετε χρήση της δυαδικής αναζήτησης από τους πιο γρήγορα, αν η λίστα είναι ταξινομημένη.

Απαντήθηκε 11/04/2011 στις 18:29
πηγή χρήστη

ψήφοι
0

πρέπει να ρίξετε μια ματιά στο Trie δομή δεδομένων WikiLink νομίζω ότι αυτό θα εξυπηρετήσει αυτό που θέλετε

Απαντήθηκε 18/04/2011 στις 08:20
πηγή χρήστη

ψήφοι
2

Είστε ήδη χρησιμοποιούν τη βέλτιστη προσέγγιση. Ταξινόμηση κατά το τέλος θα είναι πολύ φθηνότερα από ό, διατηρώντας ένα online ταξινομημένο δομή δεδομένων. Μπορείτε να πάρετε το ίδιο O (logN) με RB-δέντρο, αλλά η σταθερή θα είναι πολύ χειρότερα, για να μην αναφέρουμε σημαντικό χώρο πάνω από το κεφάλι.

Τούτου λεχθέντος, AVL δέντρα και rb-δέντρα είναι πολύ πιο απλό να εφαρμοστεί αν δεν χρειάζεται να υποστηρίζουν τη διαγραφή. Αριστερά-κλίνει rb δέντρο μπορούν να χωρέσουν σε 50 ή έτσι γραμμές κώδικα. Δείτε http://www.cs.princeton.edu/~rs/talks/LLRB/ (από Sedgewick)

Απαντήθηκε 19/04/2011 στις 05:31
πηγή χρήστη

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