Sie sind auf Seite 1von 14

Ing.

Ciro Saguay
Facultad de Ciencias de la Ingeniería e Industrias
.
Agenda:
• Introducción al análisis de algoritmos.
• Tipos de análisis.
• Medidas de eficacia:
• complejidad espacial,
• complejidad temporal.
www.ute.edu.ec
Actualmente la construcción de aplicaciones informáticas debe responder a
requerimientos muy complejos y de carácter crítico de las organizaciones. La
complejidad inmersa en los proyectos de desarrollo de software está
asociada a múltiples fuentes: metodologías utilizadas, tecnologías de apoyo,
capacidad y competencias de las personas, productividad de los equipos de
trabajo, requerimientos cambiantes de los clientes, presupuesto disponible,
entre otras.

En ese sentido la actividad de la programación está relacionada


directamente con la tarea de diseñar e implementar algoritmos que
resuelvan problemas con eficiencia.

www.ute.edu.ec
El análisis de algoritmos, tiene como objetivo fundamental medir la eficiencia
de uno o más algoritmos en cuanto a consumo de memoria y tiempo. Es una
actividad muy importante en el proceso de desarrollo de software,
especialmente en entornos con recursos restringidos. Por ello, es necesario
realizar estimaciones en cuanto al consumo de tiempo y de memoria que
puede requerir una aplicación para su ejecución.

En esta asignatura se trabajarán temas como el tiempo de ejecución de los


algoritmos iterativos, la complejidad computacional y notaciones asintóticas, el
análisis de algoritmos recursivos, métodos de ordenamiento y búsqueda de
datos.

www.ute.edu.ec
Definición de Algoritmo:
Se conoce como algoritmo a una secuencia de pasos (instrucciones), que son
ejecutadas con esfuerzos finitos en un tiempo razonable, que recibe un conjunto de
valores como entrada y produce un conjunto de valores como salida. Para la ejecución
de estas instrucciones es necesario contar con una cantidad finita de recursos.

Según (Valenzuela, 2003), cuando nos referimos al concepto de algoritmo, hacemos


referencia a los pasos encaminados a la consecución de un objetivo. Un algoritmo
puede ser caracterizado por una función lo cual asocia una salida: s= f (E) a cada
entrada E.

En Ciencias de la Computación cuando se dice que un problema tiene solución, significa


que existe un algoritmo susceptible de implantarse en una computadora, capaz de
producir la respuesta correcta para cualquier instancia del problema.
www.ute.edu.ec
Tipos de algoritmos:
• Algoritmos Determinísticos: Es un algoritmo en el cual, cada uno de sus pasos están
claramente definidos, y para cada conjunto de entrada es posible predecir una salida
exacta.
• Algoritmos No Determinísticos: Es un algoritmo en el cual, para un mismo conjunto de
datos de entrada, se pueden obtener diferentes salidas. No se puede previa a la ejecución
de estos algoritmos, afirmar cuál será su resultado.
• Algoritmos Adaptativos: Son algoritmos con alguna capacidad de aprendizaje. Por
ejemplo, los sistemas basados en conocimientos, las redes neuronales entre otras.

En la literatura asociada al tema se encuentra una cantidad muy amplia de tipos de algoritmos
entre los cuales adicionalmente se pueden citar los algoritmos paralelos, probabilísticos,
voraces, divide y vencerás, dinámicos. Estos últimos también se tratarán en esta asignatura.

www.ute.edu.ec
Implementación de un algoritmo :
• Correcta: Si para toda instancia del conjunto de entrada se obtiene la salida
esperada, es decir, que cumpla con el objetivo para el cual está pensado.
• Eficiente: Debe ser rápido y usar la menor cantidad de recursos. Es una relación
entre los recursos consumidos, fundamentalmente tiempo y memoria versus los
productos obtenidos.
Por lo tanto, un algoritmo se considera bueno si considera los siguientes elementos.

www.ute.edu.ec
Si los anteriores elementos resueltos de forma positiva dan noción de lo que es un
buen algoritmo. Se pueden generar las siguientes preguntas cuando estemos
analizando cada uno de nuestros programas, y de esa manera realizar el análisis del
algoritmo.
Pregunta Respuesta
¿Cumple el algoritmo el objetivo para el cual está pensado?

¿Resuelve el algoritmo el problema en el menor tiempo posible?

¿Hace el algoritmo uso adecuado de los recursos?

¿El algoritmo permite identificar posibles errores?

¿El algoritmo es fácil de modificar para añadir funcionalidad?

www.ute.edu.ec
Ejemplo:

Se desea determinar si un número es primo o no. El conjunto de los números


primos es un subconjunto de los números naturales que contiene aquellos que son
divisibles por sí mismos y por la unidad.
Son entre otros números primos: 1, 2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43

Elabore un método para comprobar lo solicitado y responda a las preguntas que


permiten analizar el algoritmo

www.ute.edu.ec
Solución 1:
public boolean esPrimo(int numero)
{
int resultado = 0;
int i = 2;
while( i < numero )
{
if ( numero % i == 0 )
{
resultado = 1;
}
i = i + 1;
}
if ( resultado == 0 )
{
return true;
}
else
{
return false;
} www.ute.edu.ec
}
Solución 1:

Pregunta Respuesta

¿Cumple el algoritmo el objetivo para Solo en el caso en cual se ingresa un número entero
el cual está pensado? positivo, el algoritmo genera una salida correcta y
cumpliría con su objetivo.
¿Resuelve el algoritmo el problema en No es posible resolver el interrogante, para poder
el menor tiempo posible? responder, se debe comparar con la eficiencia de otros
algoritmos que resuelven el mismo problema
¿Hace el algoritmo uso adecuado de los Si, dado que se usan las variables estrictamente
recursos? necesarias para la solución y se utiliza un tipo de dato
con rango de valores moderado
¿El algoritmo permite identificar No, dado que el programa no maneja excepciones que
posibles errores? controlen posibles errores
¿El algoritmo es fácil de modificar para Si, dada la sencillez del problema y de la solución
añadir funcionalidad? propuesta www.ute.edu.ec
Solución 2:
public boolean esPrimo(int numero)
{
int i;
for ( i = 2 ; i <= numero / 2 ; i++ )
{
if ( numero % i == 0 )
{
break;
}
}
if ( i > numero / 2 )
{
return true;
}
else
{
return false;
} www.ute.edu.ec
}
Solución 2:

Pregunta Respuesta

¿Cumple el algoritmo el objetivo para Solo, en el caso en el que se ingrese un número entero
el cual está pensado? positivo, el algoritmo genera una salida correcta
¿Resuelve el algoritmo el problema en Si se compara con el algoritmo anterior, este algoritmo
el menor tiempo posible? es mejor dado que una vez que encuentra un número
divisible, termina la ejecución y muestra el mensaje al
usuario, teniendo en cuenta la condición if.
¿Hace el algoritmo uso adecuado de los Si, pues para algunos casos no itera toda la cantidad de
recursos? veces permitida por el ciclo
¿El algoritmo permite identificar No, dado que el programa no maneja excepciones que
posibles errores? controlen posibles errores
¿El algoritmo es fácil de modificar para Si, dada la sencillez del problema y de la solución
añadir funcionalidad? propuesta
www.ute.edu.ec
Actividad:

Implemente un método que lea un número entero positivo y retorna la cantidad de


dígitos que este tiene.

Elabore el método solicitado y responda a las preguntas que permiten analizar el


algoritmo

www.ute.edu.ec

Das könnte Ihnen auch gefallen