Login Barrapunto
Métodos de ordenación y búsqueda en C/C++
el_kbk nos cuenta: «Acá ando recopilando lo más actual sobre programación estructurada en C y C++. Aunque a la hora de llegar a la sección de "Búsquedas" y "Ordenación" me topé con que hay muchos metodos, unas más rápidas y efectivas que otras, y las que ya de plano no se usan. Me gustaría saber su opinión sobre qué métodos de ordenación y búsqueda conocen y dónde puedo encontrar información para seguir adelante con la recopilación. Se aceptan todo tipo de comentarios ;o)»
Este hilo ha sido archivado.
No pueden publicarse nuevos comentarios.
Métodos de ordenación y búsqueda en C/C++
|
Log in/Crear cuenta
| Top
| 60 comentarios
| Buscar hilo
Y recuerda: Los comentarios que siguen pertenecen a las personas que los han enviado. No somos responsables de los mismos.

Knuth y Brassard
(Puntos:3, Informativo)( http://www.elpauer.org/ )
No hay nada que opinar, está todo (o casi todo) inventado.
Sólo tienes que consultar las dos fuentes clásicas: The Art of Computer Programming [stanford.edu], the Donald E. Knuth [stanford.edu] y Fundamentos de algoritmia [barrapunto.com], the Brassard y Bratley [prenhall.com]
Quicksort y punto
(Puntos:2, Interesante)Me extraña que esto sea un tema a debatir
(Puntos:3, Informativo)Una buena partida es:
(Puntos:2, Informativo)( http://itchyblog.livejournal.com/ )
Salu2
____
Keep your country green... fuck a frog!
Para verlos funcionando...
(Puntos:4, Informativo)( http://www.twitter.com/AitorDeLaPuente )
http://www.hci.uniovi.es/martinDocencia/Asignatura s/ordenacion.htm [uniovi.es]
Saludos.
Algoritmos de ordenación y suma de números grandes
(Puntos:2, Informativo)Breve (!) resumen de los algoritmos de ordenación
(Puntos:1, Inspirado)El asunto es más interesante de lo que parece.
(Puntos:2, Interesante)La definición clásica de los algorismos de busqueda y ordenación siempre se refieren a vectores, peró ya nadie usa vectores para guardar listas que deban ser ordenadas.
Tenemos arboles binarios de busqueda:
- Se inserta un elemento con tiempo medio logN y N en el peor caso.
- Insertar N elementos ordenados tarda N*logN
- Sueles encontrarte con el peor caso.
- Se pueden listar todos los elementos ordenados con un coste N, como un vector.
Arboles casi-balanceados:
- Como el arbol binario, peró
- Siempre la insercion y quite de elementos es logN
tries:
- Suele gastar un montón de memoria, peró son ultrarápidos. Son independientes del numero de elementos.
tablas de hash:
- Sacrificas la posibilidad de lista ordenada, peró buscar y quitar elementos te lo deja en coste medio O(1)
Veis, teniendo estas alternativas, el uso de las técnicas de ordenación clásicas és méramente anecdótico.
STL
(Puntos:2)( http://hronia.blogalia.com/ | Última bitácora: Jueves, 22 Enero de 2009, 06:57h )
___
"Tamparantán que te han visto Pepe, tamparantán que te han visto Juan"
Algoritmos de búsqueda de un solo patrón
(Puntos:2, Interesante)Yo hice mi proyecto final de carrera sobre algoritmos de búsqueda de un sólo patrón.
No se si te resultará interesante, pero por si acaso la memoria está en:
Y el código en C++ está en:
De todos modos hace años que no lo pruebo, así que igual ni compila.
Lo mejor: no pensar en ello
(Puntos:2)( http://barrapunto.com/ )
Es decir, usa la STL y no te preocupes por el algoritmo que usa: en cualquier caso será el mejor.
Por desgracia, ni la milésima parte de los que "usan" C++ saben usar la STL, ni saben hacer un programa en C++ ANSI, así que cada uno se hace su propia función de ordenación que peta por todas partes. Y luego dirá que el C++ es complicado, que si los punteros, que si gestión de memoria, etc...
Por favor: si estás pensando en reinventar un algoritmo de búsqueda y ordenación en C++, mejor usa Java o usa otra cosa, porque de C++ no sabes nada.
URL para los interesados
(Puntos:2)( http://barrapunto.com/ )
Pa que? Pa cagala?
Lo más actual en C
(Puntos:1)( http://elrenglontorcido.blogspot.com/ )
Me quedo un poco fuera de tema, pero si estás buscando lo "último" en programación en C, sería conveniente que echaras un vistazo a la GLib [gnome.org], que es la librería que lleva "por debajo" Gnome (y no me refiero a la librería gráfica, sino a la capa más baja).
La GLib, además de proporcionarte una serie de envoltorios que hacen que el manejo de memoria sea más sencillo, te permite llevar la orientación a objetos (o algo muy parecido) a C. Y por cierto, también trata muy bien la ordenación, proporcionándote funciones que ordenan listas (utilizando a-saber-que algoritmo, de forma transparente) y a las que solo les has de pasar el método de comparación que quieres usar (al estilo de Perl o Python, vamos).
No sé si será interesante para lo que estás recopilando, pero lo cierto es que se merece por lo menos un vistazo.
Re:Ya que estamos hablando de C/C++...
(Puntos:2, Informativo)( http://he11storm.net )
Programar es bueno para la salud
Re:pues hay varios
(Puntos:3, Informativo)( http://appfluence.com/priority_matrix_windows_detailed | Última bitácora: Domingo, 31 Julio de 2011, 16:58h )
Burbuja: O(N^2)
Quicksort: N*logN de media
Heapsort: O(N*logN), pero en la practica tiene unas constantes mas elevadas que quicksort, aunque asintoticamente sea mas rapido.
No me acuerdo del mergesort, pero era algo peor que quicksort. El limite teorico de un algoritmo de ordenacion es O(N*LogN), puesto que ese es el numero minimo de comparaciones que se han de hacer para asegurar la correctitud de la ordenacion. Hay variantes mas rapidas, pero se salen del modelo de maquina de Turing (computacion cuantica..., pero no se mucho de eso).
Re:pues hay varios
(Puntos:1)( http://public.danielhiga.org.ar/ | Última bitácora: Martes, 05 Febrero de 2013, 21:58h )
de cada ocho televidentes cuatro son la mitad
Re:pues hay varios
(Puntos:2, Informativo)( http://www.exactas.org/ )
.:: GNU/Janus ::.
Re:No olvides algo sobre...
(Puntos:2, Informativo)( http://jordi.molgo.com/ | Última bitácora: Miércoles, 11 Abril de 2007, 07:45h )
Esto es porque antes de buscar en el árbol tienes que construirlo ;) y esto tiene coste O(n*log(n)).
El coste total seria el coste de construir el árbol y el de realizar la búsqueda:
O(n*log(n) + log(n)), que equivale a O(n*log(n))
La vida, una hora abans [molgo.com]
bc
(Puntos:1)Re:Ya que estamos hablando de C/C++...
(Puntos:1)( file:/etc/passwd | Última bitácora: Martes, 20 Octubre de 2009, 21:17h )
En algunos casos tambien se usa base 100 o 10, cuando se necesita mantener unas condiciones de redondeo estrictas y especificadas en base 10, como por ejemplo en el caso de calculos financieros (la base 100 se toma porque es la que cabe en un byte). De hecho, algunos procesadores como los motorola 680x0 incluso tienen instruciones especificas para el manejo de numeros en base 10, usando cuatro bits por digito y almacenando 2 en cada byte.
Re:pues hay varios
(Puntos:2)( http://julipedia.blogspot.com/ )
En cuando a algoritmos más rapidos... existe uno llamado radix sort, de coste O(n), pero de aplicación bastante concreta. Una simple búsqueda en google [google.com] os dará más información. Programas como sort(1) utilizan radix sort para realizar su trabajo (al menos bajo NetBSD), disponiendo de una opción especial para usar merge sort (con archivos muy grandes).
The Julipedia [blogspot.com]
Me alegra que me haga esa pregunta...
(Puntos:1)( http://barrapunto.com/ )
Se almacenan los numeros en arrays de char y se pasan a listas enlazadas (asignacion dinamica de memoria) donde cada nodo contiene un int con un digito y un puntero al siguiente nodo
El limite? la memoria del pc..
SGAE [internautas.org]