

Prepara tus exámenes y mejora tus resultados gracias a la gran cantidad de recursos disponibles en Docsity
Gana puntos ayudando a otros estudiantes o consíguelos activando un Plan Premium
Prepara tus exámenes
Prepara tus exámenes y mejora tus resultados gracias a la gran cantidad de recursos disponibles en Docsity
Prepara tus exámenes con los documentos que comparten otros estudiantes como tú en Docsity
Los mejores documentos en venta realizados por estudiantes que han terminado sus estudios
Estudia con lecciones y exámenes resueltos basados en los programas académicos de las mejores universidades
Responde a preguntas de exámenes reales y pon a prueba tu preparación
Consigue puntos base para descargar
Gana puntos ayudando a otros estudiantes o consíguelos activando un Plan Premium
Comunidad
Pide ayuda a la comunidad y resuelve tus dudas de estudio
Descubre las mejores universidades de tu país según los usuarios de Docsity
Ebooks gratuitos
Descarga nuestras guías gratuitas sobre técnicas de estudio, métodos para controlar la ansiedad y consejos para la tesis preparadas por los tutores de Docsity
Este documento proporciona una guía detallada sobre la corrección y complejidad de algoritmos, incluye definiciones clave, clasificación de algoritmos correctos, conceptos básicos de verificación y análisis de complejidad. Además, se calculan y comparan la complejidad de tres algoritmos comunes: ordenamiento rápido, ordenamiento simple por selección y búsqueda binaria.
Qué aprenderás
Tipo: Guías, Proyectos, Investigaciones
1 / 3
Esta página no es visible en la vista previa
¡No te pierdas las partes importantes!
Objetivo: suministrar al alumno de un acopio de términos referenciados al tema de corrección y complejidad de algoritmos, que deberán completar y fortalecer con la bibliografía recomendada, junto con el cálculo de la complejidad de algoritmos conocidos en el desarrollo de unidades anteriores.
Definición de especificación formal de un algoritmo : es la expresión del efecto de dicho algoritmo que va a tener sobre determinados datos de entrada e indicar en que consisten dichos datos de entrada. Por ej: la suma de los N primeros números naturales
Para todo N perteneciente al conjunto natural la SUMA(N) que es la sumatoria de los valores que toma una variable I desde 1 hasta N inclusive.
Definición de algoritmo correcto : es aquel que satisface la especificación formal dada para su realización.
Clasificación de algoritmo correcto de acuerdo a su cumplimiento: a) Parcial: garantiza que si termina el algoritmo cumple la especificación. b) Total: garantiza que el algoritmo termina sobre cualquier conjunto de datos válidos.
Concepto de Verificación : es el mecanismo por el que se valida si un algoritmo es correcto totalmente. a) Prueba de escritorio (parcial) b) Prueba formal (total)
Para resolver un problema computacional, se desarrollan varios algoritmos correctos y se debe elegir el mejor de ellos. Se analiza la cantidad de recursos de la computadora utilizados por cada algoritmo, ó lo mismo que decir lo eficiente ó complejo que sea. Se busca medir la eficiencia para comparar algoritmos. Existe un análisis de la complejidad, en el que se observan dos enfoques diferentes: a) Enfoque empírico : se ejecutan en máquina y se comparan resultados b) Enfoque teórico : se determina matemáticamente a priori los recursos utilizados
Para realizar la evaluación de la eficiencia, se determinan:
1- Eficiencia en memoria : llamada complejidad espacial, que representas la cantidad de almacenamiento necesario. 2- Eficiencia en tiempo : como no se ejecuta no existe una unidad determinada para medir la eficiencia teórica, por ello se utiliza el principio de invarianza, que plantea que dos versiones del mismo algoritmo no difieren en su eficiencia en más que una constante: T1 (n) <= C T2(n) donde n es grande y C es positiva y dependerá de la computadora.
Notación O( ) : F (n) es de orden O ( g(n) ) si y solo si se cumple que para una constante positiva C y N 0 , ambos independientes de N tales que : F (N) <= G (N), para todo N >= N 0
Por ejemplo : F(N) = 3N3 + 2 N2 es O (N3) Donde G (N) = N3 N= 0 y C = 5 3N^3 + 2 N^2 <= 5 N^3 para todo N >= 0
Funciones de complejidad en tiempo más usuales:
O (N log(N) ): aparece en algoritmo con recursión, ej: ordenamiento rápido y se considera una complejidad buena. O (N^2 ): complejidad cuadrática, aparece en bucle anidados, por ejemplo ordenamiento directo por selección. O ( log(N) ): Complejidad logarítmica, aparece en algoritmos con iteración, por ej: búsqueda binaria)
Cálculo de la complejidad de algunos algoritmos:
El algoritmo de ordenamiento rápido está diseñado con recursión, basado en dividir el rango de valores a ordenar en partes iguales y luego realizar ordenamiento dentro de cada parte.
Por ejemplo si se tiene un vector de N valores, donde N = 2 K^ , para algún K, siendo K el número de divisiones en que se realizará el algoritmo, definiendo que K = log 2 (N) :
En la 1º fase se realizarán N comparaciones En la 2º fase se habrán dividido en 2 subrangos de tamaño aproximado N/2, siendo la cantidad de comparaciones para estas 2 partes, la suma de comparaciones realizadas en cada una de las partes: 2 * (N /2 ) = N En la 3º fase se habrán dividido cada una de las partes en dos partes iguales, es decir que la cantidad total de comparaciones será : 4 * ( N / 4 ) = N En general de tener K divisiones se totalizarán K * N comparaciones. Si llamamos a m la cantidad e comparaciones: m = K * N Reemplazando a K por su función en N: m = log 2 (N) * N
Por supuesto que si la división de las partes no se realiza en parte iguales ó similares, la eficiencia no será la misma y se aproximará a la eficiencia de los métodos de ordenamiento simples.
El algoritmo se define con una estructura de repetición incondicional para controlar la cantidad de pasadas, que de tener N datos a ordenar, serán N-1 bucles ó pasadas. En cada pasada se realizarán comparaciones entre los datos y como resultado de las mismas se realizarán movimientos de datos ó no.
Análisis por las comparaciones (son cantidades fijas e independientes del N y del orden de datos):
1º pasada se realizan N-1 comparaciones entre datos 2º pasada realizan N-2 comparaciones entre datos 3º pasada realizan N-3 comparaciones entre datos … (N-1)º pasada se realiza 1 comparación entre datos
Por lo tanto si se suman las cantidades de comparaciones en total se obtiene la sucesión matemática: /N-1) + (N-2) + … + 1 = ( N * ( N -1 ) ) / 2 = N^2 / 2 - N / 2