Más fácil de implementar la estructura de datos en línea ordenados en C

votos
1

Estoy escaneando una fuente de datos de gran tamaño, actualmente cerca de 8 millones de entradas, la extracción en cadena por entrada, lo que yo quiero en orden alfabético.

Currenlty me los puso en una matriz a continuación, ordenar un índice a ellos con qsort()los que trabaja muy bien.

Pero por curiosidad Estoy pensando en lugar de insertar cada cadena en una estructura de datos que los mantiene en orden alfabético, ya que las escanea desde la fuente de datos, en parte por la experiencia de emlplementing uno, en parte porque se sentirá más rápido sin tener que esperar por la clase para completar después de finalizada la exploración (-:

¿Qué estructura de datos sería el más sencillo de implementar en C?

ACTUALIZAR

Para aclarar, las únicas operaciones que necesito para llevar a cabo se inserta un elemento y el vertido del índice cuando se hace, por lo cual quiero decir para cada elemento en el orden original volcar un entero que representa el orden en que se encuentra en después de la clasificación.

RESUMEN

  • La forma más fácil de implementar son árboles binarios de búsqueda.
  • Autobalanceo árboles binarios son mucho mejor, pero no trivial de implementar.
  • La inserción puede realizarse de forma iterativa, pero el recorrido en orden para volcar el resultado y después de la orden de recorrido para borrar el árbol cuando se hace tanto requiere ni recursividad o un pila explícita.
  • Sin implementar equilibrio, carreras de entrada ordenada resultarán en el peor caso degenerado que es una lista enlazada. Esto significa árboles profundas que afectan gravemente a la velocidad de la operación de inserción.
  • Arrastrando los pies ligeramente la entrada puede romper entradas ordenadas de manera significativa y es más fácil de implementar que el equilibrio.
Publicado el 11/04/2011 a las 18:23
fuente por usuario
En otros idiomas...                            


4 respuestas

votos
3

Árboles binarios de búsqueda. O autobalanceados árboles de búsqueda. Pero no espere que aquellos a ser más rápido que una matriz dinámica se aplica adecuadamente, ya que las matrices tienen mucho mejor localidad de referencia que las estructuras de puntero. Además, BSTs desequilibradas pueden "ir lineal", por lo que se convierte en toda su algoritmo O ( n ²), al igual que la clasificación rápida.

Respondida el 11/04/2011 a las 18:24
fuente por usuario

votos
0

Se podría implementar un algoritmo de ordenación más rápido como nos Timsort u otros algoritmos de clasificación con un n log (n) y el peor de los casos simplemente buscarla mediante la búsqueda binaria desde su más rápido si la lista está ordenada.

Respondida el 11/04/2011 a las 18:29
fuente por usuario

votos
0

usted debe echar un vistazo a Trie estructura de datos EnlaceWiki creo que esto servirá lo que quiere

Respondida el 18/04/2011 a las 08:20
fuente por usuario

votos
2

Ya está utilizando el enfoque óptimo. Ordenar al final será mucho más barato que el mantenimiento de una línea ordenada estructura de datos. Se puede obtener el mismo O (logN) con una RB-árbol, pero la constante será mucho peor, por no mencionar significativa sobrecarga de espacio.

Dicho esto, los árboles AVL y RB-árboles son mucho más sencillas de implementar si no es necesario para apoyar la eliminación. De izquierda árbol rb puede caber en 50 o más líneas de código. Ver http://www.cs.princeton.edu/~rs/talks/LLRB/ (por Sedgewick)

Respondida el 19/04/2011 a las 05:31
fuente por usuario

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