Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Curso de Nivelación de Algoritmos - Clase 4

1,562 views

Published on

  • Be the first to comment

  • Be the first to like this

Curso de Nivelación de Algoritmos - Clase 4

  1. 1. Recursión Notas de Programación Curso de Nivelación de Algoritmos Clase 4 Lic. Ernesto Mislej emislej@dc.uba.arMaestría y Carrera de Especialización en Explotación de Datos y Descubrimiento de Conocimiento 23 de marzo de 2008 Lic. Ernesto Mislej Curso de Nivelación de Algoritmos
  2. 2. Recursión Notas de ProgramaciónRecursión Ejemplo Se tiene un almacén lleno de autopartes. Se quiere saber el precio de los productos, pero sólo se tiene una tabla de precios de partes y cómo se fabrican los productos. Lic. Ernesto Mislej Curso de Nivelación de Algoritmos
  3. 3. Recursión Notas de ProgramaciónRecursión Ejemplo El producto #13 está compuesto por las partes #8, #3 y #2. A su vez, la parte #8 está compuesta por otra parte #2 y la parte #9. La parte #9 está compuesta por 3 partes #3. La parte #3 vale $1 y la parte #2 vale $4. ¿Cuánto vale el producto #13? ¿Es posible encontrar un algoritmo para encontrar el precio de un producto? Lic. Ernesto Mislej Curso de Nivelación de Algoritmos
  4. 4. Recursión Notas de ProgramaciónRecursión Lic. Ernesto Mislej Curso de Nivelación de Algoritmos
  5. 5. Recursión Notas de ProgramaciónRecursión Input: Un producto e Output: El precio del producto e Precio (e) ← if e no está compuesto de otras partes then return Costo(e); else a ← 0; forall p ∈ Partes(e) do a ← a + Precio(p); end return a; end Lic. Ernesto Mislej Curso de Nivelación de Algoritmos
  6. 6. Recursión Notas de ProgramaciónRecursión Ejemplo Escribir en forma recursiva la función factorial. Escribir la serie Fibonacci F (0) = 0 F (1) = 1 F (n) = F (n − 1) + F (n − 2) Implementen esta serie recursiva: n − 10, if n > 100 M(n) = M(M(n + 11)), if n ≤ 100 Lic. Ernesto Mislej Curso de Nivelación de Algoritmos
  7. 7. Recursión Notas de ProgramaciónRecursión >>> # Definición recursiva >>> def fibo(n): ... if n < 2: ... return n ... else: ... return fibo(n-1) + fibo(n-2) ... >>> fibo(0) 0 >>> fibo(1) 1 >>> fibo(8) 21 Lic. Ernesto Mislej Curso de Nivelación de Algoritmos
  8. 8. Recursión Notas de ProgramaciónRecursión Dividir el problema en sub-problemas del mismo tipo. Las funciones recursivas cuentan de: Caso Base: Uno o más casos ya definidos. Llamada Recursiva: Reglas para descender al Caso Base. Existen mecanismos para pasar de un esquema recursivo a un esquema iterativo. Los más complejos utilizan Pilas para almacenar las llamadas recursivas. Lic. Ernesto Mislej Curso de Nivelación de Algoritmos
  9. 9. Recursión Notas de ProgramaciónRecursión Ejemplo Calcular el mínimo común múltiplo de 2 números. Escribir en forma recursiva el algoritmo de MergeSort. Cual es la menor cantidad de monedas, de valor {1, 5, 10, 25, 50} para dar un vuelto de 99 centavos. Lic. Ernesto Mislej Curso de Nivelación de Algoritmos
  10. 10. Recursión Notas de ProgramaciónMás sobre listas >>> # Más sobre listas >>> a = [1,2,3,5,6,7,9] >>> 4 in a 0 >>> 5 in a 1 >>> 4 not in a 1 >>> b = ["hola", "chau"] >>> a + b [1, 2, 3, 5, 6, 7, 9, ’hola’, ’chau’] Lic. Ernesto Mislej Curso de Nivelación de Algoritmos
  11. 11. Recursión Notas de ProgramaciónMás sobre listas >>> # Más sobre listas >>> a = [1,2,3,5,6,7,9] >>> a * 2 [1, 2, 3, 5, 6, 7, 9, 1, 2, 3, 5, 6, 7, 9] >>> 2 * a [1, 2, 3, 5, 6, 7, 9, 1, 2, 3, 5, 6, 7, 9] >>> len(a) 7 >>> min(a) 1 >>> max(a) 9 Lic. Ernesto Mislej Curso de Nivelación de Algoritmos
  12. 12. Recursión Notas de ProgramaciónString Methods count (sub[, start[, end]]) Devuelve el número de ocurrencias del substring sub en el string S[start:end]. find (sub[, start[, end]]) Devuelve el índice correspondiente a la primera ocurrencia del substring sub en el string S[start:end]. Devuelve -1 si sub no es encontrada. index (sub[, start[, end]]) Como find(), pero da un raise ValueError cuando el sub no es encontrada. join (seq) Devuelve un string correspondiente a la concatenación de strings en la lista seq. Usando como separador al propio string . split ([sep [,maxsplit]]) Devuelve una lista de strings usando a sep como separador. maxsplit se puede utilizar para fijar la cantidad máxima de separaciones. Lic. Ernesto Mislej Curso de Nivelación de Algoritmos
  13. 13. Recursión Notas de ProgramaciónString Methods >>> a = "Los algoritmos me aburren" >>> a.count("o") 3 >>> a.count("c") 0 >>> a.find("s") 2 >>> a.find("s", 3) 13 >>> a[13] ’s’ Lic. Ernesto Mislej Curso de Nivelación de Algoritmos
  14. 14. Recursión Notas de ProgramaciónString Methods >>> a = "Los algoritmos me aburricionan" >>> a.find("d") -1 >>> a.index("d") Traceback (most recent call last): File "<interactive input>", line 1, in ? ValueError: substring not found in string.index Lic. Ernesto Mislej Curso de Nivelación de Algoritmos
  15. 15. Recursión Notas de ProgramaciónString Methods >>> a = "Los algoritmos me aburricionan" >>> a.split(" ") [’Los’, ’algoritmos’, ’me’, ’aburricionan’] >>> b = a.split(" ") >>> ";".join(b) ’Los;algoritmos;me;aburricionan’ >>> " <> ".join(b) ’Los <> algoritmos <> me <> aburricionan’ Lic. Ernesto Mislej Curso de Nivelación de Algoritmos
  16. 16. Recursión Notas de ProgramaciónFile Object file (filename[, mode[, bufsize]]) Devuelve un objeto file. El argumento filename es el nombre del archivo a ser abierto/creado. Los modos ’r’, ’w’ y ’a’ abre el archivo para lectura, escritura(trunca) y agregado, respectivamente. open () Es un alias de la función file. close () Cierra el archivo. read ([size]) Lee (al menos tantos) size bytes del archivo. readline ([size]) Lee una línea entera del archivo. Lic. Ernesto Mislej Curso de Nivelación de Algoritmos
  17. 17. Recursión Notas de ProgramaciónFile Object Supongamos que existe el archivo iris.data con esta pinta: 6.7,3.0,5.2,2.3,Iris-virginica. 6.0,2.2,5.0,1.5,Iris-virginica. 6.2,2.8,4.8,1.8,Iris-virginica. 7.7,3.8,6.7,2.2,Iris-virginica. 7.2,3.0,5.8,1.6,Iris-virginica. 5.5,2.4,3.8,1.1,Iris-versicolor. 6.0,2.7,5.1,1.6,Iris-versicolor. 5.5,2.5,4.0,1.3,Iris-versicolor. ... Lic. Ernesto Mislej Curso de Nivelación de Algoritmos
  18. 18. Recursión Notas de ProgramaciónFile Object >>> f = open ("H:facuiris.data", "r") >>> l = f.readline() >>> l ’6.7,3.0,5.2,2.3,Iris-virginica.n’ >>> l = f.readline() >>> l ’6.0,2.2,5.0,1.5,Iris-virginica.n’ >>> Lic. Ernesto Mislej Curso de Nivelación de Algoritmos
  19. 19. Recursión Notas de ProgramaciónFile Object >>> f.seek(0) #rebobina el archivo >>> l = f.readline() >>> l ’6.7,3.0,5.2,2.3,Iris-virginica.n’ >>> while l: #Mientras existan líneas ... a = l.split(",")[0] ... print a ... l = f.readline() ... 6.7 6.0 6.2 7.7 7.2 5.5... >>> l ’’ Lic. Ernesto Mislej Curso de Nivelación de Algoritmos
  20. 20. Recursión Notas de ProgramaciónFile Object >>> #Si quiero sumar la primera columna >>> f.seek(0) #rebobina el archivo >>> a = 0 >>> l = f.readline() >>> while l: ... a = a + float(l.split(",")[0]) ... print a ... l = f.readline() ... 6.7 12.7 18.9 26.6 33.8... >>> a 876.50000000000045 Lic. Ernesto Mislej Curso de Nivelación de Algoritmos
  21. 21. Recursión Notas de ProgramaciónFile Object >>> #Si crear un file con las primeras 2 columnas >>> #separados por ";" >>> f.seek(0) #rebobina el archivo >>> g = open("H:facuiris2.data", "w") >>> l = f.readline() >>> while l: ... a = l.split(",")[0:2] ... g.write (" ; ".join(a) + "n") ... l = f.readline() ... >>> g.close() >>> f.close() Lic. Ernesto Mislej Curso de Nivelación de Algoritmos

×