Académique Documents
Professionnel Documents
Culture Documents
Algoritmos
Prof: J. Solano 2011-I
Objetivos
Despus de estudiar este captulo el estudiante sera capaz de:
Definir un algoritmo y relacionarlo a la resolucin de problemas. Definir tres construictores y describir su uso en algoritmos. Describir los diagramas UML y pseudocdigo y cmo se usan en los algoritmos. Listar algoritmos bsicos y sus aplicaciones. Describir el concepto de ordenacin y entender los mecanismos detrs de tres algoritmos de ordenacin primitiva. Describir el concepto de bsqueda y entender los mecanismos detrs de dos algoritmos de bsqueda comunes. Definir subalgoritmos y sus relaciones con los algoritmos. Distinguir entre los algoritmos iterativos y recursivos.
Introduccion a la Ciencia de la Computacion - CC101
Algoritmos para todas las eras Grandes algoritmos son la poesa de la computacin
Francis Sullivan Institute for Defense Analyses' Center for Computing Sciences Bowie, Maryland
Historia
Algos es la palabra griega para el dolor. Algor en latin, significa fro. Ninguno es la raz de algoritmo, que en su lugar tiene su origen de Al-Khwarizmi, erudito rabe del siglo nueve, cuyo libro al-jabr wa'l muqabalah derivo en los libros de texto de lgebra de hoy en las escuelas secundaria. Al-Khwarizmi hizo hincapi en la importancia de procedimientos metdicos para la solucin de problemas. Si estuviera presente hoy, sin duda estara impresionado por los avances en su enfoque del mismo nombre.
CONCEPTO
Aqui se define de manera informal un algoritmo y se desarrolla el concepto con un ejemplo.
Definicin informal
Una definicin informal de un algoritmo es: Algoritmo: un mtodo paso-a-paso para resolver un problema o hacer una tarea.
Ejemplo
Queremos desarrollar un algoritmo para encontrar el mayor entero entre una lista de nmeros enteros positivos. El algoritmo debe encontrar el mayor entero entre una lista de valores (por ejemplo 5, 1000, 10000, 1000000). El algoritmo debe ser general y no depende del nmero de enteros. Para resolver este problema, necesitamos un enfoque intuitivo. En primer lugar utilizar un pequeo nmero de enteros (por ejemplo, cinco), a continuacin, extender la solucin a cualquier nmero de enteros. La siguiente figura muestra una manera de resolver este problema. Llamamos al algoritmo FindLargest. Cada algoritmo tiene un nombre para distinguirlo de otros algoritmos. El algoritmo recibe una lista de cinco nmeros enteros como entrada y da el mayor entero como salida.
Introduccion a la Ciencia de la Computacion - CC101
10
La figura anterior no muestra que debe hacerse en cada paso. Podemos modificar la figura para mostrar mas detalles.
Definiendo acciones
11
Refinamiento
Este algoritmo debe refinarse para ser aceptable para la comunidad de programadores. Hay dos problemas. En primer lugar, la accin en el primer paso es diferente a las de los otros pasos. En segundo lugar, la redaccin no es la misma en los pasos 2 a 5. Fcilmente podemos redefinir el algoritmo para eliminar estos dos inconvenientes al cambiar la redaccin en los pasos 2 a 5 "Si el entero actual es mayor que el ms grande, llamar de mayor a el entero actual". La razn por la que el primer paso es diferente a los otros pasos se debe a que el Mayor no se ha inicializado. Si inicializamos mayor a - (menos infinito), entonces el primer paso puede ser el mismo que los otros pasos, por lo que aadimos un nuevo paso, llamndolo el paso 0 para indicar que se debe hacer antes de procesar cualquier enteros.
Introduccion a la Ciencia de la Computacion - CC101
12
FindLargest refinado
Introduccion a la Ciencia de la Computacion - CC101
13
Generalizacin
Es posible generalizar el algoritmo? Queremos encontrar el mayor de n enteros positivos, donde n puede ser 1000, 1.000.000, o ms. Por supuesto, podemos seguir la figura anterior y repetir cada paso. Pero si cambiamos el algoritmo a un programa, entonces tenemos que escribir las acciones para los n pasos! Hay una forma mejor de hacer esto. Podemos decirle a la computadora para repetir los pasos n veces. A continuacin se incluye esta funcin en nuestro algoritmo pictrica.
14
Generalizacin de FindLargest
Introduccion a la Ciencia de la Computacion - CC101
15
TRES CONSTRUCTORES
Los cientficos en computacin han definido tres constructores para un programa estructurado o algoritmo. La idea es que un programa debe estar hecho de una combinacin de slo estos tres constructores: secuencia, decisin (seleccin) y repeticin (figura siguiente). Se ha demostrado que no hay necesidad de otros constructores. Utilizando slo estos constructores hace que un programa o un algoritmo sea fcil de entender, depurar o cambiar.
16
Tres constructores
Introduccion a la Ciencia de la Computacion - CC101
17
Secuencia
El primer constructor se llama secuencia. Un algoritmo, y, eventualmente un programa, es una secuencia de instrucciones, que pueden ser una simple instruccin o cualquiera de los otros dos constructores.
Decisin
Algunos problemas no pueden resolverse slo con una secuencia de instrucciones simples. A veces tenemos que probar una condicin. Si el resultado de las pruebas es verdadeo, seguimos una secuencia de instrucciones: si es falso, seguimos una secuencia diferente de instrucciones. Esto se conoce como el constructor decisin (seleccin).
Introduccion a la Ciencia de la Computacion - CC101
18
Repeticin
En algunos problemas, la misma secuencia de instrucciones que debe repetirse. Nosotros nos encargamos de esto con el constructor repeticin o bucle (loop). Encontrar el nmero entero ms grande entre un conjunto de nmeros enteros puede utilizar una constructor de este tipo.
19
REPRESENTACIN DE ALGORITMOS
Hasta ahora, hemos utilizado figuras para transmitir el concepto de un algoritmo. Durante las ltimas dcadas, se han diseado diferentes herramientas para este propsito. Dos de estas herramientas, UML y pseudocdigo, se presentan aqu.
20
UML
Unified Modeling Language (UML) es una representacin pictrica de un algoritmo. Oculta todos los detalles de un algoritmo en un intento de dar el "cuadro grande " y mostrar cmo el algoritmo fluye de principio a fin. Hay mucha biblografa sobre UML. Aqu slo mostramos cmo los tres constructores son representados usando UML.
21
22
Pseudocdigo
Pseudocdigo es una representacin como-idioma-Ingls de un algoritmo. No hay un estndar para pseudocdigo, algunas personas utilizan una gran cantidad de detalles, otros utilizan menos. Algunos utilizan un cdigo que se encuentra cerca del Ingls, mientras que otros utilizan una sintaxis como el lenguaje de programacin Pascal. Aqu se muestra slo cmo los tres constructores pueden ser representados por pseudocdigo.
23
24
Ejemplo 1
Escribir un algoritmo en pseudocdigo que halle la suma de dos enteros.
25
Ejemplo 2
Escribir un algoritmo para cambiar una nota numrica a pas/no pas (pass/no pass).
26
Ejemplo 3
Escribir un algoritmo para cambiar una nota numrica (entero) a nota de letra.
27
Escribir un algoritmo para hallar el mayor nmero de un conjunto de enteros. No conocemos el nmero de enteros.
Ejemplo 4
28
Escribir un algoritmo para hallar el mayor de los primeros 1000 enteros en un conjunto de enteros.
Ejemplo 5
29
Algoritmo: Un conjunto ordenado de pasos sin ambigedades que produce un resultado y termina en un tiempo finito.
30
Conjunto ordenado
Un algoritmo debe ser un conjunto ordenado, y bien definido, de instrucciones.
Pasos no ambiguos
Cada paso en un algoritmo debe ser claro y sin ambigedades. Si un paso es sumar dos nmeros enteros, debemos definir ambos "enteros", as como la operacin "add" (sumar): no podemos, por ejemplo, usar el mismo smbolo para representar adicin en un lugar y multiplicacin en otro lugar.
31
Produce un resultado
Un algoritmo debe producir un resultado, de lo contrario es intil. El resultado puede ser datos entregados al algoritmo de llamada, o algn otro efecto (por ejemplo, la impresin).
32
ALGORITMOS BSICOS
Varios algoritmos que se utilizan prevalentemente en informtica se consideran "bsicos". Discutiremos los ms comunes. Esta discusin es muy general: la implementacin depende del lenguaje.
33
Adicin (resumen)
Un algoritmo de uso general en ciencia de la computacin es la adicin. Podemos sumar dos o tres nmeros enteros muy fcilmente, pero cmo podemos sumar muchos enteros? La solucin es simple: utilizar el operador de aadir (add) en un bucle. Un algoritmo de adicin tiene tres partes lgicas: 1. Inicializacin de la suma al principio. 2. El bucle, que en cada iteracin aade un nuevo entero a la suma. 3. Retorno del resultado despus de salir del bucle.
34
35
Producto
Otro algoritmo comn es encontrar el producto de una lista de nmeros enteros. La solucin es simple: utilizar el operador de multiplicacin en un bucle.
Un algoritmo de producto tiene tres partes lgicas: 1. Inicializacin del producto al principio. 2. El bucle, que en cada iteracin multiplica un nuevo entero con el producto. 3. Retorno del resultado despus de salir del bucle.
36
Algoritmo de producto
Introduccion a la Ciencia de la Computacion - CC101
37
El menor y el mayor
Hemos discutido el algoritmo para encontrar el mayor entre una lista de enteros en el comienzo de este captulo. La idea era escribir un constructor decisin para encontrar el mayor de dos nmeros enteros. Si ponemos este constructor en un bucle, podemos encontrar el mayor de una lista de nmeros enteros. Encontrar el menor entero entre una lista de nmeros enteros es similar, con dos pequeas diferencias. En primer lugar, utilizamos un consturctor decisin para encontrar el menor de dos nmeros enteros. En segundo lugar, inicializar con un entero muy grande en lugar de uno muy pequeo.
38
Algoritmos de ordenacin
Una de las aplicaciones ms comunes en ciencia de la computacin es la ordenacin, que es el proceso mediante el cual los datos se organizan de acuerdo a sus valores. La gente est rodeada de datos. Si los datos no estuvieran ordenados, se tardara horas y horas para encontrar una sola pieza de informacin. Imagine la dificultad de encontrar el nmero de telfono de alguien en un directorio telefnico que no esta ordenado. En esta seccin, presentamos tres algoritmos de ordenacin: ordenamiento de seleccin, ordenamiento de burbuja y la ordenacin por insercin. Estos tres algoritmos de ordenacin son la base de los algoritmos de ordenacin ms rpidos utilizados en la informtica de hoy.
Introduccion a la Ciencia de la Computacion - CC101
39
Ordenamiento de seleccin
En un ordenamiento de seleccin, la lista a ser ordenada se divide en dos sublistas, clasificados y no clasificados, que estn separadas por una pared imaginaria. Encontramos el elemento ms pequeo en la lista secundaria sin clasificar y lo intercambiamos con el elemento al principio de la lista secundaria sin clasificar. Despus de cada seleccin e intercambio, la pared imaginaria entre los dos sublistas se mueve un elemento para delante.
Ordenamiento de seleccin
Introduccion a la Ciencia de la Computacion - CC101
40
41
42
Ordenamiento de burbuja
En el mtodo de ordenamiento de burbuja, la lista a ser ordenada tambin se divide en dos sublistas, clasificados y sin clasificar. El elemento ms pequeo se burbujea desde la lista secundaria sin clasificar y se traslada a la sublista ordenada. Despus de que el elemento ms pequeo ha sido trasladado a la lista ordenada, la pared se mueve un elemento por delante.
Ordenamiento de burbuja
Introduccion a la Ciencia de la Computacion - CC101
43
44
45
46
47
48
Bsqueda
Otro algoritmo comn en ciencias de la computacin est buscando, que es el proceso de encontrar la ubicacin de un objetivo de entre una lista de objetos. En el caso de una lista, buscando los medios que le da un valor, queremos encontrar la ubicacin del primer elemento de la lista que contiene ese valor. Hay dos registros de base para las listas: la bsqueda secuencial y bsqueda binaria. binaria Bsqueda secuencial puede ser utilizado para localizar un elemento en cualquier lista, mientras que la bsqueda binaria requiere que la este primero ordenada.
49
Bsqueda secuencial
Bsqueda secuencial se utiliza si la lista en la que se debe buscar no esta ordenada. En general, utilizamos esta tcnica slo para pequeas listas o listas en las que no se busca a menudo. En otros casos, lo mejor es primero ordenar la lista y, a continuacin buscar usando la bsqueda binaria discutida antes. En una bsqueda secuencial, se empieza buscando el objetivo desde el principio de la lista. Continuamos hasta que encontremos el objetivo o alcanzemos el fin de la lista.
50
51
Bsqueda binaria
El algoritmo de bsqueda secuencial es muy lento. Si tenemos una lista de un milln de elementos, tenemos que hacer un milln de comparaciones en el peor de los casos. Si la lista no est ordenada, esta es la nica solucin. Si la lista est ordenada, sin embargo, podemos usar un algoritmo ms eficiente llamada bsqueda binaria. En general, los programadores utilizan una bsqueda binaria cuando la lista es grande. Una bsqueda binaria comienza probando los datos en el elemento en la mitad de la lista. Esto determina si el objetivo est en la primera mitad o la segunda mitad de la lista. Si est en la primera mitad, no hay necesidad de controlar ms el segundo segmento. Si est en la segunda mitad, no hay necesidad de controlar ms el primer segmento. En otras palabras, eliminamos la mitad de la lista de cualquier consideracin posterior.
Introduccion a la Ciencia de la Computacion - CC101
52
53
SUBALGORITMOS
Los tres constructores de programacin descritos anteriormente nos permite crear un algoritmo para cualquier problema soluble. Los principios de la programacin estructurada, sin embargo, requieren que un algoritmo se divida en pequeas unidades llamadas subalgorithms. Cada subalgoritmo a su vez se divide en pequeos subalgoritmos. Un buen ejemplo es el algoritmo para ordenamiento por seleccin en la siguiente figura.
54
Concepto de subalgoritmo
Introduccion a la Ciencia de la Computacion - CC101
55
56
RECURSIVIDAD
En general, hay dos enfoques para escribir algoritmos para resolver un problema. Uno de ellos utiliza la iteracin, el otro usa la recursividad. La recursividad es un proceso en el que un algoritmo se llama a si mismo.
57
Definicin iterativa
Para estudiar un ejemplo sencillo, consideremos el clculo de un factorial. El factorial de un entero es el producto de los valores enteros entre 1 y el entero. La definicin es iterativa. Un algoritmo es iterativo cada vez que la definicin no implica el propio algoritmo.
58
Definicin recursiva
Un algoritmo se define de forma recursiva cada vez que el algoritmo aparece dentro de la propia definicin. Por ejemplo, la funcin factorial se puede definir de forma recursiva, como se muestra en la Figura.
59
60
Solucin iterativa
61
Solucin recursiva
La solucin no necesita un bucle, ya que el concepto de recursividad envuelve repeticin.
62
63
64
65
67
68
69
70