Resolución de Problemas con algoritmos Colaboratorio de Computación Avanzada (CNCA) 2015 1 / 27
Contenidos 1 Introducción 2 Elementos de algoritmos Elementos Variables Estructuras de Control Condicionales Ciclos Estructuras de Datos 3 Funciones y Recursividad Funciones Recursividad 4 Síntesis 2 / 27
Introducción 3 / 27
Definición Un algoritmo es un conjunto: Ordenado Finito cuyos elementos (instrucciones) son: Finitos Bien especificados (no ambiguos) implementado por un agente que no requiere de ingenio. 4 / 27
Representación de algoritmos Los algoritmos se pueden escribir de diversas formas: En lenguaje natural, con expresiones comunes. 1 Sean dos números enteros. 2 Sumarlos. 3 Escribir el resultado al final de la página. En lenguaje formal, con símbolos matemáticos. 1 Sean a, b Z 2 c = a + b 3 El resultado es c Por qué es preferible utilizar símbolos matemáticos? 5 / 27
Representación de algoritmos Los algoritmos se pueden escribir de diversas formas: En lenguaje natural, con expresiones comunes. 1 Sean dos números enteros. 2 Sumarlos. 3 Escribir el resultado al final de la página. En lenguaje formal, con símbolos matemáticos. 1 Sean a, b Z 2 c = a + b 3 El resultado es c Por qué es preferible utilizar símbolos matemáticos? 5 / 27
Elementos de algoritmos 6 / 27
Elementos de un algoritmo Instrucciones: indican qué hacer en un momento dado. Mostrar valor en pantalla, Guardar archivo, etc. Variables: contenedores, su valor puede cambiar con el tiempo. a = 1, b = 2,5. Operadores: transforman o modifican expresiones. Asignación: = Aritméticos: +, -, /, *, % Comparación: >, <, >=, <=, ==,!= Lógicos:, &&,! (equivalentes a,, respectivamente). 7 / 27
Elementos de un algoritmo (2) Estructuras de control: alteran la secuencia de las instrucciones. Estructuras de datos: organizan y relacionan conjuntos de variables. 8 / 27
Variables Representan valores de diversos tipos. Poseen: Nombre. Valor. Dirección, tipo y tamaño. Ejemplo: nombre = Bruce profesión = Batman edad = 33 x = g y = 3,14159265359 En programación, las variables debe ser declaradas e inicializadas. 9 / 27
Estructuras de control Los programas son por lo general secuenciales. El flujo de instrucciones se puede modificar mediante estructuras de control: De selección o condicionales. De repetición (ciclos). 10 / 27
Condicionales Estructuras de control que realizan una secuencia de instrucciones sólo si se cumple una condición. Por ejemplo: Un juego de escudo y corona se rige por la regla: Si sale lo que escogí, entonces gano; sino, entonces pierdo. Programa para escudo y corona 11 / 27
Ciclos Estas estructuras de control repiten instrucciones muchas veces en forma impĺıcita. Utilizan un valor para contar la cantidad de repeticiones. Plantean repeticiones en forma iterativa. Por ejemplo, una estructura matemática iterativa es la sumatoria: 10 i=1 i = 1 + 2 +... + 9 + 10 Cómo se le dice a una computadora que muestre todos los números entre 1 y 10? 12 / 27
Ejemplo sin estructuras de control Algorithm 1 Imprimir en pantalla los números del 1 al 10 1: function Imprimir 2: imprimir 1 3: imprimir 2 4: imprimir 3 5: imprimir 4 6: imprimir 5 7: imprimir 6 8: imprimir 7 9: imprimir 8 10: imprimir 9 11: imprimir 10 12: end function 13 / 27
Mientras La estructura de control mientras (while) repite un conjunto de instrucciones la cantidad de veces indicada. Estructura de control mientras 14 / 27
Ejemplo con estructuras de control Algorithm 2 Imprimir en pantalla los números del 1 al 10 1: function Imprimir 2: x = 1 3: while x <= 10 do 4: imprimir x 5: x = x + 1 (*) 6: end while 7: end function (*) Conceptos importantes: acumuladores y cambio de valor. 15 / 27
Estructuras de Datos Las estructuras de datos organizan y facilitan la lectura, manipulación y relación de valores. Algunos tipos básicos: Arreglos y matrices. Listas. Grafos y árboles. Estructura de datos 16 / 27
Control de instrucciones La repetición expĺıcita mediante Para y Mientras se conoce como iteración. La repetición impĺıcita se observa en estructuras y procesos. Es conocida como recursión o recursividad. 17 / 27
Funciones y Recursividad 18 / 27
Funciones Las funciones: Son módulos que contienen instrucciones que resuelven tareas específicas. Ayudan a modularizar el problema. Permiten construir soluciones complejas mediante elementos sencillos. Reciben algún tipo de entrada, la transforman o manipulan y retornan el resultado. Pueden ser utilizadas dentro de otras funciones. Pueden combinarse con otras funciones. Principio de composición funcional: f(g(x)). 19 / 27
Ejemplo de función Objetivo: Encontrar la posición de un número en una lista. Sean L una lista de números, y n el elemento buscado. Algorithm 3 Búsqueda en una lista 1: function Buscar(L, n) 2: m = Primer elemento de L 3: while queden elementos en L do 4: if m == n then 5: Retornar m 6: else 7: m = siguiente elemento de L 8: end if 9: end while 10: end function 20 / 27
Ejemplo de función con estructuras discretas Ejemplo con nomenclatura de conjuntos: Sean L un conjunto ordenado, l Z el número buscado, L la cantidad de elementos de L y L i el elemento en la posición i. Algorithm 4 Búsqueda en una lista 1: function Buscar(L, l) 2: i = 1 3: while i < L do 4: if L m == l then 5: Retornar L m 6: end if 7: i = i + 1 8: end while 9: end function 21 / 27
Recursividad La recursividad se refiere la repetición de: Formas en una estructura. Instrucciones en una función. y en ambos casos describe estructuras/funciones autocontenidas. Triángulo de Sierpinski 22 / 27
Caracterización de recursividad El comportamiento recursivo se caracteriza por: Un conjunto de casos base. Un conjunto de reglas que permiten alcanzar uno de los casos base. Por ejemplo, el conjunto de números naturales: 1 0 N. 2 Si n N, n + 1 N 23 / 27
Ejemplo de algoritmo recursivo Algorithm 5 Calcular serie de Fibonacci 1: function fibonacci(n) 2: if n == 0 n == 1 then 3: retornar n 4: else 5: retornar fibonacci(n 1) + fibonacci(n 2) 6: end if 7: end function 24 / 27
Síntesis 25 / 27
Síntesis Los algoritmos representan soluciones en lenguaje formal. Las variables representan valores. Los operadores modifican valores. Las estructuras de control alteran el flujo de instrucciones. 26 / 27
Lecturas recomendadas Michael Sipser. Introduction to the Theory of Computation. 2da Edición, Course Technology, 2005. ISBN: 978-0534950972. Gilles Brassard y Paul Bratley. Fundamentals of Algorithmics. Prentice Hall, 1995. ISBN: 978-0133350685. 27 / 27