Algoritmos de ordenamiento con baile húngaro, rumano y gitano

Hay muchas cosas que tenemos tan incorporadas, tan automatizadas, que las creemos obvias. Si, en cambio, tuviésemos que explicarle a alguien cómo se suma, nos daríamos cuenta de que sumar no es una habilidad innata. Hay que ir más atrás y contar dos conjuntos de piedritas para saber cuánto suma el conjunto completo. El mismo hecho de contarlas tampoco es innato, hay que aprender la secuencia e ir identificando cada piedrita con un número. Aprender a contar piedritas es el algoritmo más básico que se aprende. A medida que ganamos experiencia con él, lo usamos para sumar piedritas, restar piedritas. Algunos terminan tirando piedritas en el estadio y no avanzan mucho más.
En esta nota, veremos algunos algoritmos bastante más elaborados explicados con danza húngara, rumana y gitana. Eso no se ve todos los días.
Las calculadoras también siguen algoritmos, y actualmente nadie se pregunta qué hace la maquinita si preguntamos por la raíz cúbica de 100. Por dentro, como adivinará el lector, se sigue un algoritmo que converge al resultado. Pasa lo mismo con los lenguajes de programación, que traen esas y muchas otras funciones ya incorporadas y casi nadie se pregunta cómo lo hacen. Sólo buscamos en el índice de funciones a ver si ya existe. ¿Para qué, si alguien ya lo inventó?
Bueno, la verdad es que cada cierto tiempo nacen nuevos lenguajes de programación, o nuevos compiladores para los que ya existen. La gente detrás de esos inventos debe replantearse la manera más eficiente de sumar, transponer, invertir y diagonalizar matrices, maximizar y minimizar y muchas otras tareas. Es como reinventar la matemática de cero para enseñársela al autómata y hacerlo trabajar rápido, con pocos recursos, estabilidad y precisión.
Uno de los algoritmos más estudiados, por la multiplicidad de soluciones y el comportamiento variable en relación a la cantidad de elementos de un conjunto, es el algoritmo de ordenamiento. Algunos son muy rápidos en conjuntos pequeños, pero se vuelven lentísimos conforme aumenta la población. Otros sólo tienen sentido cuando se trata de conjuntos grandes pero son muy aparatosos para ordenar 5 elementos.
En el sitio I, Programmer, publicaron ejemplos de cómo funcionan los algoritmos de ordenamiento usando danzas típicas de Europa del Este para ilustrarlos. Primero el más simple, el Bubble Sort. Se recorre el conjunto intercambiando de posición los elementos que no están en el orden correcto. El algoritmo “acompaña” al último elemento que cambió a una posición más alta, hasta encontrar un elemento mayor para a éste, y así va quedándose con el mayor hasta alcanzar el final del conjunto. Luego empieza de nuevo y, si al terminar el recorrido no hay modificaciones, entonces ha terminado.
Segundo, Shell Sort, es como el anterior pero compara individuos no necesariamente adyacentes.
El Insert Sort opera en principio como el Bubble Sort, pero la secuencia no acompaña al mayor elemento que ha cambiado de posición sino que lo deja en pausa y primero comprueba si el elemento que ha descendido una posición debe seguir descendiendo. Cuando termina esa comprobación vuelve al elemento mayor que había dejado en pausa. El siguiente es un baile rumano, algo más lineal que los húngaros.
Finalmente, el Select Sort toma un elemento que será el protagonista y lo va comparando con el resto del conjunto. Si encuentra un elemento menor, intercambian posiciones y el menor pasa a ser el protagonista. Si un protagonista recorre todo el conjunto sin encontrar ningún número mayor, significa que está en la posición correcta y el protagonismo pasa al siguiente. Este algoritmo no es más caótico que los otros, pero el baile gitano elegido para representarlo si es bien desordenado:
Faltaron los dos algoritmos más eficientes para conjuntos grantes: el Quick Sort, que usa un pivote para subdividir el conjunto y ordenar en paralelo, y el Merge Sort de John Von Neumann, que también divide para hacer subrutinas de ordenamiento en paralelo. Confiamos en que los lectores lo intentarán en su próximo cumpleaños.
Por mientras, los integrantes del instituto Syntax Error de FayerWayer (son los de la sala del fondo) están trabajando para expandir este tipo de demostraciones y así utilizar escenas de la vida cotidiana para acercar a la gente común a la ciencia. Según otras interpretaciones, sería una manera de utilizar la ciencia para acercar la vida cotidiana a los informáticos.
En nuestros próximos proyectos, usaremos el mosh pit de un concierto de Anthrax para representar el movimiento browniano, el juego “a parir la chancha” para ejemplificar la fisión atómica y las teleseries chilenas para mostrar la función str_replace, porque con suerte le cambian nombre a los personajes antes de copiar un libreto.
Link: Sorting algorithms as dances (I, Programmer)
La Televisión Digital Terrestre en Latinoamérica
El plan de Facebook para monetizar su producto
Yahoo! lanza Axis, su propio navegador para móv...
Cámaras Wi-Fi de Samsung a primera vista
Un sitio web lucha contra la monopolización de ...
Google no infringió las patentes de Oracle con ...
Windows 8 bootea tan rápido que no da tiempo al...
Detrás del Community Manager: ¿Cómo es realment...
36 Comentarios
Algoritmos de ordenamiento con baile húngaro, rumano y gitano
Las húngaras, rumanas, checas y todas esas "niñas" de Europa oriental LA LLEVAN TODO EL RAAATO! jajaja no sé si me entienden ;)
ResponderAhora me siento mas NERD.
Me dieron ganas de programar y escuchar radiokiller e inna mientras lo hago.
Yo no me siento nerd por que no entendi nada de lo que leí y ví xD!!! ajajjajajaja
esa es la magia de estudiar diseño.... no entender matematicas xD
Wn... si hubiera tenido eso en estructura de datos, me hubiera costado menos entenderlo, jajajaj
ResponderA mí me enseñaron algoritmos de ordenamiento en "Algoritmos". En "Estructuras de datos" me enseñaron estructuras de datos.
jajajaja.... lo mismo digo yo...
en mi curso nos hicieron pasar adelante y ordenarnos quicksortmente, pero sin baile :( igual aprendi :P
@Lucho ... a mi me lo enseñaron en Algoritmos y Estructuras de Datos O:
y creia que ya habia visto todo .... XD
Responderla kgo jamas espere encontrarme con algo como esto....
ResponderSi en el ramo de Estructura de Datos me hubieran mostrado estos videos para explicarme los métodos de ordenamiento, me habria ahorrado unas cuantas horas de lectura para entenderlos...
ResponderMe hubiese gustado ver un quicksort !
Respondero un Merge-sort...
O un random sort http://en.wikipedia.org/wiki/Random_sort
mi favorito hubiera sido un poco mas fome: intelligent design sort http://www.dangermouse.net/esoteric/intelligentdesignsort.html
Ahora me doy cuenta de que el random sort es igual al juego de las sillas musicales, en que se vuelve a empezar si los jugadores no quedan ordenados.
y jugar el Wii sport re-sort
el costo asociado del bublesort en el peor y mejor de los casos es N^2 en todos los algoritmos lo que interesa es el tiempo de ejecucion y la cantidad de memoria que estos ocuparan para eso se usan cotas para determinar cuando terminara
Responderen general los mejores en tiempo so los NlogN los del principio divide y venceras como el QuickSort
xD
ya y?.. querias demostrar conocimiento?, la respuesta a una pregunta que nunca se hizo, cuéntanos mas.....
cool bro!
tell us moar!
aps pero el QuickSort no es el mejor siempre porque es inestable ,es decir cuando hay numeros repetidos este interactua con estos en ves de omitirlos y tambien la degeneracion como una piramide inclinada cuando los datos estan ordenados xD
ResponderNo soy programador, pero siempre quise entender a los algoritmos.
ResponderGracias por este tipo de demostraciones
http://www.sorting-algorithms.com/
Cuidado que a mí no me funcionó en Firefox pero sí en IE.
con esto no entiendes el concepto de algoritmos, solo entiendes como ordenar por medio de un algoritmo ya conocido (bubblesort, inserción, etc).
"sería una manera de utilizar la ciencia para acercar la vida cotidiana a los informáticos."
ResponderJoajojoa, frase notable :D
Excelente forma de presentar los algoritmos, me encantan estos esfuerzos que permiten demostrar que el arte y la ciencia no están tan lejos
joaojajoa
no lo habia pensao... en too caso, yo ni voy al teatro.. menos a ver bailes (si hay algo que me enferma de aburrimiento es eso de danza o cosas asi.... cosa de gustos)
me siento como homero aompañando a lisa en sus cosas xD
Aguante el HeapSort gente!! hubiera estado bueno verlo en los videos
ResponderSuuuper los videos..... lo que se puede encontrar en internet jejeej
ResponderBuenisimos los algoritmos.
ResponderY Kusturika?
jaja, muy bueno la verdad....una lastima que ya lo estudié pero nunca viene mal recordarlos, ademas así se los entiende mas facil!!!....muy buena idea!! ;)
ResponderJAJAJ interesante y divertido... me hubiese encantado ver algo así cuando nos cabeceabamos tratando de entender a esa maldita burbuja.. (Que después tanto simplifica tu vida xD)
ResponderSe habrían demorado su resto si hubiesen bailado el stupid-sort, que es similar a la burbuja, pero más weona...
Responderjajaja me hizo recordar que el profe una vez nos hizo hacer lo mismo, y puede que el ordenamiento en este video no quede muy claro, pero la aparicion final es WTF!!!!! ajajajajaja
Responderhttp://www.youtube.com/watch?v=uKmHxYEzcOY
Por ahi decían que el Quick Sort no era el ordenamiento mas rapido...o que es debido a su inestabilidad. Mis queridos amigos, se equivocan.
ResponderEn el caso promedio Quick-Sort es mas rapido que su gran rival Merge-Sort, sin embargo en el peor caso la cosa es al revés. Pero el peor caso para un Quick-Sort es que el arreglo venga ya ordenado ¿poco probable no? (en ese caso correria con un orden de complejidad O(n^2) y el MS con un orden de complejidad O(nlogn)).
Por eso en las competencias de programación cuando hay que ordenar un arreglo extenso se ocupa Quick-Sort.
Saludos
FFFFFWFFTW (Felipe F. Figueroa Fagandini en Fayerwayer FFTW)
volviendo al artículo: Esto me va a servir también :D .... Eso. Responder
Deja tu Comentario