Está en la página 1de 28

Matemáticas

Discretas

UNIDAD 4
FUNCIONES Y ALGORITMOS

TEMA 2:
ALGORITMOS

Ing. Luis Javier Castillo Heredia, Mgti


Preguntas:
Unidad 4
Tema 1

2
SUBTEMAS

» Subtema 1: Ejemplos de algoritmos

» Subtema 2: Análisis de algoritmos

» Subtema 3: Algoritmos recursivos


OBJETIVO

Desarrollar la habilidad algorítmica


para la solución de problemas
mediante pseudocódigo.
INTRODUCCIÓN

Para solucionar distintos problemas de forma lógica y secuencial se


elabora algoritmos, que son una serie de instrucciones detalladas
que se caracteriza por tener:
• Entrada: Datos que necesita el algoritmo para su resolución.
• Salida: Solución del problema.
• Precisión: Los pasos secuenciales son precisos y óptimos.
• Determinismo: Los resultados que produce el algoritmo son
producidos siempre por los valores de entrada.
Ejemplos de algoritmos
Búsqueda
Busque un patrón de cadena p en un texto
t, por ejemplo, encontrar la ocurrencia de
p = ”Nueva Escocia” en el texto t:
Se comienza a indexar el texto desde su
primer carácter (índice 1) si se encuentra
la cadena “Nueva Escocia” se detiene el
algoritmo, si no, va al índice 2 y así
sucesivamente;
si no se encuentra la cadena p en el texto t
el algoritmo devuelve cero
Ejemplos de algoritmos
Búsqueda
Entradas:
» t, un texto cualquiera
» n, cantidad de caracteres que hay en
la variable t
» p, palabra a buscar en el texto t
» m, cantidad de caracteres que hay
en la variable p
Salidas:
» i, será 0 si no encuentra p en t
Ejemplos de algoritmos
Búsqueda
Algoritmo:
busca_texto (p, m, t, n) {
for i=1 to n – m + 1 {
//inicializamos una variable i a 1, la misma que //ayudará a recorrer cada
caracter del texto t.
j=1
//i es el índice en t del primer carácter de la //subcadena para comparar con p,
y j es el //índice en p.
 
//el ciclo “while” compara t[i] … t[i+m-1] y //p[1] p[m].
while (t[i+j-1] == p[j])) {
j=j+1
if (j > m)
return i
}
}
return 0
}
Ejemplos de algoritmos
Búsqueda
Ejemplo, busque “001” en el texto “010001”:
j=1 j=2 j=1
(✓) (x) (x)
001 001 001
010001 010001 010001
i=1 i=1 i=2

j=1 j=2 j=3


(✓) (✓) (x)
001 001 001
010001 010001 010001
i=3 i=3 i=3

j=1 j=2 j=3


(✓) (✓) (✓)
001 001 001
010001 010001 010001
i=4 i=4 i=4
Ejemplos de algoritmos
Orden (sort)
Inserción por orden (insertion sort)
Con este algoritmo se pueden ordenar
listas que tengan alrededor de 50
elementos. Analicemos el algoritmo:
La lista de 4 números ordenados de
forma ascendente:

8 13 20 27
Ejemplos de algoritmos
Orden (sort)
Inserción por orden (insertion sort)
Si añadimos el 16:
Primero se compara 16 y 27, como 27
es mayor se mueve un índice a la
derecha.

8 13 20 27
Ejemplos de algoritmos
Orden (sort)
Inserción por orden (insertion sort)
Después se compara 16 y 20, como 20
es mayor se mueve un índice a la
derecha:

8 13 20 27
Ejemplos de algoritmos
Orden (sort)
Inserción por orden (insertion sort)
Siguiendo el algoritmo, el 16 se
compara con 13, como 13 es menor el
16 ocupa el lugar donde estaba el
número 20:

8 13 16 20 27
Ejemplos de algoritmos
Orden (sort)
Algoritmo:
Entradas:
» s, sucesión
» n, cantidad de elementos en s
Salidas:
» s, (ordenada)
Ejemplos de algoritmos
Orden (sort)
Algoritmo:
inserción_por_orden (s, n) {
for i=2 to n {
//guardar s[i] en valor para //insertarla en el lugar correcto.
valor=s[i]
j=i-1
//si valor < s[j], se mueve s[j] a la derecha para dejar lugar
a s[i].
while (j >= 1 ^ valor <s[j]) {
s[j+1]=s[j]
j=j-1
}
s[j+1]=valor//insertar valor
}
}
Ejemplos de algoritmos
Tiempo y espacio para los algoritmos
Se debe tener en consideración el
tiempo (por ejemplo, el número de
pasos o sentencias totales) y el espacio
(el número de variables, longitud
(length) o tamaño (size) de las
sucesiones); esto servirá para
comparar entre varios algoritmos que
resuelven el mismo problema.
Ejemplos de algoritmos
Algoritmos aleatorios
» Un algoritmo aleatorizado no requiere
datos de entradas ni intermedios para
que pueda realizar una determinada
acción, esto quiere decir que en una
sentencia X requiere tomar un valor
aleatorio. Ejemplo:
» Suponga tener una función rand(i, j) que
devuelve un número aleatorio entre los
enteros i y j el mismo que utilizaremos
para desordenar una sucesión de la
siguiente forma:
Ejemplos de algoritmos
Algoritmos aleatorios
Entradas:
» s, sucesión con números ordenados
» n, cantidad de elementos en s
Salida:
» s, desordenado
Ejemplos de algoritmos
Algoritmos aleatorios
Algoritmo:
desordena (s, n) {
for i=1 to n-1{
valor=s[i]
indice_aleatorio=rand(i, n)
s[i]= s[indice_aleatorio]
s[indice_aleatorio]=valor
}
}
Ejemplos de algoritmos
Algoritmos aleatorios
Supongamos que s tiene la sucesión:
17 9 5 23 21
de entrada se va a desordenar, primero se cambia s[i]
y s[índice_aleatorio] donde i=1 e
índice_aleatorio=rand(1,5). Si j=3 el intercambio sería:

5 9 17 23 21
Luego, i=2. Si índice_aleatorio=rand(2, 5)=5, el
intercambio sería:
5 21 17 23 9
En conclusión, la salida depende del número aleatorio
que genere la función rand(i, j).
Análisis de algoritmos
Un algoritmo puede no ser óptimo
para ciertos tipos de entradas, por
ejemplo, el algoritmo de inserción
por orden sólo es óptimo cuando la
cantidad de elementos es menor o
igual a 50, más de eso no lo es; por
ello se debe realizar análisis de
algoritmos que es una práctica para
conocer el tiempo y el espacio que
ocupa al ejecutarlo.
Análisis de algoritmos
Representación de lo que tarda un algoritmo (tiempo=y) respecto a la
cantidad de datos n

 • Significa que el algoritmo sin importar el tamaño de


datos n va a tener el mismo tiempo de ejecución.
• Indica que el tiempo de ejecución del algoritmo es
proporcional a la cantidad de datos n.
• Corresponde al tiempo de ejecución será igual a la
cantidad de datos elevado al cuadrado, estos tipos de
algoritmos se dan cuando se utilizan sentencias de
iteraciones anidados. Estos algoritmos son los menos
eficientes y por ende no se recomienda usarlo.
• Los algoritmos con notación BIG O que incluyan
logaritmos son los más óptimos de utilizar y esto se
comprueba visualizando el Plano Cartesiano
Algoritmos Recursivos
»   algoritmos recursivos son
Los
funciones que retornan un valor y se
llaman a sí mismas por un número
limitado de veces (para no crear bucles
infinitos) y retornan un valor total que
necesite usar iteraciones como los
números factoriales, por ejemplo:

La ecuación:
Algoritmos Recursivos
Algoritmo factorial(n):
Los pasos que realiza un algoritmo que
retorne el factorial de n ”factorial(n)”,
son:
1. Preguntar si n es igual a 0, si es
True, retorna 1
2. Caso contrario retorna:
“n * factorial(n – 1)”
Algoritmos Recursivos
Algoritmo factorial(5):
5 * factorial(5 - 1) factorial(4) factorial(3)

factorial(5) 4 * factorial(4 - 1) 3 * factorial(3 - 1)

factorial(0) factorial(1) factorial(2)

1 1 * factorial(1 - 1) 2 * factorial(2 - 1)
Algoritmos Recursivos
Algoritmo factorial(5):

5 * factorial(5 - 1) factorial(4) factorial(3)

factorial(5)
= 120 4 * factorial(4 - 1) 3 * factorial(3 - 1)
5 * 24 = 120 4 * 6 = 24 3*2=6

factorial(0) factorial(1) factorial(2)

1 1 * factorial(1 - 1) 2 * factorial(2 - 1)

1*1=1 2*1=2
PREGUNTAS

• Ejemplos de algoritmos

• Análisis de algoritmos

• Algoritmos recursivos

27
BIBLIOGRAFÍA
• Espinosa Armenta, R. (2010).
Matemáticas Discretas. ALFAOMEGA.
• Richard, J. (2015). Matemáticas
Discretas. PEARSON.
• T, V. (2008). Matemáticas Discretas con
Teoría de Gráficas y Combinatoria. MC
GRAW HILL.

También podría gustarte