Está en la página 1de 101

UNIDAD 1 ORDENAMIENTOS,

BÚSQUEDAS Y PROCESOS RECURSIVOS


M.Sc Lic. Roxana Laurel Rodríguez
FUNCIONES

•Se estudiará el modo en que se definen las


funciones creadas por el usuario.
•Se estudiará en primer lugar cómo definir y
llamar a funciones que devuelven un valor y
luego se estudiará los denominados
procedimientos: funciones que no devuelven
ningún valor
FUNCIONES
• La sintaxis para definir una función es la siguiente:

• def es la palabra reservada para definir una función.


• Donde nombre es el identificador de la función.
• parametros consiste en cero o más objetos que recibe la función.
• La palabra reservada es return es opcional y termina la función.
• Después de return (opcionalmente) la función puede devolver una expresión.
FUNCIONES
• Ejemplo: función que calcula y retorna el cuadrado de un número.

• Invocando la función: Resultados de ejecutar la función:


FUNCIONES
FUNCIONES
• Ejemplo: función que calcula y retorna la raíz cúbica de un número.

• Invocando la función: Resultado de ejecutar la función:


FUNCIONES
• Ejemplo: función que verifica si es mayor de edad y retorna un valor
booleano.

• Invocando la función: Resultado de ejecutar la función:


FUNCIONES
• Ejemplo: función que suma los elementos de una lista y retorna el
resultado de la suma.

• Invocando la función: Resultado de ejecutar la función:


FUNCIONES
• Ejemplo: Comprobar si un número es perfecto

• Invocando la función: Resultado de ejecutar la función:


FUNCIONES
• Ejemplo: Crear una función que dada una lista de cadenas, devuelva
la cadena más larga.
None es un valor especial
predefinido en Python que significa
“ninguno” y se usa para denotar
“ausencia de valor”

• Invocando la función: Resultado de ejecutar la función:


FUNCIONES
• Ejemplo: Función que muestra un menú con tres opciones, pide al
usuario que seleccione una y se asegura de que la opción
seleccionada es válida.
FUNCIONES
• Ejemplo: Función que retorna en una lista el valor mínimo y
máximo de una lista.

Dos formas distintas de invocar la función:


FUNCIONES
• Ejemplo: Función para leer un número de teclado y validar de que
sea positivo

• Invocando la función:
FUNCIONES
• Ejemplo: función que recibe dos listas y devuelva los elementos comunes a ambas.

El operador in devuelve un valor


booleano indicando la existencia
del valor dentro de una lista

Invocando la función: Resultado:


VARIABLES LOCALES Y GLOBALES

•Las variables locales son las que se definen


en una función y que sólo permiten su
acceso desde ella.
•Las variables globales se definen en el
cuerpo principal del programa y permiten su
acceso desde cualquier lugar del programa.
RECURSIVIDAD

• Un objeto es recursivo cuando se define en


función de sí mismo, es decir, interviene en
su propia definición.
• La recursividad es la propiedad mediante la
cual un subprograma o rutina puede
llamarse a sí mismo.
RECURSIVIDAD

• Utilizando la recursividad, la resolución de


un problema se reduce a uno
esencialmente igual pero algo menos
complejo.
RECURSIVIDAD

• Características que deben cumplir los


problemas recursivos:
• La recursividad debe terminar alguna vez:
caso base.
• Con cada nueva formulación estamos más
cerca del caso final (caso general)
RECURSIVIDAD
• La definición matemática del factorial es recursivo:

• La definición de factorial se define en términos de si misma.


• Donde para conocer el factorial de n se tiene que conocer el
factorial de n-1 y multiplicarlo por n.
• Para conocer el factorial de n-1 se tiene que conocer el factorial
de n-2 y multiplicarlo por n-1 y así hasta que acabemos por
preguntarnos cuanto vale el factorial de 1.
RECURSIVIDAD
Funcion recursiva para calcular el factorial:

Invocando la función: Resultado:


RECURSIVIDAD

factorial(4) = 4 * factorial(3) = 4*6=24


factorial(3) = 3 * factorial(2) = 3*2=6
factorial(2) = 2 * factorial(1) = 2*1=2
resultado = 24
factorial(1) = 1

resultado = 6

resultado = 2

resultado = 1
RECURSIVIDAD
• La serie armónica es la siguiente:

• Su definición recursiva es:


RECURSIVIDAD
Funcion recursiva para calcular la serie armónica:

Invocando la función: Resultado:


LISTAS

•Una Lista es una estructura de datos


que permite almacenar gran cantidad
de valores.
•En el lenguaje de programación Python
las listas son un tipo de dato que tiene
características especiales.
LISTAS

•Una Lista permite almacenar cualquier


tipo de valor como enteros, cadenas,
funciones hasta listas.
•Los elementos de la lista están
indexados.
LISTAS

•La Lista permite almacenar varios


elementos de diferentes tipos en una
sola variable.
LISTAS

•Las Listas son equivalentes a los array


en otros lenguajes de programación.
•Se pueden expandir dinámicamente
cuando se agregan nuevos elementos.
LISTAS

•Las Listas son mutables, lo que significa


que se puede cambiar, agregar y
eliminar elementos en una lista
después de que se haya creado.
•Permite miembros duplicados.
LISTAS

•Sintaxis:
nombreLista=[elem1, elem2, …]
nombreLista=[]
Ejemplo: miLista=[10,12,14,16,18,20]
LISTAS

• Ejemplo: Crear una lista vacia y agregar cinco números


enteros.
LISTAS

• Ejemplo: Crear una lista con cuatro nombres e imprimir


la lista.
LISTAS

- Acceder al elemento “Luisa” :

- Acceder una porción de la lista:


LISTAS

- Acceder una porción de la lista:

- Acceder una porción de la lista:


LISTAS

- Acceder al elemento “Luisa” a través de un índice


negativo (indexación negativa):

- Un elemento con un índice igual a -1 es el último


elemento en la lista.
LISTAS

- Una Lista puede contener diferentes tipos de datos:


FUNCIONES vs. MÉTODOS
• Un método es un tipo específico de función: se comporta
como una función y se parece a una función, pero difiere
en la forma en que actúa y en su estilo de invocación.
• Un método es propiedad de los datos para los que trabaja.
• Ejemplo: Invocando el método “append”:
miLista.append(10) #agrega el elemento 10 al final de la lista
Objeto (datos) método
FUNCIONES vs. MÉTODOS

• Una función no pertenece a ningún dato: obtiene


datos, puede crear datos y produce un resultado.
• Una función es propiedad de todo el código.
• Ejemplo: Invocando a la función “print”:
print(miLista) #imprime los elementos de la lista
Función
FUNCIÓN len()

• Para determinar cuántos elementos tiene una lista, se


utiliza la función len():
INSTRUCCIÓN del

• Para eliminar cualquier elemento de la lista, se hace uso


de la instrucción del:
MÉTODO append

- El método append(valor) permite agregar un elemento


al final de la lista.

- La longitud de la lista aumenta en uno.


MÉTODO insert

- El método insert(ubicación, valor) permite agregar un


nuevo elemento en cualquier lugar de la lista.
MÉTODO insert

- Ejemplo: Insertar siempre en la primera posición de la


lista.
MÉTODO insert

- Ejemplo: Una posición fuera de rango agrega el


elemento al final de lista.
MÉTODO remove

- El método remove(valor) permite quitar el elemento


especificado.
MÉTODO pop

- El método pop() permite eliminar el último elemento de


la lista.
MÉTODO pop

- El método pop(posición) permite eliminar el elemento


de la lista que se encuentra en posición.
MÉTODO clear

- El método clear() vacía toda la lista.


MÉTODO count

- El método count() cuenta el número de veces que


aparece un elemento.
MÉTODO index

- El método index(valor) devuelve el índice en el que


aparece un elemento.
MÉTODO sort

- El método sort() ordena automáticamente los


elementos de una lista.
MÉTODO sort

- Ejemplo:
HACIENDO USO DE LAS LISTAS

- Ejemplo:
HACIENDO USO DE LAS LISTAS

- Ejemplo:
HACIENDO USO DE LAS LISTAS

- Ejemplo: Intercambiar los elementos de la lista.


ORDENAR ELEMENTOS

•Ordenar significa reagrupar un conjunto


de datos u objetos en una secuencia
específica.
•Los datos o elementos de una lista se
pueden ordenar de dos maneras:
Ascendentemente
Descendentemente
ORDENAR ELEMENTOS

•Ascendentemente: si en cada par de


elementos adyacentes, el primer
elemento no es mayor que el segundo
ORDENAR ELEMENTOS

•Descendentemente: si en cada par de


elementos adyacentes, el primer
elemento no es menor que el segundo
MÉTODOS DE ORDENAMIENTO

• Métodos de ordenamiento internos: Los


elementos a ordenar se encuentran en la
memoria principal (listas, arreglos).
• Métodos de ordenamiento externos:
Los elementos a ordenar se encuentran en
la memoria externa (archivos).
ORDENACIÓN INTERNA

Son los métodos de ordenación de datos


que están en la memoria principal. Y éstos
se suelen dividir en dos grupos:
• Directos: Burbuja, selección e inserción.
• Indirectos avanzados: Shell, ordenación rápida,
ordenación por mezcla, radixsort.
ORDENAMIENTO DE LA BURBUJA

El algoritmo de clasificación de intercambio


o de la burbuja se basa en el principio de
comparar pares de elementos adyacentes e
intercambiarlos entre sí hasta que estén
todos ordenados.
ORDENAMIENTO DE LA BURBUJA

Los valores más pequeños burbujean hacia


el primer elemento de la lista, mientras que
los valores más grandes se hunden hacia el
final de la lista.
ORDENAMIENTO DE LA BURBUJA

El algoritmo efectúa n-1 pasadas (5 en el


ejemplo), siendo n el número de elementos,
realizando las comparaciones indicadas en
las siguientes figuras.
ORDENAMIENTO DE LA BURBUJA

Ejemplo:
ORDENAMIENTO DE LA BURBUJA

Pasada 1: i=0
ORDENAMIENTO DE LA BURBUJA

Pasada 2: i=1
ORDENAMIENTO DE LA BURBUJA

Pasada 3: i=2
ORDENAMIENTO DE LA BURBUJA

Pasada 4: i=3
ORDENAMIENTO DE LA BURBUJA

Se necesitan 4 pasadas para ordenar una lista de


5 elementos ⇒ n-1 pasadas para n elementos.
• Pasada 1: 4 comparaciones y 3 intercambios
• Pasada 2: 3 comparaciones y 1 intercambio
• Pasada 3: 2 comparaciones y 1 intercambio
• Pasada 4: 1 comparaciones y 1 intercambio
ORDENAMIENTO DE LA BURBUJA

Algoritmo:
ORDENAMIENTO DE LA BURBUJA

El algoritmo burbuja se puede mejorar si


existe un indicador que registre si se han
producido intercambios en la pasada. Si no
se han producido cambios, la lista está
ordenada y se terminarán las
comparaciones.
ORDENAMIENTO DE LA BURBUJA

Algoritmo mejorado:
ORDENAMIENTO POR SELECCIÓN

Este método se basa en buscar el elemento


menor de la lista y colocarlo en primera
posición. Luego se busca el segundo
elemento más pequeño y se coloca en la
segunda posición, y así sucesivamente. Los
pasos sucesivos a dar son:
ORDENAMIENTO POR SELECCIÓN

Los pasos sucesivos a dar son:


1. Seleccionar el elemento menor del vector de n
elementos.
2. Intercambiar dicho elemento con el primero.
3. Repetir estas operaciones con los n – 1 elementos
restantes, seleccionando el segundo elemento;
continuar con los n – 2 elementos restantes hasta
que sólo quede el mayor.
ORDENAMIENTO POR SELECCIÓN

Ejemplo: Ordenar ascendentemente los elementos de la


siguiente lista.

El método comienza buscando el número más pequeño, 16 y


luego intercambia su posición con el primer elemento de la
lista, 320. Se repite este proceso hasta obtener una lista
ordenada.
ORDENAMIENTO POR SELECCIÓN
ORDENAMIENTO POR SELECCIÓN

Algoritmo:
ORDENAMIENTO POR INSERCIÓN

Este método consiste en insertar un elemento


en la lista en una parte ya ordenada de esta
lista y comenzar de nuevo con los elementos
restantes.
Por ser utilizado generalmente por los
jugadores de cartas se le conoce también por
el nombre de método de la baraja.
ORDENAMIENTO POR INSERCIÓN

Algoritmo:
HACIENDO USO DE LAS LISTAS
Ejercicio: Escribe un programa que realice lo siguiente:
- Paso 1: Crea una lista vacía llamada Clasica.
- Paso 2: Emplea el método append() para agregar los siguientes temas de
la música clásica a la lista: Las cuatro estaciones, Para Elisa y Requiem.
- Paso 3: Emplea el ciclo for y el append() para pedirle al usuario que
agregue los siguientes temas musicales a la lista: Heroes y Starman.
- Paso 4: Usa la instrucción del() para eliminar a Heroes y Starman de la
lista.
- Paso 5: Usa el método insert() para agregar el tema Claro de Luna al
principio de la lista.
HACIENDO USO DE LAS LISTAS
alle/titulos/186090

BIBLIOGRAFÍA
• Joyanes Aguilar, L. (2008). Fundamentos de programación:
Algoritmos, estructura de datos y objetos. (4ª. Edición) Madrid. Mc
Graw Hill/Interamericana de España S.A.U.
• Marzal Varó, A. García Sevilla, P. & Gracia Luengo, I. (2016).
Introducción a la programación con Python 3.. D - Universitat Jaume I.
Servei de Comunicació i Publicacions.
https://elibro.net/es/lc/bibliounivalle/titulos/51760
LISTA DE LISTAS

•Python permite crear una lista de


listas, es decir tener listas dentro de
una lista anidada o lista bidimensional.
•Co una lista de listas se puede
representar una matriz.
LISTA DE LISTAS

•Una matriz se denota de la siguiente


manera:

M=
LISTA DE LISTAS

•Acceder a los elementos de una


matriz:
M[0][0] = 1 M[0][1] = 2 M[0][2] = 3
M[1][0] = 2 M[1][1] = 12 M[1][2] = 6
M[2][0] = 1 M[2][1] = 0 M[2][2] = -3
M[3][0] = 0 M[3][1] = -1 M[3][2] = 0
LISTA DE LISTAS
MÉTODO DE ORDENACIÓN RÁPIDA
(QUICKSORT)
• El método de ordenación rápida
(quicksort) para ordenar o clasificar un
vector o lista de elementos (array) se basa
en el hecho de que es más rápido y fácil
de ordenar dos listas pequeñas que una
lista grande.
MÉTODO DE ORDENACIÓN RÁPIDA
(QUICKSORT)
• Se denomina método de ordenación rápida
porque, en general, puede ordenar una lista
de datos mucho más rápidamente que otros
métodos de ordenación ya estudiados.
• El método se basa en la estrategia típica de
“divide y vencerás” (divide and conquer).
MÉTODO DE ORDENACIÓN RÁPIDA
(QUICKSORT)
• La lista a clasificar almacenada en un vector o
array se divide (parte) en dos sublistas: una con
todos los valores menores o iguales a un cierto
valor específico y otra con todos los valores
mayores que ese valor. El valor elegido puede ser
cualquier valor arbitrario del vector. En
ordenación rápida se llama a este valor pivote.
MÉTODO DE ORDENACIÓN RÁPIDA
(QUICKSORT)
Algoritmo: Intercambio de los elementos dentro de la misma lista
BÚSQUEDAS

• Existen diferentes algoritmos de búsqueda. El algoritmo


elegido depende de la forma en que se encuentren
organizados los datos.
• La operación de búsqueda de un elemento N en un
conjunto de elementos consiste en:
- Determinar si N pertenece al conjunto y, en ese
caso, indicar su posición en él.
- Determinar si N no pertenece al conjunto.
BÚSQUEDAS

• Los métodos más usuales de


búsqueda son:
• Búsqueda secuencial o lineal.
• Búsqueda binaria.
• Búsqueda por transformación de
claves (hash)
BÚSQUEDA LINEAL

• Es el método más sencillo de buscar un


elemento en un vector que consiste en
explorar secuencialmente el vector o lista,
dicho en otras palabras, recorrer el vector
desde el primer elemento al último.
BÚSQUEDA LINEAL

• En otras palabras, la búsqueda secuencial compara


cada elemento del vector con el valor deseado,
hasta que éste encuentra o termina de leer el
vector completo.
BÚSQUEDA LINEAL

Ejemplo:

0 1 2 3 4
7==4 2==4 1==2 4==4
return 3
ALGORITMO BÚSQUEDA LINEAL
BÚSQUEDA LINEAL

Si el número de elementos del vector es


grande, el algoritmo de búsqueda lineal se
volverá muy lento en tiempo de un modo
considerable.
BÚSQUEDA BINARIA
• La búsqueda binaria utiliza un método de “divide y vencerás”
para localizar el valor deseado.
• Los elementos de la lista deben estar ordenados.
• Con este método se examina primero el elemento central de la
lista; si este es el elemento buscado, entonces la búsqueda ha
terminado.
• En caso contrario se determina si el elemento buscado está en la
primera o la segunda mitad de la lista y, a continuación, se repite
este proceso, utilizando el elemento central de esa sublista.
BÚSQUEDA BINARIA
inferior=0
Ejemplo: superior=6

central=6//2=3 0 1 2 3 4 5 6
10==8? no
10<8? no, entonces superior = central-1

inferior=0
superior=2
0 1 2
central=2//2=1
6==8? no
6<8? si, entonces inferior = central+1
inferior=2
superior=2
8==8? Si
central=4//2=2 2 return central
return 2
BÚSQUEDA BINARIA
Algoritmo:
BIBLIOGRAFÍA
• Joyanes Aguilar, L. (2008). Fundamentos de programación.
Mc Graw Hill Editorial.

También podría gustarte