Facile à implémenter la structure de données en ligne en C trié

voix
1

Je numérisation d'une grande source de données, actuellement environ 8 millions d'entrées, l'extraction de chaîne par entrée, que je veux dans l'ordre alphabétique.

Currenlty Je les ai mis dans un tableau puis trier un index pour les utiliser qsort()qui fonctionne très bien.

Mais par curiosité je pense à la place d'insérer chaque chaîne dans une structure de données qui les maintient dans l'ordre alphabétique que je les numériser à partir de la source de données, en partie pour l'expérience de emlplementing une, en partie parce qu'il se sentira plus vite sans attendre le genre pour terminer après l'analyse terminée (-:

Quelle est la structure des données serait la plus simple à mettre en œuvre en C?

METTRE À JOUR

Pour clarifier, les seules opérations dont j'ai besoin d'effectuer sont un élément et insèrent le dumping l'indice quand il est fait, je veux dire pour chaque élément dans l'ordre d'origine vider un entier représentant l'ordre qu'il est après le tri.

RÉSUMÉ

  • Les plus faciles à mettre en œuvre sont des arbres binaires de recherche.
  • arbres binaires auto équilibrage sont beaucoup mieux, mais non négligeable à mettre en œuvre.
  • L'insertion peut être fait itérativement, mais dans l'ordre Traversal pour les résultats et le dumping post-ordre Traversal pour la suppression de l'arbre lorsque vous avez terminé les deux nécessitent soit récursion ou une pile explicite.
  • Sans la mise en œuvre d'équilibrage, pistes d'entrée ordonnée entraînera le pire des cas dégénéré qui est une liste chaînée. Cela signifie des arbres profonds qui ont un impact fortement la vitesse de l'opération d'insertion.
  • Traînant l'entrée légèrement peut briser de manière significative l'entrée ordonnée et est plus facile à mettre en œuvre que l'équilibrage.
Créé 11/04/2011 à 18:23
source utilisateur
Dans d'autres langues...                            


4 réponses

voix
3

Arbres binaires de recherche. Ou des arbres de recherche gyropodes. Mais ne vous attendez pas à ceux d'être plus rapide qu'un tableau dynamique correctement mis en œuvre, puisque les tableaux ont beaucoup mieux localité de référence que les structures de pointeur. En outre, BSTS asymétriques peuvent « aller linéaire », de sorte que votre algorithme entier devient O ( n ²), tout comme quicksort.

Créé 11/04/2011 à 18:24
source utilisateur

voix
0

Vous pouvez mettre en œuvre un algorithme plus rapide de tri comme nous Timsort ou d'autres algorithmes de tri avec un nlog (n) pire des cas et recherche simplement en utilisant la recherche binaire depuis sa plus rapide si la liste est triée.

Créé 11/04/2011 à 18:29
source utilisateur

voix
0

vous devriez jeter un oeil à Trie structure de données wikilien je pense que cela va servir ce que vous voulez

Créé 18/04/2011 à 08:20
source utilisateur

voix
2

Vous utilisez déjà l'approche optimale. Trier à la fin sera beaucoup moins cher que le maintien d'une structure de données en ligne triée. Vous pouvez obtenir le même O (logN) avec un rb-arbre, mais la constante sera bien pire, sans parler de frais généraux d'un espace important.

Cela dit, les arbres AVL et rb arbres sont beaucoup plus simples à mettre en œuvre si vous n'avez pas besoin de soutenir la suppression. -Penchant gauche arbre rb peut tenir dans quelque 50 lignes de code. Voir http://www.cs.princeton.edu/~rs/talks/LLRB/ (par Sedgewick)

Créé 19/04/2011 à 05:31
source utilisateur

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