Ordenamiento - Sorting - Sortin

Documentos relacionados
Sorting++ Herman Schinca. Clase de Junio de 2011

Análisis asintótico: algoritmos recursivos e iterativos

Tema: Métodos de Ordenamiento. Parte 1.

Notación Asintótica 2

MÉTODOS NUMÉRICOS PARA INGENIERÍA ERROR GUIÓN PARA EL TEMA CONCEPTOS BÁSICOS

Análisis probabilístico y Algoritmos Aleatorizados

Planificaciones Algoritmos y Programación I. Docente responsable: AZCURRA DIEGO ANDRES. 1 de 5

Algoritmos. Medios de expresión de un algoritmo. Diagrama de flujo

Integrantes. Leonardo Herrera Cristian Fernandez Jorge A Mondragón. Análisis y Diseño de Algoritmos. Docente Diana Mabel Díaz Herrera.

Cómo ordenar una lista de números?

ECUACIONES.

Práctica 4 El algoritmo QuickSort, comparación de algoritmos de ordenación

Objetivos de la sesión. Aplicación de consola 7/30/11. Código con que se inicia un programa en Visual C# (aplicación de consola)

Conjuntos disjuntos (Relaciones de equivalencia)

Estructuras Secuénciales

Agradecimientos. Nota de los autores. 1 Problemas, algoritmos y programas 1

ALGORITMOS DE ORDENACIÓN Y BÚSQUEDA

Algoritmos y Programación Clase 8

=SI(condición;valor_si_verdadero;valor_si_falso)

Computación Aplicada. Universidad de Las Américas. Aula virtual de Computación Aplicada. Módulo de Excel 2013 LIBRO 8

Herramientas de Programación. M.C. Juan Carlos Olivares Rojas

Estructuras de Datos. Estructuras de Datos para Conjuntos Disjuntos

Problemas de Recursividad

Algebra Lineal XXVI: La Regla de Cramer.

UNIDAD DE APRENDIZAJE I

7.4. UTILIDADES DE LAS PILAS

Estructuras de Repetición (Hacer-Mientras)

Conceptos básicos de bases de datos

Instrucciones para descargar el archivo de la prueba de diagnóstico.

Taller de Resolución de Problemas Computacionales

1. Sea A una matriz cuadrada n x n, conteniendo la siguiente información en cada fila i. para 1 j k n para k

Capítulo 7 OPERADORES Y EXPRESIONES. Presentación resumen del libro: "EMPEZAR DE CERO A PROGRAMAR EN lenguaje C"

Instituto Tecnológico de Celaya

Árboles de sufijos. Algoritmia para problemas difíciles Elvira Mayordomo

Profesor(a): M. A. Zeferino Galarza Hernández

Analisis de algoritmos

Algunas funciones intrínsecas útiles para trabajar con números en Fortran 90

Tabla de Símbolos. Programación II Margarita Álvarez

Programación de Computadores 4 Iteraciones y Decisiones. Prof. Javier Cañas. Universidad Técnica Federico Santa María Departamento de Informática

Primer Parcial de Programación 3 (1/10/2009)

Estructuras de Control

Curso de Estadística Básica

DES: Programa(s) Educativo(s): Tipo de materia: Clave de la materia: Semestre: Área en plan de estudios:

PLANIFICACIÓN DE LA SESIÓN DE APRENDIZAJE. Descubrimos los criterios de divisibilidad

Métodos numéricos para Ecuaciones Diferenciales Ordinarias

Complejidad de Algoritmos

XQuery. Un lenguaje de consulta para XML.

Resolución de Problemas y Algoritmos Clase 6: Repetición (continuación)

Algoritmos y Estructuras de Datos II

Programación de Sistemas

Algoritmos de Búsqueda y Ordenación. Rosalía Laza Fidalgo. Departamento de Informática. Universidad de Vigo

TECNICO SUPERIOR EN INFORMÁTICA EMPRESARIAL MÓDULO INTRUCCIONAL

Funciones BUSCAR, BUSCARV y BUSCARH

Conclusiones. Particionado Consciente de los Datos

Ejemplo: El problema de la mochila. Algoritmos golosos. Algoritmos y Estructuras de Datos III. Segundo cuatrimestre 2013

EJEMPLOS DE PREGUNTAS Y ORIENTACIONES GENERALES SEGUNDO CICLO DE EDUCACIÓN MEDIA PRUEBA MATEMÁTICA 2013

VI Colas de prioridad

Profesorado de Nivel Medio y Superior en Biología Matemática - 1º Cuatrimestre Año 2013 FUNCIÓN CUADRÁTICA

Clases y Objetos. Informática II Ingeniería Electrónica

Percentil q (p q ) Si en este conjunto de valores se quiere encontrar el percentil 20, la solución gráfica es muy simple

Semana de las Matemáticas e Ingeniería. Desarrollo de algoritmos recursivos empleando la aplicación PseInt

Programación en java. Estructuras algorítmicas

Introducción al tipo Vector Cómo guardar una colección de datos conceptualmente relacionados? - almacenar los 100 primeros números primos, - al

Capítulo 1: Fundamentos: Lógica y Demostraciones Clase 3: Relaciones, Funciones, y Notación Asintótica

LENGUAJE DE PROGRAMACION UNO.

La clase String

ALGEBRA 1- GRUPO CIENCIAS- TURNO TARDE- Enteros

Fundamentos de Programación Visual Basic

Actividad colaborativa Ejercicios de programación Programación básica C++

Materia: Matemática de Octavo Tema: Conjunto Q (Números Racionales)

WorkManager E.D. Manual guía de usuario Diseñador de formularios

TP N 4 Redirección de entrada y salida estándar

Generación de Variables Aleatorias. UCR ECCI CI-1453 Investigación de Operaciones Prof. M.Sc. Kryscia Daviana Ramírez Benavides

FICHAS DE ESTUDIO No.1. Definición del conjunto N NOMBRE FECHA

Generación de variables aleatorias continuas Método de la transformada inversa

TUTORIAL SOBRE HOJAS DE CALCULO

1. Conceptos básicos sobre el problema en cuestión y cuestiones afines. 2. Formulación de los correspondientes algoritmos y su pseudocódigo.

ESTADÍSTICA DESCRIPTIVA

UNIVERSIDAD AUTÓNOMA DE YUCATÁN FACULTAD DE MATEMÁTICAS

Relación de prácticas de la asignatura METODOLOGÍA DE LA PROGRAMACIÓN Segundo Cuatrimestre Curso º Grado en Informática

NOTACIÓN O GRANDE. El análisis de algoritmos estima el consumo de recursos de un algoritmo.

A veces, un número no se dividirá equitativamente. Cuando esto sucede, tenemos un resto.

Sucesiones Introducción

Programando solución de desigualdades en Excel

Preparación para Álgebra 1 de Escuela Superior

<tipo> Tipo de dato de los elementos del vector

Materia: Matemática de Octavo Tema: Raíces de un polinomio. Marco teórico

Definición de Memoria

Capítulo 3: Técnicas de Conteo Clase 2: Permutaciones y Combinaciones, Coeficientes Binomiales y Aplicaciones a Probabilidad Discreta

Problema - Sumando Digitos

Problema 3 Sea ABC un triángulo acutángulo con circuncentro O. La recta AO corta al lado BC en D. Se sabe que OD = BD = 1 y CD = 1+

Modelo relacional. El modelo relacional

BUSCARV PLANILLA ELECTRÓNICA. Excel

Metodología y Tecnología de la Programación

Simulación I. Investigación Operativa, Grado en Estadística y Empresa, 2011/12

Inicio del programa. Entrada de datos. Proceso de datos. Salida de datos. Fin del programa

Transcripción:

Ordenamiento - Sorting - Sortin Christian Russo Departamento de Computación, Facultad de Ciencias Exactas y Naturales, Universidad de Buenos Aires 13 de Mayo de 2016

Algunas aclaraciones Este tipo de ejercicios requieren práctica y paciencia.

Algunas aclaraciones Este tipo de ejercicios requieren práctica y paciencia. También requieren que se sepa un poco de estructuras de datos.

Algunas aclaraciones Este tipo de ejercicios requieren práctica y paciencia. También requieren que se sepa un poco de estructuras de datos. NO requieren que diseñen dichas estructuras (a menos que no sean las de siempre, como cuando hacen los ejercicios de elección de estructuras).

Algunas aclaraciones Este tipo de ejercicios requieren práctica y paciencia. También requieren que se sepa un poco de estructuras de datos. NO requieren que diseñen dichas estructuras (a menos que no sean las de siempre, como cuando hacen los ejercicios de elección de estructuras). Cada ĺınea de código que escriban deberá estar acompañada de la correspondiente complejidad temporal.

Algunas estrategias Utilizar algoritmos ya conocidos (Merge Sort, Quick Sort, etc.)

Algunas estrategias Utilizar algoritmos ya conocidos (Merge Sort, Quick Sort, etc.) Intuir algo de la complejidad pedida.

Algunas estrategias Utilizar algoritmos ya conocidos (Merge Sort, Quick Sort, etc.) Intuir algo de la complejidad pedida. Revelación divina.

Un pequeño repaso Insertion Sort, O(n 2 ) Se va insertando en el lugar correspondiente cada elemento en un arreglo ordenado. Son n elementos e insertar ordenado cuesta O(n)

Un pequeño repaso Insertion Sort, O(n 2 ) Se va insertando en el lugar correspondiente cada elemento en un arreglo ordenado. Son n elementos e insertar ordenado cuesta O(n) Selection Sort, O(n 2 ) Busca el mínimo elemento entre una posición i y el final de la lista, lo intercambia con el elemento de la posición i e incrementa i. Buscar el menor cuesta O(n) y son n elementos.

Un pequeño repaso Insertion Sort, O(n 2 ) Se va insertando en el lugar correspondiente cada elemento en un arreglo ordenado. Son n elementos e insertar ordenado cuesta O(n) Selection Sort, O(n 2 ) Busca el mínimo elemento entre una posición i y el final de la lista, lo intercambia con el elemento de la posición i e incrementa i. Buscar el menor cuesta O(n) y son n elementos. Bubble Sort, O(n 2 ) Semejante a Selection Sort, solo que mientras busca el menor va moviendo su candidato a menor para adelante.

Un pequeño repaso Insertion Sort, O(n 2 ) Se va insertando en el lugar correspondiente cada elemento en un arreglo ordenado. Son n elementos e insertar ordenado cuesta O(n) Selection Sort, O(n 2 ) Busca el mínimo elemento entre una posición i y el final de la lista, lo intercambia con el elemento de la posición i e incrementa i. Buscar el menor cuesta O(n) y son n elementos. Bubble Sort, O(n 2 ) Semejante a Selection Sort, solo que mientras busca el menor va moviendo su candidato a menor para adelante. MergeSort, O(n log n) Algoritmo recursivo que ordena sus dos mitades y luego las fusiona.

Un pequeño repaso Insertion Sort, O(n 2 ) Se va insertando en el lugar correspondiente cada elemento en un arreglo ordenado. Son n elementos e insertar ordenado cuesta O(n) Selection Sort, O(n 2 ) Busca el mínimo elemento entre una posición i y el final de la lista, lo intercambia con el elemento de la posición i e incrementa i. Buscar el menor cuesta O(n) y son n elementos. Bubble Sort, O(n 2 ) Semejante a Selection Sort, solo que mientras busca el menor va moviendo su candidato a menor para adelante. MergeSort, O(n log n) Algoritmo recursivo que ordena sus dos mitades y luego las fusiona. QuickSort, O(n 2 ) Elige un pivot y separa los elementos entre los menores y los mayores a él. Luego, se ejecuta el mismo procedimiento sobre cada una de las partes.

Un pequeño repaso Insertion Sort, O(n 2 ) Se va insertando en el lugar correspondiente cada elemento en un arreglo ordenado. Son n elementos e insertar ordenado cuesta O(n) Selection Sort, O(n 2 ) Busca el mínimo elemento entre una posición i y el final de la lista, lo intercambia con el elemento de la posición i e incrementa i. Buscar el menor cuesta O(n) y son n elementos. Bubble Sort, O(n 2 ) Semejante a Selection Sort, solo que mientras busca el menor va moviendo su candidato a menor para adelante. MergeSort, O(n log n) Algoritmo recursivo que ordena sus dos mitades y luego las fusiona. QuickSort, O(n 2 ) Elige un pivot y separa los elementos entre los menores y los mayores a él. Luego, se ejecuta el mismo procedimiento sobre cada una de las partes. HeapSort, O(n + n log n)) = O(n log n) Arma el Heap en O(n) y va sacando los elementos ordenados pagando O(log n) cada vez.

Primer ejercicio: Una planilla de notas Considere la siguiente estructura para guardar las notas de un alumno de un curso: alumno es tupla nombre: string, sexo: FM, puntaje: Nota donde FM es enum{masc, fem} y Nota es un nat no mayor que 10. Se necesita ordenar un arreglo(alumno) de forma tal que todas las mujeres aparezcan al inicio de la tabla según un orden creciente de notas y todos los varones aparezcan al final ordenados de la misma manera.

Primer ejercicio: Una planilla de notas Por ejemplo: Entrada Ana F 10 Juan M 6 Rita F 6 Paula F 7 Jose M 7 Pedro M 8

Primer ejercicio: Una planilla de notas Por ejemplo: Entrada Salida Ana F 10 Rita F 6 Juan M 6 Paula F 7 Rita F 6 Ana F 10 Paula F 7 Juan M 6 Jose M 7 Jose M 7 Pedro M 8 Pedro M 8

Primer ejercicio: Una planilla de notas a) Proponer un algoritmo de ordenamiento ordenaplanilla(in/out p: arreglo(alumno)) para resolver el problema descripto anteriormente y cuya complejidad temporal sea O(n) en el peor caso, donde n es la cantidad de elementos del arreglo. Asumir que el largo de los nombres está acotado por una constante. Justificar.

Primer ejercicio: Una planilla de notas Che, No era que lo mejor que podíamos lograr en términos de complejidad cuando queríamos hacer ordenamiento era O(n log n)?

Primer ejercicio: Una planilla de notas Che, No era que lo mejor que podíamos lograr en términos de complejidad cuando queríamos hacer ordenamiento era O(n log n)? Sí y no Sí, hablando de algoritmos de ordenamiento comparativos (la demo la vieron en la teórica). No, en el caso en el cual dispongamos de información extra sobre la entrada.

Primer ejercicio: Una planilla de notas Che, No era que lo mejor que podíamos lograr en términos de complejidad cuando queríamos hacer ordenamiento era O(n log n)? Sí y no Sí, hablando de algoritmos de ordenamiento comparativos (la demo la vieron en la teórica). No, en el caso en el cual dispongamos de información extra sobre la entrada. alumno es tupla nombre: string, sexo: FM, puntaje: Nota donde FM es enum{masc, fem} y Nota es un nat no mayor que 10. Vamos al pizarrón...

Primer ejercicio: Lo importante alumno es tupla nombre: string, sexo: FM, puntaje: Nota donde FM es enum{masc, fem} y Nota es un nat no mayor que 10. Entrada Salida Ana F 10 Rita F 6 Juan M 6 Paula F 7 Rita F 6 Ana F 10 Paula F 7 Juan M 6 Jose M 7 Jose M 7 Pedro M 8 Pedro M 8 Complejidad temporal O(n) en el peor caso, donde n es la cantidad de elementos del arreglo. Strings acotados. Las mujeres van primero. Hay que ordenar por puntaje.

Bucket Sort Idea: Separar los elementos en distintas clases que tienen un orden semejante al buscado. Ordenar cada uno de los elementos de la clase. Concatenar los resultados. Algorithm 1 BUCKET-SORT(A) n length[a] for i [1..n] do insert A[i] into list B[n A[i]/M] end for for i [0..n 1] do sort list B[i] with insertion sort end for concatenate lists B[0],B[1],..., B[n 1] together Figura: Pseudocódigo del algoritmo bucket sort [Cormen, p. 153]

Primer ejercicio: Una planilla de notas b) Supongan ahora que la planilla original ya se encuentra ordenada alfabéticamente por nombre. Pueden asegurar que si existen dos o más mujeres con igual nota, entonces las mismas aparecerán en orden alfabético en la planilla ordenada?

Estabilidad Sorting se hace en base a una relación de orden. Puede pasar que para esa relación dos cosas seas equivalentes. Si nuestro algoritmo preserva el orden original entre las cosas equivalentes, decimos que es estable.

Primer ejercicio: Una planilla de notas b) Supongan ahora que la planilla original ya se encuentra ordenada alfabéticamente por nombre. Pueden asegurar que si existen dos o más mujeres con igual nota, entonces las mismas aparecerán en orden alfabético en la planilla ordenada?.

Primer ejercicio: Una planilla de notas b) Supongan ahora que la planilla original ya se encuentra ordenada alfabéticamente por nombre. Pueden asegurar que si existen dos o más mujeres con igual nota, entonces las mismas aparecerán en orden alfabético en la planilla ordenada?. Sí! Nuestro algoritmo es estable!

Primer ejercicio: Una planilla de notas b) Supongan ahora que la planilla original ya se encuentra ordenada alfabéticamente por nombre. Pueden asegurar que si existen dos o más mujeres con igual nota, entonces las mismas aparecerán en orden alfabético en la planilla ordenada?. Sí! Nuestro algoritmo es estable! c) Dar un algoritmo que ordene igual que antes, pero ante igual sexo y nota, los ordene por orden alfabético. Dar su complejidad y justificar. Pista: Por lo visto en b), podríamos usar el algoritmo de a).

RADIX Sort Está pensado para cadenas de caracteres o tuplas, donde el orden que se quiera dar dependa principalmente de un dígito, y en el caso de empate se tengan que revisar los otros. La idea es usar un algoritmo estable e ir ordenado por dígito. Por lo tanto, se ordena del dígito menos significativo al más importante. Algorithm 2 RADIX-SORT(A, d) for i [1..d] do stable sort array A on digit i end for Figura: Pseudocódigo del algoritmo RADIX sort [Cormen, p. 148]

Primer ejercicio: Una planilla de notas d) Si en los buckets de la parte a) hubieramos ordenado las cadenas de la misma manera, La complejidad hubiese cambiado?

Primer ejercicio: Una planilla de notas d) Si en los buckets de la parte a) hubieramos ordenado las cadenas de la misma manera, La complejidad hubiese cambiado? No! La complejidad de RADIX Sort es lineal sobre la cantidad de cadena, si el largo de las cadenas y sus digitos están acotados.

Primer ejercicio: Conclusiones La cota O(n log n) corresponde a los algoritmos de ordenamiento basados en comparación.

Primer ejercicio: Conclusiones La cota O(n log n) corresponde a los algoritmos de ordenamiento basados en comparación. El algoritmo que implementamos es estable.

Primer ejercicio: Conclusiones La cota O(n log n) corresponde a los algoritmos de ordenamiento basados en comparación. El algoritmo que implementamos es estable. Quieren ordenar tuplas, strings, números? RADIX Sort puede servir.

Primer ejercicio: Conclusiones La cota O(n log n) corresponde a los algoritmos de ordenamiento basados en comparación. El algoritmo que implementamos es estable. Quieren ordenar tuplas, strings, números? RADIX Sort puede servir. PERO es muy importante poder tratar a la entrada como una lista o tupla.

Primer ejercicio: Conclusiones La cota O(n log n) corresponde a los algoritmos de ordenamiento basados en comparación. El algoritmo que implementamos es estable. Quieren ordenar tuplas, strings, números? RADIX Sort puede servir. PERO es muy importante poder tratar a la entrada como una lista o tupla. Sirve cuando la cantidad de elementos a ordenar es muy grande en comparación al tamaño de cada elemento en particular.

Primer ejercicio: Conclusiones La cota O(n log n) corresponde a los algoritmos de ordenamiento basados en comparación. El algoritmo que implementamos es estable. Quieren ordenar tuplas, strings, números? RADIX Sort puede servir. PERO es muy importante poder tratar a la entrada como una lista o tupla. Sirve cuando la cantidad de elementos a ordenar es muy grande en comparación al tamaño de cada elemento en particular. Los algoritmos estables se pueden usar juntos sin muchos problemas.

Primer ejercicio: Conclusiones La cota O(n log n) corresponde a los algoritmos de ordenamiento basados en comparación. El algoritmo que implementamos es estable. Quieren ordenar tuplas, strings, números? RADIX Sort puede servir. PERO es muy importante poder tratar a la entrada como una lista o tupla. Sirve cuando la cantidad de elementos a ordenar es muy grande en comparación al tamaño de cada elemento en particular. Los algoritmos estables se pueden usar juntos sin muchos problemas. Si tenemos una jerarquía para ordenar tenemos que ordenar primero por el criterio menos importante e ir subiendo.

Recreo!

Segundo ejercicio: La distribución loca Se desea ordenar los datos generados por un sensor industrial que monitorea la presencia de una sustancia en un proceso químico. Cada una de estas mediciones es un número entero positivo. Dada la naturaleza del proceso se sabe que, para una secuencia de n mediciones, a lo sumo n valores están fuera del rango [20, 40]. Proponer un algoritmo O(n) que permita ordenar ascendentemente una secuencia de mediciones y justificar la complejidad del algoritmo propuesto.

Segundo ejercicio: La distribución loca Se desea ordenar los datos generados por un sensor industrial que monitorea la presencia de una sustancia en un proceso químico. Cada una de estas mediciones es un número entero positivo. Dada la naturaleza del proceso se sabe que, para una secuencia de n mediciones, a lo sumo n valores están fuera del rango [20, 40]. Proponer un algoritmo O(n) que permita ordenar ascendentemente una secuencia de mediciones y justificar la complejidad del algoritmo propuesto. Vamos al pizarrón...

Segundo ejercicio: Lo importante Arreglo de n enteros positivos De los n elementos, n están afuera del rango [20, 40] Quieren O(n)

Segundo ejercicio: Conclusiones Está bueno ver la forma que tiene la entrada en un problema de ordenamiento A veces se pueden combinar distintos algoritmos de ordenamiento para lograr los objetivos.

Estabilidad, la revancha Bucket Sort es estable, si los algoritmos que se usan para cada balde son estables.

Estabilidad, la revancha Bucket Sort es estable, si los algoritmos que se usan para cada balde son estables. RADIX Sort es estable, aunque depende del algoritmo subyacente.

Estabilidad, la revancha Bucket Sort es estable, si los algoritmos que se usan para cada balde son estables. RADIX Sort es estable, aunque depende del algoritmo subyacente. Counting Sort es estable, bien programado.

Figura: Pseudo code of the counting sort algorithm [Cormen, p. 148] Counting Sort Este algoritmo se puede usar con cosas más generales que números. Es necesario tener una función S que reciba cosas del tipo de A y devuelva una posición en un arreglo. K representa el valor máximo de la función S sobre todos los elementos del arreglo. Algorithm 3 COUNTING-SORT(A, B, k) 1: for i [0..k] do 2: C[i] 0 3: end for 4: for j [1..length[A]] do 5: C[S(A[j])] C[S(A[j])] + 1 6: end for 7: for i [1..k] do 8: C[i] C[i] + C[i 1] 9: end for 10: for j [length[a].,1] do 11: B[C[S(A[j])]] A[j] 12: C[S(A[j])] C[S(A[j])] 1 13: end for

Tercer ejercicio: Chan chan Se tienen k arreglos de naturales A 0,..., A k 1. Cada uno de ellos está ordenado de forma creciente. Se sabe que ningún natural está dos veces en el mismo arreglo y no aparece el mismo natural en dos arreglos distintos. Además, se sabe que para todo i el arreglo A i tiene exactamente 2 i elementos. Dar un algoritmo que devuelva un arreglo B de n = k 1 i=0 2i = 2 k 1 elementos, ordenado crecientemente, de manera que un natural está en B si y sólo si está en algún A i (o sea, B es la unión de los A i y está ordenado).

Tercer ejercicio: Chan chan a) Escribir el pseudocódigo de un algoritmo que resuelva el problema planteado. El algoritmo debe ser de tiempo lineal en la cantidad de elementos en total de la entrada, es decir O(n). b) Calcular y justificar la complejidad del algoritmo propuesto.

Tercer ejercicio: Lo importante k arreglos de naturales A 0,..., A k 1. Cada uno de ellos está ordenado de forma creciente. Dado un arreglo A i, este tiene 2 i elementos. Si un número está en un arreglo de la entrada, no está los demás. Se nos pide O(n), donde n = k 1 i=0 2i = 2 k 1 (importante).

Cuarto ejercicio: Ejercicio 18 Dar un algoritmo que ordene un arreglo de n enteros positivos menores que n en tiempo O(n).

Cuarto ejercicio: Ejercicio 18 Dar un algoritmo que ordene un arreglo de n enteros positivos menores que n en tiempo O(n). CountingSort(A, n, n) //Complejidad: O(n+n) = O(n)

Cuarto ejercicio: Ejercicio 18 Dar un algoritmo que ordene un arreglo de n enteros positivos menores que n k en tiempo O(kn). Pista: Usar varias llamadas al m anterior.

Cuarto ejercicio: Ejercicio 18 Dar un algoritmo que ordene un arreglo de n enteros positivos menores que n k en tiempo O(kn). Pista: Usar varias llamadas al m anterior. RadixSort(A, n, n) //A: arreglo de entrada, n: cantidad de elementos, m: radio o base de los elementos

Cuarto ejercicio: Ejercicio 18 RadixSort(A, n, m) //A: arreglo de entrada, n: cantidad de elementos, m: radio o base de los elementos Algorithm 4 RadixSort(A, n, m) B CrearArreglo(n)//se crea un arreglo de tuplas (R,Q,O) (resto, cociente, Original) : O(n) for i [1..n 1] do B[i].Q A[i] B[i].O A[i] end for termine false while not termine do termine true for i [1..n 1] do B[i].R B[i].Q mod m B[i].Q B[i].Q div m termine termine and (B[i].Q == 0) end for CountingSort(B.R, n, m) // ordena por R de forma estable: O(n+m) end while return B.O

Conclusiones Es importante justificar de manera correcta la complejidad, ya que es condición necesaria para la aprobación del ejercicio ( Y en la vida está bueno saber que lo que uno usa se comporta como se cree!). Consulten. Hagan las prácticas. Estudien.

Preguntas? Figura: La policía sabía que asuntos internos le tendía una trampa?

Algunas cosas para leer, ver y/o escuchar T. H. Cormen, C. E. Leiserson, R.L Rivest, and C. Stein. Introduction to Algorithms. MIT Press, 2nd edition edition, August 2001. Un paper donde tratan las complejidades de los algoritmos vistos en clase. Además, los explican de manera clara. http://arxiv.org/pdf/1206.3511.pdf Canal de YouTube donde se mezclan danzas clásicas y los algoritmos de Sorting más comunes (IMPERDIBLE) http://www.youtube.com/user/algorythmics Otros algoritmos de Sorting (o no tan sorting) http://xkcd.com/1185/ GRAN banda under argentina http://www.monstruito.com.ar/