Universidad Autónoma del Estado de México Centro Universitario UAEM Valle de Teotihuacán FICHA DE DATOS Créditos Institucionales: Fecha 13/octubre/2017 6 créditos. Titulo de la guía para la Unidad de Aprendizaje: “Algoritmos de Ordenamiento”. Nombre del programa educativo: Licenciatura en Informática Administrativa Unidad de Aprendizaje: Estructura de Datos Espacio Académico : Centro Universitario UAEM Valle de Teotihuacán. Nombre del Responsable: M. en S.C. Jaqueline Sánchez Espinoza
Objetivos Identificar la estructura de los algoritmos de ordenamiento a través de interpretar el algoritmo aplicando el ordenamiento adecuado.
Justificación Los problemas de ordenación y búsqueda son de gran importancia para la ciencia de la computación en general y la algoritmia en particular, empleando una gran parte de su tiempo de computación en estas operaciones , representando problemas cuya descripción puede resultar fácil para el diseño y la implementación de algoritmos eficientes que los resuelven.
Guión Explicativo Utilizar como apoyo académico De la diapositiva 1 a la 18 se muestra la identificación Presentación general Propósitos Competencias genéricas Estructura, secuencia didáctica Evaluación y acreditación de la unidad de aprendizaje de estructura de datos La diapositiva 19 en adelante se muestra el material que contempla la Unidad de competencia III.
Prerrequisitos (Conocimientos Previos) Concepto de algoritmo Lenguajes de programación tipos de datos primitivos constantes y variables operaciones de asignación estructura general de un programa programación estructurada procedimientos y funciones manejo de lenguaje de programación
Identificación de la Unidad de Aprendizaje Unidad de Aprendizaje Antecedente Programación estructurada Unidad de Aprendizaje Consecuente Programación Orientada a Objetos Unidad de Aprendizaje Consecuente Programación Orientada a Objetos
Presentación El estudio de las estructuras de datos se hará desde diversos puntos de vista: diseño de estructuras en respuesta a necesidades especificas, encapsulamiento de tipos de datos usándolos en base a su especificación (propiedad funcionales) y no a su implementación y estudio de los principales tipos, tanto elementales como no elementales, dividiendo estos últimos en estructuras lineales (listas, pilas, colas…) y no lineales (arboles, grafos,…), analizándolos primero desde el punto de vista teórico pero sin perder de vista sus aplicaciones practicas.
Propósito Evaluar las diferentes estructuras dinámicas para la representación y manipulación de información en la computadora, a través de los diferentes tipos de datos.
Competencias Genéricas Diseñar, automatizar, mejorar e implementar programas con las estructuras apropiadas que coadyuven al desarrollo de software.
Estructura de la Unidad de Aprendizaje UNIDAD I Programación estructurada, modularización y variables dinámicas. UNIDAD II Archivos y memoria dinámica UNIDAD III Algoritmos básicos de ordenación y búsqueda. UNIDAD IV Estructuras de datos lineales. UNIDAD V Estructuras de datos no lineales. UNIDAD VI Complejidad Computacional.
UNIDAD I Programación Estructurada Secuencia Didáctica 1.1 Conceptos. 1.2 Programación Estructurada y Algoritmos. 1.3 Modularización. 1.4 Variables Dinámicas: Apuntadores Operaciones. 1.5 Arreglos unidimensionales y bidimensionales. UNIDAD I Programación Estructurada
UNIDAD II Archivos y memoria dinámica Secuencia Didáctica 2.1 Control de archivo (abrir, cerrar, actualizar en los distintos modos de lectura y/o escritura). 2.2 Uso de archivos temporales. 2.3 Reservado y liberación de espacio. UNIDAD II Archivos y memoria dinámica
UNIDAD III Algoritmos básicos de ordenación y búsqueda Secuencia Didáctica 3.1 Algoritmos de Burbuja. 3.2 QuickSort. 3.3 Shell. 3.4 Shell Mejorado. 3.5 Búsqueda Binaria. UNIDAD III Algoritmos básicos de ordenación y búsqueda
UNIDAD IV Estructuras de datos no lineales Secuencia Didáctica 4.1 Pilas 4.2 Colas 4.3 Listas UNIDAD IV Estructuras de datos no lineales
UNIDAD V Estructuras de datos no lineales. Secuencia Didáctica 5.1 Grafos 5.2 Árboles 5.3 Árboles Binarios UNIDAD V Estructuras de datos no lineales.
UNIDAD VI Complejidad Computacional Secuencia Didáctica 6.1 Conceptos Básicos 6.2 Problemas O 6.3 Problemas P-NP 6.4 Ejemplos UNIDAD VI Complejidad Computacional
Evaluación y Acreditación ESCALA DE EVALUACIÓN EN PARCIALES 30% Ejercicios prácticos. 30% Evaluación continua. 40% Evaluación parcial ESCALA DE EVALUACIÓN ORDINARIA 50% Entrega de proyecto final. 50% Evaluación ordinaria. EXENTAR El alumno exenta con 9.0 en promedio de los dos parciales. REQUISITOS PARA PRESENTAR EVALUACIÓN ORDINARIA Tener 80% de asistencias en los dos parciales. Un promedio no menor a 6.0 en evaluaciones parciales.
Contenido Introducción. Algoritmo Burbuja. 1 Introducción. 2 Algoritmo Burbuja. 3 Algoritmo sacudida (shakesort). 4 Algoritmo inserción. 5 Algoritmo selección. 6 Algoritmo (Quicksort). 7 Idea de Quick Sort. 8
Introducción Ordenación o clasificación es el proceso de reordenar un conjunto de objetos en un orden específico. El propósito de la ordenación es facilitar la búsqueda de elementos en el conjunto ordenado.
Introducción Métodos de Ordenamiento Ordenación de ficheros. Ordenación de arrays.
Introducción El problema del ordenamiento puede establecerse mediante la siguiente acción: Dados los elementos: Ordenar consiste en permutar esos elementos en un orden: tal que dada una función de ordenamiento f:
Introducción En lo que sigue se considera que la estructura lineal (array, lista, vector o secuencia) a ordenar se representa por un array de objetos (números enteros): int a[ ] = new int[MAX]; Siendo MAX el número máximo de elementos del array. El orden de los elementos después de la ordenación se considera ascendente.
Algoritmo burbuja Comparación e intercambio de pares de elementos hasta que todos los elementos estén ordenados. En cada iteración se coloca el elemento más pequeño (orden ascendente) en su lugar correcto, cambiándose además la posición de los demás elementos del array.
Algoritmo burbuja
Algoritmo burbuja
Algoritmo burbuja
Algoritmo burbuja
Algoritmo burbuja
Algoritmo burbuja for(i=n;i>0;i--) for(j=0;j<i-1;j++) if (a[j] > a[j+1]) { t=a[j]; a[j] = a[j+1]; a[j+1]=t; ninterc++; }
Algoritmo sacudida (shakesort) Es una mejora del algoritmo de burbuja en el que se registra la ocurrencia de un intercambio y el índice del último intercambio y se alterna la dirección de las pasadas consecutivas.
Algoritmo sacudida (shakesort) l=k+1; for(j=l; j<=r; j++) if (a[j-1]>a[j]) { t=a[j-1]; a[j-1] = a[j]; a[j]=t; k=j; ninterc++; } r=k-1; while (l<r); l=1; r=n-1; k=n-1; do { for(j=r; j>=l; j--) if (a[j-1]>a[j]) t=a[j-1]; a[j-1] = a[j]; a[j]=t; k=j; ninterc++; }
Algoritmo inserción Los elementos están divididos en una secuencia destino y una secuencia fuente En cada paso, comenzando con i=2 e incrementando i en uno, el elemento i-ésimo de la secuencia fuente se toma y se transfiere a la secuencia destino insertándolo en el lugar adecuado
Algoritmo inserción
Algoritmo inserción
Algoritmo inserción
Algoritmo inserción
Algoritmo inserción
Algoritmo inserción
Algoritmo inserción
Algoritmo inserción
Algoritmo inserción for(i=1;i<n;i++) { j=i-1; t=a[i]; while (j>=0 && t<a[j]) a[j+1] = a[j]; j=j-1; } a[j+1]=t;
Algoritmo selección En éste método, en el i-ésimo paso seleccionamos el elemento con la llave de menor valor, entre a[i],…, a[n] y lo intercambiamos con a[i]. Como resultado, después de i pasadas, el i-ésimo elemento menor ocupará a[1],…, a[i] en el lugar ordenado.
Algoritmo selección
Algoritmo selección
Algoritmo selección
Algoritmo selección
Algoritmo selección
Algoritmo selección
Algoritmo selección
Algoritmo selección
Algoritmo selección for(i=0;i<n-1;i++) { k=i; t=a[i]; for (j=i+1; j<n; j++) if (a[j] < t) t= a[j]; k=j; } a[k]= a[i]; a[i]= t;
Algoritmo (Quicksort) Seleccionar un valor de división (L por ejemplo) y dividir el montón en dos pilas, A-L y M-Z. Después se toma la primera pila y se subdivide en dos, A-F y G-L por ejemplo. A su vez la pila A-F puede subdividirse en A-C y D-F. Este proceso continúa hasta que las pilas sean suficientemente pequeñas para ordenarlas fácilmente. El mismo proceso se aplica a la otra pila.
Idea de Quick Sort 1) Selección: tomar un elemento. 2) Dividir: reordenar los elementos tal que x va a su posición final E. 3) Recursión y vencer: ordenar recursivamente.
Algoritmo (Quicksort) void qsort(int izq, int der, int a[]) { int i, ult, m, tmp; if (izq >= der) return; tmp= a[izq]; m= (izq+der)/2; a[izq]= a[m]; a[m]=tmp; ult=izq; for (i=izq+1;i<=der;i++) if (a[i] < a[izq]) { tmp= a[++ult]; a[ult]= a[i]; a[i]=tmp; } tmp= a[izq]; a[izq]= a[ult]; a[ult]=tmp; qsort(izq,ult-1,a); qsort(ult+1,der,a);
Bibliografía Franch G. (2001) Estructuras de Datos. Especificación, Diseño e Implementación. México: Editorial UPC. Martí O. (2003) Estructura de datos y algoritmos. Ejercicios y problemas resueltos. Caracas: Editorial Pearson Prentice Hall. Cairó O. (2006) Estructura de Datos. México: Editorial Mc Graw Hill. Hernández, R. Estructura de Datos y Algoritmos. México: Editorial Prentice Hall.