Capítulo 2 Algoritmos. Problema real Planteamiento Formal ¿Presenta Solución? ALGORITMO...

53
Capítulo 2 Algoritmos

Transcript of Capítulo 2 Algoritmos. Problema real Planteamiento Formal ¿Presenta Solución? ALGORITMO...

Page 1: Capítulo 2 Algoritmos. Problema real Planteamiento Formal ¿Presenta Solución? ALGORITMO Demostración de que funciona Estudio de su eficiencia Lógica.

Capítulo 2

Algoritmos

Page 2: Capítulo 2 Algoritmos. Problema real Planteamiento Formal ¿Presenta Solución? ALGORITMO Demostración de que funciona Estudio de su eficiencia Lógica.
Page 3: Capítulo 2 Algoritmos. Problema real Planteamiento Formal ¿Presenta Solución? ALGORITMO Demostración de que funciona Estudio de su eficiencia Lógica.

Problema real

Planteamiento Formal

¿Presenta Solución?

ALGORITMO

Demostración de que funciona

Estudio de su eficiencia

Lógica

Otra vez lógica

Complejidad

Page 4: Capítulo 2 Algoritmos. Problema real Planteamiento Formal ¿Presenta Solución? ALGORITMO Demostración de que funciona Estudio de su eficiencia Lógica.

Definición de Algoritmo:

Se define como un procedimiento constructivo para la resolución de un problema y consta de:

1. Datos de entrada (precisamente definidos),

2. una cantidad finita y ordenada de instrucciones que

3. aplicadas a los datos de entrada y después de realizar una cantidad finita de operaciones obtiene una solución del problema.

Page 5: Capítulo 2 Algoritmos. Problema real Planteamiento Formal ¿Presenta Solución? ALGORITMO Demostración de que funciona Estudio de su eficiencia Lógica.

Resaltamos

• Datos de entrada.

• Operaciones básicas.

• El algoritmo termina.

• Hay que demostrar que resuelve el problema.

• Hay que estudiar su eficiencia.

Page 6: Capítulo 2 Algoritmos. Problema real Planteamiento Formal ¿Presenta Solución? ALGORITMO Demostración de que funciona Estudio de su eficiencia Lógica.

Modelo computacional

• Determinar los tipos de datos que admite como entrada.

• Determinar las operaciones básicas (y construidas por medio de ellas, más complejas) que puede hacer con dichos datos.

Page 7: Capítulo 2 Algoritmos. Problema real Planteamiento Formal ¿Presenta Solución? ALGORITMO Demostración de que funciona Estudio de su eficiencia Lógica.

Nuestro Modelo ComputacionalRAM

• Datos de entrada: números enteros.

• Operaciones básicas:– Asignaciones: x:=2;– Operaciones de suma (+), resta (-),

multiplicación (·, ×) y división entera (2/3, 2 mod 3).

– Comparaciones (x < y, x>y, x ≥y, x≤y, x≠y, x=y)

Page 8: Capítulo 2 Algoritmos. Problema real Planteamiento Formal ¿Presenta Solución? ALGORITMO Demostración de que funciona Estudio de su eficiencia Lógica.

Ejemplos

Asignaciones x:=5y:=3

Sumas: x+y (=8)Restas: x-y (=2)Cociente: x/y (=1)Resto: x mod y (=2)Comparaciones: x>y

≠ ≤ ≥ <

Page 9: Capítulo 2 Algoritmos. Problema real Planteamiento Formal ¿Presenta Solución? ALGORITMO Demostración de que funciona Estudio de su eficiencia Lógica.

Instrucciones

• Condicionales:• If (condición1, condición2,…) then (instrucciones

1) [else (instrucciones 2)]– If x>y then m:=x+y

• Bucles:• For i=a to b (i empieza en a, termina

en b y va de uno en uno)

Instrucciones

• While (condición) (el posible contador no cambia)

Instrucciones

Page 10: Capítulo 2 Algoritmos. Problema real Planteamiento Formal ¿Presenta Solución? ALGORITMO Demostración de que funciona Estudio de su eficiencia Lógica.

Máximo de dos números

Entrada: a, b (dos números enteros)

If a>b then m:=a else m:=b

Salida: m

Page 11: Capítulo 2 Algoritmos. Problema real Planteamiento Formal ¿Presenta Solución? ALGORITMO Demostración de que funciona Estudio de su eficiencia Lógica.

Máximo de una lista

Entrada: a_1,…, a_n (una pequeña trampa)

m:=a_1

For i=2 to n

If a_i>m then m:=a_i

Salida: m

Page 12: Capítulo 2 Algoritmos. Problema real Planteamiento Formal ¿Presenta Solución? ALGORITMO Demostración de que funciona Estudio de su eficiencia Lógica.

Suma de los elementos de una lista

Entrada: a_1,…, a_n

Suma:=a_1

For i=2 to n

Suma:=Suma+a_i

Salida: Suma

Page 13: Capítulo 2 Algoritmos. Problema real Planteamiento Formal ¿Presenta Solución? ALGORITMO Demostración de que funciona Estudio de su eficiencia Lógica.

Suma de los positivos

Entrada: a_1,…, a_n

Suma:=0

For i=1 to n

If a_i>0 then Suma:=Suma+a_i

Salida: Suma

Page 14: Capítulo 2 Algoritmos. Problema real Planteamiento Formal ¿Presenta Solución? ALGORITMO Demostración de que funciona Estudio de su eficiencia Lógica.

Suma de los elementos de una lista entre dos posiciones fijadas

Entrada: a_1, …, a_n; m, m’ (1≤m≤m’≤n)

Suma:=0

For i=m to m’

Suma:=Suma+a_i

Salida: Suma

Page 15: Capítulo 2 Algoritmos. Problema real Planteamiento Formal ¿Presenta Solución? ALGORITMO Demostración de que funciona Estudio de su eficiencia Lógica.

Producto de los números pares de una lista

Entrada: a_1, …,a_n

Producto:=1

For i=1 to n

If a_i mod 2=0 then Producto:=Producto*a_i

Salida: Producto

Page 16: Capítulo 2 Algoritmos. Problema real Planteamiento Formal ¿Presenta Solución? ALGORITMO Demostración de que funciona Estudio de su eficiencia Lógica.

Determinar si en una lista hay un múltiplo de 3

Entrada: a_1, …,a_nS:=1 (switch)i:=1While S=1, i≤n

if a_i mod 3=0 then S:=0i:=i+1

If S=0 then r:=“Sí” else r:=“No”Salida: r

Page 17: Capítulo 2 Algoritmos. Problema real Planteamiento Formal ¿Presenta Solución? ALGORITMO Demostración de que funciona Estudio de su eficiencia Lógica.

Determinar una lista con los múltiplos de tres de una lista dada

Entrada: a_1, …,a_n

j:=0

For i=1 to n

if a_i mod 3 =0 then j:=j+1, b_j:=a_i

If j=0 then r:=“No hay múltiplos de tres” else r:=b_i,…,b_j (ejercicio)

Salida: r

Page 18: Capítulo 2 Algoritmos. Problema real Planteamiento Formal ¿Presenta Solución? ALGORITMO Demostración de que funciona Estudio de su eficiencia Lógica.

Valor absoluto

Entrada: a

If a>0 then |a|:=a else |a|=-a

Salida: |a|

Page 19: Capítulo 2 Algoritmos. Problema real Planteamiento Formal ¿Presenta Solución? ALGORITMO Demostración de que funciona Estudio de su eficiencia Lógica.

Producto cartesiano

Entrada: a_1, …, a_n; b_1, …, b_m

k:=1 (el subíndice de la lista salida)

For i=1 to n

For j=1 to m

producto_k:=(a_i,b_j)

k:=k+1

Salida: producto_1, …, producto_(nxm)

Page 20: Capítulo 2 Algoritmos. Problema real Planteamiento Formal ¿Presenta Solución? ALGORITMO Demostración de que funciona Estudio de su eficiencia Lógica.

Intercambiar dos variables

Es necesario introducir una variable auxiliarIntercambiar(x,y)

z:=xx:=yy:=z

Esto está malx:=yy:=x

Page 21: Capítulo 2 Algoritmos. Problema real Planteamiento Formal ¿Presenta Solución? ALGORITMO Demostración de que funciona Estudio de su eficiencia Lógica.

Operaciones con listas

• Borrar

• Añadir

• Concatenar

• Sustituir

• Mezclar

Page 22: Capítulo 2 Algoritmos. Problema real Planteamiento Formal ¿Presenta Solución? ALGORITMO Demostración de que funciona Estudio de su eficiencia Lógica.

Borrar(L,i)

Entrada: a_1, ..., a_n; i (1≤i ≤n)

For j:= i to n-1

a_j:=a_(j+1)

a_n:º=null

Salida: a_1, …, a_(n-1)

Page 23: Capítulo 2 Algoritmos. Problema real Planteamiento Formal ¿Presenta Solución? ALGORITMO Demostración de que funciona Estudio de su eficiencia Lógica.

Añadir(L,m,i)

Entrada: a_1, ..., a_n; m; i (1≤i ≤n+1)

k:=n+1

While k>i

a_k:=a_(k-1)

k:=k-1

a_i:=m

Salida: a_1,…, a_(n+1)

Page 24: Capítulo 2 Algoritmos. Problema real Planteamiento Formal ¿Presenta Solución? ALGORITMO Demostración de que funciona Estudio de su eficiencia Lógica.

Concatenar(L,L’)

Entrada: a_1, ..., a_n; b_1, …, b_m

For i=1 to m

L:=Añadir(L,b_i,n+i)

Salida: L

Page 25: Capítulo 2 Algoritmos. Problema real Planteamiento Formal ¿Presenta Solución? ALGORITMO Demostración de que funciona Estudio de su eficiencia Lógica.

Sustituir(L,m,i)

Entrada: a_1, ..., a_n; m; i (1≤i ≤n)

a_i:=m

Salida:a_1, …, a_n

Page 26: Capítulo 2 Algoritmos. Problema real Planteamiento Formal ¿Presenta Solución? ALGORITMO Demostración de que funciona Estudio de su eficiencia Lógica.

Herramientas

Asignaciones de listas L:=M

elementos(L)=1 si L tiene algún elemento y 0 en caso contrario.

Longitud(L)=n, esto es, el número de elementos que tiene una lista.

Page 27: Capítulo 2 Algoritmos. Problema real Planteamiento Formal ¿Presenta Solución? ALGORITMO Demostración de que funciona Estudio de su eficiencia Lógica.

Mezclar(L,L’)

Entrada: a_1, …, a_n; b_1, …, b_m (dos listas ordenadas)

i:=0 (i es el subíndice de la salida)

While elementos(L)*elementos(L’)=1if min(L_1,L’_1)=L_1 then j:=0 else j:=1i:=i+1, M_i:=min(L_1,L’_1), If j=0 then L:=Borrar(L,1) else L’:=Borrar(L’,1)

If Longitud(L)>0 then M:=concatenar (M,L) elseM:=concatenar(M,L’)Salida: M

Page 28: Capítulo 2 Algoritmos. Problema real Planteamiento Formal ¿Presenta Solución? ALGORITMO Demostración de que funciona Estudio de su eficiencia Lógica.

Algoritmos de Búsqueda

Problema: Dada una lista a_1, …, a_n y un número a, determinar si a es un elemento de la lista o no.

Ejemplo: 5,7,8,-2,-3; 8 (la salida será sí)

2,4,5,-3,-7; 10 (la salida será no)

Page 29: Capítulo 2 Algoritmos. Problema real Planteamiento Formal ¿Presenta Solución? ALGORITMO Demostración de que funciona Estudio de su eficiencia Lógica.

Búsqueda secuencial

Entrada: a_1, …, a_n; a

s:=0, i:=1

while i≤n, s=0

If a_i=a then s:=1

i:=i+1

If s=0 then r:=“No” else r:=“Sí”

Salida: r

Page 30: Capítulo 2 Algoritmos. Problema real Planteamiento Formal ¿Presenta Solución? ALGORITMO Demostración de que funciona Estudio de su eficiencia Lógica.

Búsqueda BinariaEntrada: a_1≤…≤a_n; ai:=1, j:=n, s:=0 (i y j representan los extremos inicial y final de

la lista)While i<j,s=0

m:=(i+j)/2If a_m=a then s:=1 elseif a_m<a then i:=m+1 (cambia el extremo inicial)elsej:=m-1 (cambia el extremo final)

If s:=1 then r:=“Sí” else

If a_((i+j)/2)=a then r:=“Sí”elser:=“No”

Salida: r

Page 31: Capítulo 2 Algoritmos. Problema real Planteamiento Formal ¿Presenta Solución? ALGORITMO Demostración de que funciona Estudio de su eficiencia Lógica.

Algoritmos de ordenación

Problema: Dada una lista a_1, …, a_n ordenarla de menor a mayor (o al revés).

Ejemplo: 3,-2,4,-7;

-7,-2,3,4.

Page 32: Capítulo 2 Algoritmos. Problema real Planteamiento Formal ¿Presenta Solución? ALGORITMO Demostración de que funciona Estudio de su eficiencia Lógica.

Algoritmo burbuja

Idea: Comparara cada elemento con el siguiente, si están en el orden adecuado se dejan así, si no se intercambian sus valores.

Al finalizar una “vuelta” el último ha ocupado su lugar.

Recomenzamos con una lista de longitud una unidad menor, resultado de olvidar el último.

Page 33: Capítulo 2 Algoritmos. Problema real Planteamiento Formal ¿Presenta Solución? ALGORITMO Demostración de que funciona Estudio de su eficiencia Lógica.

Ordenación burbuja

Entrada: a_1, …, a_nFor j=1 to n-1 (j es la vuelta en la que estamos)

For i=1 to n-j (i es el contador de la lista)

if a_i >a_(i+1) thenx:=a_ia_i:=a_(i+1)a_(i+1):=x

Salida: a_1, …, a_n

Page 34: Capítulo 2 Algoritmos. Problema real Planteamiento Formal ¿Presenta Solución? ALGORITMO Demostración de que funciona Estudio de su eficiencia Lógica.

Algoritmo selección

Usamos un algoritmo min que aplicado a una lista saca m, i. Donde m es el mínimo de la lista e i es el lugar que ocupa. (Ejercicio)

Idea: si el mínimo no está en el primer lugar, intercambiamos el valor del primer lugar y el mínimo. Recomenzamos con una lista de longitud una unidad menor resultado de olvidar el primer elemento de la lista.

Page 35: Capítulo 2 Algoritmos. Problema real Planteamiento Formal ¿Presenta Solución? ALGORITMO Demostración de que funciona Estudio de su eficiencia Lógica.

Algoritmo selección

Entrada: L:=a_1, ..., a_n (asignación de listas)

T:=L

For j=1 to n-1

If min(T)_1 ≠a_j then

L:=Intercambiar(L,j,min(T)_2+j-1)

T:=Intercambiar(T,1, min(T)_2)

T:=Borrar (T,1)

Salida: L

Page 36: Capítulo 2 Algoritmos. Problema real Planteamiento Formal ¿Presenta Solución? ALGORITMO Demostración de que funciona Estudio de su eficiencia Lógica.

Mínimo

Entrada: L:=a_1, ..., a_n

m_1:=a_1, m_2:=1

For i =2 to n

if a_i<m_1 then m_1:=a_i, m_2:=i

Salida: m_1, m_2

Page 37: Capítulo 2 Algoritmos. Problema real Planteamiento Formal ¿Presenta Solución? ALGORITMO Demostración de que funciona Estudio de su eficiencia Lógica.

Borrar varios

Entrada: L:=a_1, ..., a_n; 1≤b_1 ≤… ≤b_m ≤n

i:=m

While i>0

L:=Borrar(L,b_i)

i:=i-1

Salida: L

Page 38: Capítulo 2 Algoritmos. Problema real Planteamiento Formal ¿Presenta Solución? ALGORITMO Demostración de que funciona Estudio de su eficiencia Lógica.

Añadir varios

Entrada: L:=a_1, ..., a_n; 1≤b_1 ≤… ≤b_m ≤n; c_1,…,c_m

For i=1 to m

L:=Añadir(L,b_i,c_i)

Salida: L

Page 39: Capítulo 2 Algoritmos. Problema real Planteamiento Formal ¿Presenta Solución? ALGORITMO Demostración de que funciona Estudio de su eficiencia Lógica.

Dividir con decimales

Entrada: a,b; na_0:=|a|/|b|r_0:=|a| mod |b|For i=1 to n

a_i=10*r_(i-1)/|b|r_i:=10*r_(i-1) mod |b|

If a*b>0 then r:=a_0’a_1...a_n else r:=-a_0’a_1…a_nSalida: r

Page 40: Capítulo 2 Algoritmos. Problema real Planteamiento Formal ¿Presenta Solución? ALGORITMO Demostración de que funciona Estudio de su eficiencia Lógica.

Lista de los positivos

Entrada: a_1, …, a_nj:=0For i=1 to n

if a_i>0 then j:=j+1, b_j:=a_i

If j=0 then r:=”No hay positivos” else r:=b_1,…,b_j

Salida: r

Page 41: Capítulo 2 Algoritmos. Problema real Planteamiento Formal ¿Presenta Solución? ALGORITMO Demostración de que funciona Estudio de su eficiencia Lógica.

Lista de los mayores que m

Entrada: a_1, …, a_n; mj:=0For i=1 to n

if a_i>m then j:=j+1, b_j:=a_i

If j=0 then r:=”No hay” else r:=b_1,…,b_jSalida: r

Page 42: Capítulo 2 Algoritmos. Problema real Planteamiento Formal ¿Presenta Solución? ALGORITMO Demostración de que funciona Estudio de su eficiencia Lógica.

Borrar los positivos

Entrada: a_1, …, a_nj:=nWhile j>0

if a_j>0 then L:=Borrar(L,j)j:=j-1

If elementos(L)=0 then r:=“No queda nada” else r:=L

Salida: r

Page 43: Capítulo 2 Algoritmos. Problema real Planteamiento Formal ¿Presenta Solución? ALGORITMO Demostración de que funciona Estudio de su eficiencia Lógica.

Máximo del producto de dos elementos distintos

Entrada: a_1, …, a_n

M:=a_1*a_2

For i=1 to n-1

For j=i+1 to n

if M<a_i*a_ j then M:=a_i*a_ j

Salida: M

Page 44: Capítulo 2 Algoritmos. Problema real Planteamiento Formal ¿Presenta Solución? ALGORITMO Demostración de que funciona Estudio de su eficiencia Lógica.

Máximo del producto de dos elementos distintos

Entrada: a_1, …, a_n

k:=0

For i=1 to n-1

For j=i+1 to n

k:=k+1,b_k:=a_i*a_ j

Salida: maximo(b_1,..,b_k)

Page 45: Capítulo 2 Algoritmos. Problema real Planteamiento Formal ¿Presenta Solución? ALGORITMO Demostración de que funciona Estudio de su eficiencia Lógica.

Máximo de las diferencias de dos elementos de una lista

Entrada: a_1, …, a_n

M:=a_1-a_2

For i=1 to n

For j=1 to n

If M<a_i-a_j, i ≠j then M:=a_i-aj

Salida: M

Page 46: Capítulo 2 Algoritmos. Problema real Planteamiento Formal ¿Presenta Solución? ALGORITMO Demostración de que funciona Estudio de su eficiencia Lógica.

Real RAM (los datos son números reales)

Alineados

Entrada: a_1,a_2; b_1,b_2; c_1,c_2;

If det(a_1-b_1,a_2-b_2,b_1-c_1,b_2-c_2)=0 then alineados:=1 else alineados:=0

Salida: alineados

Page 47: Capítulo 2 Algoritmos. Problema real Planteamiento Formal ¿Presenta Solución? ALGORITMO Demostración de que funciona Estudio de su eficiencia Lógica.

Hay 3 puntos alineados

Entrada: a_1=a_11, a_12; …, a_n=a_n1,a_n2s:=1, i:=1, While s=1, i ≤ n-2,

j:=i+1while s=1, j ≤n-1

k:=j+1while k ≤ n, s=1

if alineados(a_i,a_ j, a_k)=1 then s:=0k:=k+1

j:=j+1i:=i+1

Salida: s

Page 48: Capítulo 2 Algoritmos. Problema real Planteamiento Formal ¿Presenta Solución? ALGORITMO Demostración de que funciona Estudio de su eficiencia Lógica.

Complejidad

Objetivo: diseñar mecanismos para evaluar la eficiencia de un algoritmo.

Parámetros que sería interesante controlar:– Espacio (unidades de memoria)– Tiempo (número de operaciones básicas)– En promedio– En el peor de los caso

Page 49: Capítulo 2 Algoritmos. Problema real Planteamiento Formal ¿Presenta Solución? ALGORITMO Demostración de que funciona Estudio de su eficiencia Lógica.

Nuestra elección

Controlar el tiempo.

En el peor de los casos.

Definición: Sea un algoritmo A que funciona sobre una entrada de tamaño n. Se define la función T(n) como el número de operaciones que realiza el algoritmo en el peor de los casos.

Page 50: Capítulo 2 Algoritmos. Problema real Planteamiento Formal ¿Presenta Solución? ALGORITMO Demostración de que funciona Estudio de su eficiencia Lógica.

Dos observaciones

1. No hace falta ser muy exacto• T(n)=2n, T’(n)=2n+1, T’’(n)=2n^4

2. Tampoco es fácil ser exacto

Necesitamos un instrumento matemático que mida el carácter asintótico.

No distinga T de T’ y sí de T’’

Page 51: Capítulo 2 Algoritmos. Problema real Planteamiento Formal ¿Presenta Solución? ALGORITMO Demostración de que funciona Estudio de su eficiencia Lógica.

Relación de dominancia

Sean dos funciones T:N→R+ y S:N →R+ de los naturales en los reales positivos. Diremos que S domina a T y escribiremos T Є O(S) si existe una constante k y un número natural m de modo que

T(n)≤kS(n) para cada n≥ m

Page 52: Capítulo 2 Algoritmos. Problema real Planteamiento Formal ¿Presenta Solución? ALGORITMO Demostración de que funciona Estudio de su eficiencia Lógica.

Orden de complejidad

En las condiciones de la transparencia anterior diremos que T y S son del mismo orden de complejidad si T domina a S y S domina a T. Escribiremos

O(T(n))=O(S(n))

Page 53: Capítulo 2 Algoritmos. Problema real Planteamiento Formal ¿Presenta Solución? ALGORITMO Demostración de que funciona Estudio de su eficiencia Lógica.

Complejidad de un algoritmo

La complejidad de un algoritmo se define como el orden O(T(n)) de la función número de operaciones en el peor de los casos.

Ejemplo: Si T(n)=2n+1 entonces el algoritmo es de complejidad lineal.