Análisis de algoritmos

Documentos relacionados
Practica 05: El problema de las N-Reinas

Practica 03: Diccionario con hashing abierto

Practica 03: Eliminación Gaussiana

Practica 07: Maquina de Turing

Practica 01:Prefijos, sufijos, subcadenasy operaciones con cadenas

Análisis de algoritmos

Practica 06:Autómata de pila de una GLC

Practica 05: Limpieza de gramáticas libres de contexto

Laboratorio 02: Ejercicios de programación en C

Métodos de ordenamiento y búsqueda en vectores

Tema 02: Algoritmia y pseudocódigo

Análisis de algoritmos

PROGRAMACIÓN ESTRUCTURADA

23. Ordenación de vectores (tablas) Diego Gutiérrez

CAPITULO II ORDENAMIENTO Y BUSQUEDA. Ivan Medrano Valencia

Universidad de Valladolid. Departamento de informática. Campus de Segovia. Estructura de datos Tema 4: Ordenación. Prof. Montserrat Serrano Montero

7.1 Consideraciones. Considere la búsqueda de un libro en una biblioteca. Considere la búsqueda de un nombre en el directorio telefónico.

Tarea 3 Búsqueda por Interpolación y Extrapolación

CC3001 Algoritmos y Estructuras de Datos Tarea 1: Algoritmos simples de ordenación

Tema 3. Análisis de costes

Unidad 4. Arreglos y Cadenas

Laboratorio 03: Ejercicios de Programación con la estructura para (for)

Métodos de Ordenamiento. Unidad VI: Estructura de datos

Tema: Métodos de Ordenamiento. Parte 1.

INDICE Prologo Capitulo 1. Algoritmos y programas Capitulo 2. La resolución de los problemas con computadoras y las herramientas de programación

Algoritmos de Ordenamiento

UNIVERSIDAD AUTÓNOMA DE AGUASCALIENTES CENTRO DE CIENCIAS BÁSICAS DEPARTAMENTO DE SISTEMAS ELECTRÓNICOS OBJETIVO GENERAL MÉTODOS DIDÁCTICOS EVALUACIÓN

Planificaciones Algoritmos y Programación I. Docente responsable: CARDOZO MARTIN MIGUEL. 1 de 8

Tema 9. Algoritmos sobre listas. Programación Programación - Tema 9: Algoritmos sobre listas

Tema 14: Arreglos estáticos en C

UNIDAD 7 Recursividad Concepto. Algoritmos recursivos. Seguimiento de la recursión. Algunos métodos recursivos de búsqueda y ordenación: M-Sort y

Ordenamiento (Sorting)

Esquema de Dividir y Vencer

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

11-Ordenar Definiciones 11.2 Selección 11.3 Intercambio 11.4 Inserción 11.5 Shellsort 11.6 Quicksort 11.7 Mergesort.

Algoritmos Iterativos de Búsqueda y Ordenación y sus tiempos

Practica 03: El convertidor analógico digital

Practica 01: Programación en C bajo Linux y funciones

Tema 10: Árbol binario de búsqueda

Capítulo. Algoritmos de ordenación y búsqueda. Contenido. Introducción

Este método se basa en buscar el elemento menor el vector y colocarlo en la primera

UNIVERSIDAD POPULAR DEL CESAR FACULTAD INGENIERIAS Y TECNOLOGICAS DEPARTAMENTO DE INGENIERIA DE SISTEMAS

METODOLOGÍA DE LA PROGRAMACIÓN. APLICACIONES EN BASIC, COBOL Y PASCAL ÍNDICE

CURSO: INGENIERÍA DE TELECOMUNICACIONES TRABAJO COLABORATIVO 2 Director de Curso: Mg. Sixto Enrique Campaña Bastidas

DISEÑO DE UN ANIMADOR DE ALGORITMOS DE BÚSQUEDA Y ORDENACIÓN ( ID2012/055 )

Tema 06: Recursividad

Tema: Métodos de Ordenamiento. Parte 1.

UNIVERSIDAD MAYOR DE SAN SIMON FACULTAD DE CIENCIAS Y TECNOLOGÍA PLAN GLOBAL COMPUTACION I

Tema 09: Convertidor Analógico Digital

SEMANA N 9 NOMBRE EXPERIENCIA: Funciones, variables y arreglos en BASH UNIDAD DE APRENDIZAJE: Introducción a los SCRIPTS

Introducción a la programación: Contenido. Introducción

Algoritmos de Ordenación

TEMA 7. ALGORITMOS DE BÚSQUEDA, ORDENACIÓN

Nombre del Documento: Formato de Planeación e Instrumentación Didáctica

CAPÍTULO 3 ESTRUCTURAS DE DATOS ESTÁTICAS

Programación I (Plan 1999) Algoritmos y Estructuras de Datos II (Plan 2009) Mgter. Oscar Adolfo Vallejos FaCENA - UNNE

Programación (PRG) PRÁCTICA 10. Algoritmos de búsqueda

Tema 12: El sistema operativo y los procesos

Nombre de la asignatura: Programación Básica. Créditos: Objetivo de aprendizaje

Tema: Programación Dinámica.

<tipo> Tipo de dato de los elementos del vector

Orden en la sala! Herman Schinca. Clase de Mayo de 2011

Proyecto 1: Algoritmos de Ordenación

UNIVERSIDAD DEL AZUAY

Tema 2 Conceptos básicos de programación. Fundamentos de Informática

1. Ecuaciones de recurrencia

La eficiencia de los programas

: Algorítmica y Estructura de Datos I

Tema 05: Características de un instrumento de medición

Fundamentos de Informática 3. Construcción de Software

Tema 05: Elementos de un programa en C

Tema 2 Introducción a la Programación en C.

Introducción. Algoritmos y Complejidad. Algoritmos y Algoritmia. Introducción. Problemas e instancias. Pablo R. Fillottrani

Práctica 1 de la Asignatura Programación y Estructuras de Datos Avanzadas Versión 1.1

Tema 04: Lenguajes de programación y el lenguaje C

Programación I. Carrera: ECM Participantes Participantes de las academias de ingeniería electrónica de los Institutos Tecnológicos.

Tema 08: TAD Árbol. M. en C. Edgardo Adrián Franco Martínez edgardoadrianfrancom

INDICE 1.1. Información y Significado 1.2. Arreglos en C 1.3. Estructura en C 1.4. Clases en C++ 2. La Pila 2.1. Definición y Ejemplos

Apuntes de Teórico de Programación 3. Apuntes de Teórico PROGRAMACIÓN 3. Greedy. Versión 1.1

Un algoritmo es una serie de pasos lógicos y organizados que describe el proceso que se debe seguir, para dar solución a un problema específico.

Tema 6. Ordenación, búsqueda e intercalación interna

Estructura de datos. Carrera: SCC Participantes

TEMA 3: El proceso de compilación, del código fuente al código máquina

TRES ALGORITMOS DE ORDENACIÓN

BENEMÉRITA UNIVERSIDAD AUTÓNOMA DE PUEBLA

Transcripción:

(Algoritmos de Ordenamiento) M. en C. Edgardo Adrián Franco Martínez http://www.eafranco.com edfrancom@ipn.mx @edfrancom edgardoadrianfrancom

Contenido Definición del problema Actividades Observaciones Reporte de práctica Rubrica de evaluación del reporte Entrega vía Web Fechas de Entrega

Definición del problema Con base en el archivo de entrada proporcionado que tiene 0,000,000 números diferentes; ordenarlo bajo los siguientes métodos de ordenamiento y comparar experimentalmente las complejidades de estos. Burbuja (Bubble Sort) Burbuja Simple Burbuja Optimizada Inserción (Insertion Sort) Selección (Selection Sort ) Shell (Shell Sort) Ordenamiento con árbol binario de búsqueda (Tree Sort) 3

Ordenamiento Burbuja Burbuja Simple Funciona revisando cada elemento de la lista que va a ser ordenada con el siguiente, intercambiándolos de posición si están en el orden equivocado. Es necesario revisar varias veces toda la lista hasta que no se necesiten más intercambios, lo cual significa que la lista está ordenada. El método de la burbuja es uno de los mas simples, es tan fácil como comparar todos los elementos de una lista contra todos, si se cumple que uno es mayor o menor a otro, entonces los intercambia de posición. Este algoritmo obtiene su nombre de la forma con la que suben por la lista los elementos durante los intercambios, como si fueran pequeñas "burbujas". También es conocido como el método del intercambio directo. 4

Burbuja Simple Análisis de algoritmos Procedimiento BurbujaSimple(A,n) para i=0 hasta n- hacer para j=0 hasta (n-)-i hacer si (A[j]>A[j+]) entonces aux = A[j] A[j] = A[j+] A[j+] = aux fin si fin para fin para fin Procedimiento El arreglo A indexa desde 0 hasta n- -- A[0,,, n-] 5

Una versión de Burbuja Optimizada Como al final de cada iteración el elemento mayor queda situado en su posición, ya no es necesario volverlo a comparar con ningún otro número, reduciendo así el número de comparaciones por iteración, además pude existir la posibilidad que realizar iteraciones de más si el arreglo ya fue ordenado totalmente. Procedimiento BurbujaOptimizada(A,n) cambios = No i=0 Mientras i< n- && cambios!= No hacer cambios = No Para j=0 hasta (n-)-i hacer Si(A[i] < A[j]) hacer aux = A[j] A[j] = A[i] A[i] = aux cambios = Si FinSi FinPara i= i+ FinMientras fin Procedimiento 6 El arreglo A indexa desde 0 hasta n- -- A[0,,, n-]

Ordenamiento por inserción Es una manera muy natural de ordenar para un ser humano, y puede usarse fácilmente para ordenar un mazo de cartas numeradas en forma arbitraria. Inicialmente se tiene un solo elemento, que obviamente es un conjunto ordenado. Después, cuando hay k elementos ordenados de menor a mayor, se toma el elemento k+ y se compara con todos los elementos ya ordenados, deteniéndose cuando se encuentra un elemento menor (todos los elementos mayores han sido desplazados una posición a la derecha) o cuando ya no se encuentran elementos (todos los elementos fueron desplazados y este es el más pequeño). En este punto se inserta el elemento k+ debiendo desplazarse los demás elementos. 7

Procedimiento Insercion(A,n) { para i=0 hasta n- hacer j=i temp=a[i] mientras(j>0) && (temp<a[j-]) hacer A[j]=A[j-] j-- fin mientras A[j]=temp fin para fin Procedimiento El arreglo A indexa desde 0 hasta n- -- A[0,,, n-] 8

Ordenamiento por selección Se basa en buscar el mínimo elemento de la lista e intercambiarlo con el primero, después busca el siguiente mínimo en el resto de la lista y lo intercambia con el segundo, y así sucesivamente. Algoritmo Buscar el mínimo elemento entre una posición i y el final de la lista Intercambiar el mínimo con el elemento de la posición i.

Procedimiento Seleccion(A,n) para k=0 hasta n- hacer p=k para i=k+ hasta n- hacer si A[i]<A[p] entonces p=i fin si fin para temp = A[p] A[p] = A[k] A[k] = temp fin para fin Procedimiento El arreglo A indexa desde 0 hasta n- -- A[0,,, n-] 0

Ordenamiento Shell El Shell es una generalización del ordenamiento por inserción, teniendo en cuenta dos observaciones:. El ordenamiento por inserción es eficiente si la entrada está "casi ordenada".. El ordenamiento por inserción es ineficiente, en general, porque mueve los valores sólo una posición cada vez. El algoritmo Shell mejora el ordenamiento por inserción comparando elementos separados por un espacio de varias posiciones. Esto permite que un elemento haga "pasos más grandes" hacia su posición esperada. Los pasos múltiples sobre los datos se hacen con tamaños de espacio cada vez más pequeños. El último paso del ordenamiento Shell es un simple ordenamiento por inserción, pero para entonces, ya está garantizado que los datos del vector están casi ordenados.

Compiladores (Análisis Léxico II - Edgardo A. Franco) Análisis de algoritmos Shell propone que se haga sobre el arreglo una serie de ordenaciones basadas en la inserción directa, pero dividiendo el arreglo original en varios sub-arreglos tales que cada elemento esté separado k elementos del anterior (a esta separación a menudo se le llama salto o gap) Se debe empezar con k=n/, siendo n el número de elementos del arreglo, y utilizando siempre la división entera (TRUNC) Después iremos variando k haciéndolo más pequeño mediante sucesivas divisiones por, hasta llegar a k=.

Procedimiento Shell(A,n) k = TRUNC(n/) mientras k >= hacer b= mientras b!=0 hacer b=0 para i=k hasta i>=n- hacer si A[i-k]>A[i] temp=a[i] A[i]=A[i-k] A[i-k]=temp b=b+ fin si fin para fin mientras k=trunc(k/) fin mientras fin Procedimiento El arreglo A indexa desde 0 hasta n- -- A[0,,, n-] 3

Ordenamiento con un Árbol binario de búsqueda El ordenamiento con la ayuda de un árbol binario de búsqueda es muy simple debido a que solo requiere de dos pasos simples.. Insertar cada uno de los números del vector a ordenar en el árbol binario de búsqueda.. Remplazar el vector en desorden por el vector resultante de un recorrido InOrden del Árbol Binario, el cual entregara los números ordenados. La eficiencia de este algoritmo esta dada según la eficiencia en la implementación del árbol binario de búsqueda, lo que puede resultar mejor que otros algoritmos de ordenamiento. 4

Procedimiento OrdenaConArbolBinario(A,n) para i=0 hasta i>=n hacer Insertar(ArbolBinBusqueda,A[i]); fin para GuardarRecorridoInOrden(ArbolBinBusqueda,A); fin Procedimiento 5

Actividades. Programar en ANSI C, cada uno de los algoritmos de ordenamiento mencionados.. Adaptar el programa para que sea capaz de recibir un parámetro n que indica el numero de enteros a ordenar a partir de un archivo con máximo 0,000,000 de números en desorden. 6 Análisis de algoritmos 4 5 6 0 5 3 7 0 3 5 4 5 6 0 5 3 7 0 3 5 4 5 6 0 5 3 7 0 3 5

3. Medir el tiempo que tarda cada algoritmo en ordenar el archivo completo (n=0,000,000) y compare los tiempos (Real y de CPU) de cada algoritmo gráficamente en una grafica de barras ( graficas de barras). Auxiliarse de la librería de C proporcionada para medir tiempos de ejecución bajo Linux. Algoritmo Tiempo Real Tiempo CPU Tiempo E/S % CPU/Wall 7

TIEMPO (SEG) Análisis de algoritmos 4. Realizar un análisis temporal para cada algoritmo, ordenando: Los primeros 00, 000, 5000, 0000, 50000, 00000, 00000, 400000, 600000, 800000, 000000, 000000, 3000000, 4000000, 5000000, 6000000, 7000000, 8000000, 000000 y 0000000. Graficar el comportamiento temporal de cada algoritmo Ordenamiento Shell 7000 6000 5000 4000 3000 000 000 Tiempo real Tiempo CPU Tiempo E/S 0 0 5000 0000 5000 0000 5000 30000 35000 TAMAÑO DE PROBLEMA (N) 5. Graficar una comparativa de los 5 algoritmos de ordenamiento (Tiempo real). 8

6. Realizar una aproximación polinomial del comportamiento temporal (tiempo real), de cada uno de los algoritmos probados según el punto 4. Aproximar cada algoritmo con un polinomio de grado,, 3, 4 y 8. 7. Mostrar gráficamente la comparativa de las aproximaciones para cada algoritmo (5 graficas) y determinar de manera justificada cuál es la mejor aproximación para cada algoritmo. 8. Determine con base en las aproximaciones obtenidas cual será el tiempo real de cada algoritmo para 50000000, 00000000, 500000000, 000000000 y 500000000 de números a ordenar.

. Finalmente responda a las siguientes preguntas: i. Cuál de los 5 algoritmos es más fácil de implementar? ii. Cuál de los implementar? 5 algoritmos es el más difícil de iii. Cuál algoritmo tiene menor complejidad temporal? iv. Cuál algoritmo tiene mayor complejidad temporal? v. Cuál algoritmo tiene menor complejidad espacial? Por qué? vi. Cuál algoritmo tiene mayor complejidad espacial? Por qué? vii. El comportamiento experimental de los algoritmos era el esperado? Por que? viii. Sus resultados experimentales difieren mucho de los ix. del resto de los equipos? A que se debe? Existió un entorno controlado para realizar las pruebas experimentales? Cuál fue? x. Qué recomendaciones darían a nuevos equipos para realizar esta practica? 0

Observaciones Utilizar solo ANSI C. La programación de cada uno de los métodos de ordenamiento no deberá de incluir recursividad (Algoritmos secuenciales). Por lo tanto buscar una implementación no recursiva para la inserción en un árbol binario y para realizar el recorrido inorden. Indique cual fue su plataforma experimental (Características del hardware, compilador, sistema operativo y entorno controlado) Se sugiere crear scripts que faciliten la experimentación. En el laboratorio mostrar el funcionamiento de los programas, estos ya deberá de contar con la documentación necesaria. Auto-documentación Documentación de funciones y algoritmos

Rubrica de evaluación del reporte Indicador Excelente Muy bien Bien Deficiente Construcción de párrafos Todos los párrafos incluyen una introducción, explicaciones o detalles y una conclusión Los párrafos son tomados de otras fuentes y no son originales. Los párrafos incluyen información relacionada pero no fueron generalmente bien organizados La estructura del párrafo no estaba clara y las oraciones no estaban generalmente relacionadas Redacción No hay errores de gramática, ortografía y puntuación y la redacción es coherentemente No hay errores de gramática, ortografía y puntuación, pero la redacción presenta incoherencias Pocos errores de gramática, ortografía y puntuación Muchos errores de gramática, ortografía y puntuación Cantidad de información Portada, Introducción, Planteamiento del problema, algoritmos e implementación, actividades y pruebas, errores detectados, posibles mejoras, conclusiones y anexos Todos los temas son tratados de manera clara y precisa, según lo solicitado. La mayoría de los temas son tratados de manera clara y precisa Dos temas no están tratados o están imprecisos y no cumplen lo solicitado. Tres o más temas no están tratados o están imprecisos y no cumplen lo solicitado. Calidad de la información La información está claramente relacionada con el tema principal y proporciona varias ideas secundarias y/o ejemplos La información da respuestas a las preguntas principales, y solo da algunos detalles y/o ejemplos La información da respuestas a las preguntas principales, pero no da detalles y/o ejemplos La información tiene poco o nada que ver con las preguntas planteadas. Algoritmos Los algoritmos dan solución apoyándose de pseudocódigo, diagramas y/o figuras en un lenguaje claro. La mayoría de los algoritmos dan solución apoyándose de pseudocódigo, pero diagramas y/o figuras. Los algoritmos son mencionados textualmente pero no se describen Los algoritmos no son expresados en el reporte. Organización La información está muy bien organizada con párrafos bien redactados y con subtítulos con estilos adecuados La información está organizada, pero no se distingue en estilos adecuados La información está organizada, pero los párrafos no están bien redactados La información proporcionada no parece estar organizada o es copiada de referencias externas de manera literal

Reporte de practica Portada Introducción Planteamiento del problema Algoritmos (Descripción de la abstracción del problema y los algoritmos de ordenamiento que dan solución, apoyándose de pseudocódigo, diagramas y figuras en un lenguaje claro) Implementación de los algoritmos (Dados los algoritmos de ordenamiento como se implementaron en el código) Actividades y Pruebas (Verificación de la solución, pruebas y resultados de la práctica según lo solicitado) Errores detectados (Si existe algún error detectado, el cuál no fue posible resolver o se desconoce el motivo y solo ocurre con ciertas condiciones es necesario describirlo) Posibles mejoras (Describir posibles disminuciones de código en la implementación o otras posibles soluciones) Conclusiones (Por cada integrante del equipo) Anexo (Códigos fuente *con colores e instrucciones de compilación) Bibliografía (En formato IEEE) 3

Entrega vía Web Grupo 3CM 3CM3 Contraseña analisis3cm analisis3cm3 En un solo archivo comprimido (ZIP, RAR, TAR, JAR o GZIP) Reporte (DOC, DOCX o PDF) Códigos fuente (.C,.H, etc.) Código documentado: Titulo, descripción, fecha, versión, autor. (Funciones y Algoritmos: Qué hace?, Cómo lo hace?, Qué recibe?, Qué devuelve?, Causa de errores?). OBSERVACIONES *NO enviar ejecutables o archivos innecesarios, las instrucciones de compilación van en el anexo del reporte. (Yo compilare los fuente). *NO enviar archivo de números en desorden ni archivo de números ordenados. 4

Fechas de entrega Demostración Laboratorio de Programación (07) 3CM3 Lunes 6 de febrero o lunes 05 de marzo de 08. 3CM Miércoles 8 de febrero o miércoles 07 de marzo de 08. Entrega de reporte y código En un solo archivo comprimido. Fecha y hora limite de entrega vía Web Miércoles 4 de Marzo de 08 a las 3:5:5 hrs. 5