El documento habla sobre el análisis de algoritmos. Explica que un algoritmo es una secuencia de pasos lógicos para resolver un problema de manera precisa, definida y finita. También describe diferentes tipos de pruebas como las pruebas de caja blanca y negra que se usan para analizar algoritmos. Finalmente, discute conceptos como la complejidad algorítmica, el tiempo y espacio de ejecución de algoritmos y cómo medir su eficiencia.
1. INSTITUTO TECNOLOGICO SUPERIOR DE
FELIPE CARRILLO PUERTO
MATERIA: ESTRUCTURA DE DATOS
RESUMEN
UNIDAD 7: ANALISIS DE LOS ALGORITMOS.
DOCENTE: Dr. Niels Henryck Aranda Cuevas
ALUMNO: JOSE LUIS YAMA MAY
SEMESTRE: III GRUPO: B AULA: J-4
VIERNES 14 de DICIEMBRE del AÑO 2012
2. ITS CARRILLO PUERTO
ESTRUCTURA DE DATOS
ANÁLISIS DE ALGORITMOS.
El análisis de algoritmos es una parte importante de la Teoría de complejidad
computacional más amplia, que provee estimaciones teóricas para los recursos
que necesita cualquier algoritmo que resuelva un problema computacional dado.
Estas estimaciones resultan ser bastante útiles en la búsqueda de algoritmos
eficientes.
Para poder trabajar sobre el análisis de un algoritmo es necesario definir con
claridad que es un algoritmo, sus características en cuanto a estructura gráfica, su
funcionalidad y que aspectos se toman en cuenta o mejor dicho en que nos
ayudara esta herramienta, que si bien, es muy común escucharlo en el campo de
la informática, es utiliza también en otras áreas por la ayuda que proporciona en la
toma de decisiones sobre cualquier acción que se desee realizar, o programa,
esto ultimo en la creación de software.
DEFINICIÓN: Un algoritmo es una secuencia de pasos lógica para encontrar la
solución de un problema. Todo algoritmo debe contar con las siguientes
características: preciso, definido y finito. Por Preciso, entenderemos que cada
paso del algoritmo tiene una relación con el anterior y el siguiente; un algoritmo es
Definido, cuando se ejecuta más de una vez con los mismos datos y el resultado
es el mismo; y Finito, indica que el algoritmo cuenta con una serie de pasos
definidos o que tiene un fin.
Como se mencionó anteriormente, un algoritmo es útil para la toma de
decisiones sobre cualquier acción o programa que deseamos llevar a cabo. Pero
también es una herramienta útil para realizar pruebas sobre el funcionamiento de
cualquier cosa, ya sea antes de llevarlo a cabo o después para confirmar su buen
funcionamiento en cualquier condición de trabajo.
Para dejar en claro esta apartado de la utilidad de los algoritmos como
herramientas de prueba tenemos lo siguiente que habla sobre las pruebas y como
se dará cuanta tiene una serie de pasos a seguir y a cumplirse; eso es un
algoritmo.
Tenemos como ejemplo dos tipos de pruebas muy conocidas en el campo de
los sistemas computarizados, pero antes de entrar de lleno con estas pruebas,
primero definiremos que es una prueba en computación:
Prueba: es realizar una serie de acciones que nos permitan definir, si el
elemento que sometemos a prueba cumple con su objetivo y con lo que se espera
será su funcionalidad, o también se puede decir que, una prueba es factor crítico
para garantizar la calidad del software. Una prueba conlleva la intención de
descubrir algún error
2 YAMA MAY JOSE LUIS
3. ITS CARRILLO PUERTO
ESTRUCTURA DE DATOS
Un caso de prueba es bueno cuando su ejecución conlleva una alta
probabilidad de encontrar un error. El éxito de la prueba se mide en función de la
capacidad de detectar un error que estaba oculto. Existen varios tipos de prueba
como: las pruebas Unitarias, de Integración, de Aceptación, entre muchos otros.
Dentro de la definición de prueba, se mencionan los errores, que pueden
generarse por varios motivos:
Error: acción humana que produce una falta.
Falta: algo que está mal en un producto (modelo, código, documento, etc.)
Fallo: manifestación de una falta.
Defecto: error, falta o fallo.
Una vez estos conceptos, hablemos de las pruebas de caja blanca y caja negra,
aunque se hablara más en específico de la primera prueba.
Prueba De Caja Blanca
La prueba de la caja blanca usa la estructura de control del diseño
procedural para derivar los casos de prueba y tiene como idea o finalidad principal
la de confeccionar casos de prueba que garanticen que se verifican todos los
caminos independientes. Además verifica cada camino de manera independiente,
probando sus dos facetas desde el punto de vista lógico, es decir, verdadera y
falsa, ejecutando todos los bucles en sus límites operacionales y ejercitando las
estructuras internas de datos.
Fue propuesta por Tom McCabe (1976). La idea es derivar casos de prueba
a partir de un conjunto dado de caminos independientes.
Camino independiente es aquel que introduce por lo menos una sentencia
de procesamiento (o valor de condición) que no estaba considerada. Para obtener
el conjunto de caminos independientes se construirá el Grafo de Flujo asociado y
se calculará su Complejidad Ciclomática.
Grafo de Flujo de las Estructuras Básicas de programa
3 YAMA MAY JOSE LUIS
4. ITS CARRILLO PUERTO
ESTRUCTURA DE DATOS
Con estos grafos se pretende básicamente; Separar todas las condiciones,
Agrupar sentencias ‘simples’ en bloques, y Numerar todos los bloques y también
las condiciones.
Pruebas de Caja Blanca
Prueba del Camino Básico - Complejidad Ciclomática
Complejidad Ciclomática de un grafo de flujo V (G) establece el número de
caminos independientes. Puede calcularse de tres formas alternativas:
1. Mediante el número de regiones del grafo de flujo
2. V (G) = A - N + 2, donde A es el número de aristas y N es el número de
nodos.
3. V (G) = P + 1, donde P es el número de nodos predicado.
Pruebas de Caja Negra
En cuanto a las pruebas de caja negra tenemos que abordar dos aspectos
que se refieren a la Partición Equivalente y al Análisis de Valores Límite mediante
la Verificación y Validación de los procesos llevados a cabo durante la prueba.
Verificación: ¿estamos construyendo el producto correctamente?
Validación: ¿estamos construyendo el producto correcto?
En fin estas son las pruebas que se manejan como semejanza a los
algoritmos y con los que se pretende, dejar más en claro el objetivo de esta
herramienta. Ahora bien, hablando de estructuras de datos podemos decir que los
algoritmos según su función se dividen en: Algoritmos de ordenamiento y
Algoritmos de búsqueda.
Un algoritmo de ordenamiento, es el que pone los elementos de una lista o
vector en una secuencia (ascendente o descendente) diferente a la entrada.
Un algoritmo de búsqueda, es aquel que está diseñado para encontrar la
solución de un problema booleano de existencia o no de un elemento en particular
dentro de un conjunto finito de elementos (estructura de datos)
4 YAMA MAY JOSE LUIS
5. ITS CARRILLO PUERTO
ESTRUCTURA DE DATOS
Además de que se utiliza para realizar pruebas de escritorio sobre el
funcionamiento de software.
COMPLEJIDAD ALGORITMICA.
La complejidad algorítmica representa la cantidad de recursos (temporales) que
necesita un algoritmo para resolver un problema y por tanto permite determinar la
eficiencia de dicho algoritmo.
Los criterios que se van a emplear para evaluar la complejidad algorítmica no
proporcionan medidas absolutas sino medidas relativas al tamaño del problema.
Tareas en el Análisis de Algoritmos:
- Determinar qué operaciones se emplean y su costo relativo.- Determinar
conjuntos de datos para exhibir todos los patrones posibles de
comportamiento.
- Análisis a priori: se determina una función (de ciertos parámetros) que
acote el tiempo de cómputo del algoritmo.
- Análisis a posteriori: estadísticas reales sobre tiempo y memoria.
Tiempo De Ejecución De Un Algoritmo.
La eficiencia en tiempo se mide en términos de la cantidad de tiempo de
ejecución del programa. El tiempo de ejecución de un algoritmo, se refiere a la
suma de los tiempos en los que el programa tarda en ejecutar una a una, todas
sus instrucciones, tomando en cuenta que cada instrucción requiere una unidad de
tiempo, dicho tiempo se puede calcular en función del número de datos.
La Complejidad De Espacio
La complejidad de espacio, se refiere a la memoria que utiliza un programa
para su ejecución; es decir el espacio de memoria que ocupan todas las variables
propias del programa. Dicha memoria se divide en Memoria estática y Memoria
dinámica.
Para calcular la memoria estática, se suman la cantidad de memoria que ocupa
cada una de las variables declaradas en el programa.
Eficiencia De Los Algoritmos
Un algoritmo es eficiente cuando logra llegar a sus objetivos planteados
utilizando la menor cantidad de recursos posibles, es decir, minimizando el uso
memoria, de pasos y de esfuerzo humano.
Espacio: medida de la cantidad de memoria requerida por un programa.
Tiempo: la cantidad de tiempo de ejecución del programa
5 YAMA MAY JOSE LUIS