View
1
Download
0
Category
Preview:
Citation preview
>>> Algoritmos>>> La palabra que los informáticos no quieren que sepas
Name: David DavóDate: 1543679854Mail: david@ddavo.me
[~]$ _ [1/40]
>>> Índice
1. ¿Algo...ritmo?
2. Recursividad
3. Divide et Impera
4. La «vida» universitaria
[~]$ _ [2/40]
>>> Historia de los algortimos I
La palabra «algoritmo» vienedel matemático persa Muḥammadibn Mūsā al-Khwārizmī
(S. VIII-IX)
Escribió el libro al-Kitābal-mukhtaṣar fī ḥisāb al-jabrwal-muqābala
[1. ¿Algo...ritmo?]$ _ [3/40]
>>> Historia de los algortimos I
La palabra «algoritmo» vienedel matemático persa Muḥammadibn Mūsā al-Khwārizmī
(S. VIII-IX)Escribió el libro al-Kitābal-mukhtaṣar fī ḥisāb al-jabrwal-muqābala
[1. ¿Algo...ritmo?]$ _ [3/40]
>>> Historia de los algoritmos II
Campesinos egipciosCampesinos rusos
[1. ¿Algo...ritmo?]$ _ [4/40]
>>> Historia de los algoritmos II
Campesinos egipciosCampesinos rusos
[1. ¿Algo...ritmo?]$ _ [4/40]
>>> Definición de algoritmo
Algoritmo:1. Conjunto ordenado yfinito de operaciones quepermite hallar la soluciónde un problema.
0. Precondición1. Hacer cosas2. Poscondición «{P}C{Q}»
—C.A.R. Hoare
[1. ¿Algo...ritmo?]$ _ [5/40]
>>> Definición de algoritmo
Algoritmo:1. Conjunto ordenado yfinito de operaciones quepermite hallar la soluciónde un problema.
0. Precondición
1. Hacer cosas2. Poscondición «{P}C{Q}»
—C.A.R. Hoare
[1. ¿Algo...ritmo?]$ _ [5/40]
>>> Definición de algoritmo
Algoritmo:1. Conjunto ordenado yfinito de operaciones quepermite hallar la soluciónde un problema.
0. Precondición1. Hacer cosas
2. Poscondición «{P}C{Q}»
—C.A.R. Hoare
[1. ¿Algo...ritmo?]$ _ [5/40]
>>> Definición de algoritmo
Algoritmo:1. Conjunto ordenado yfinito de operaciones quepermite hallar la soluciónde un problema.
0. Precondición1. Hacer cosas2. Poscondición
«{P}C{Q}»
—C.A.R. Hoare
[1. ¿Algo...ritmo?]$ _ [5/40]
>>> Definición de algoritmo
Algoritmo:1. Conjunto ordenado yfinito de operaciones quepermite hallar la soluciónde un problema.
0. Precondición1. Hacer cosas2. Poscondición «{P}C{Q}»
—C.A.R. Hoare
[1. ¿Algo...ritmo?]$ _ [5/40]
>>> Ejemplo de algoritmo
Precondición
200 g de espaguetis1 cebollaAceite de olivaSal
[1. ¿Algo...ritmo?]$ _ [6/40]
>>> Ejemplo de algoritmo
0. Corta la cebolla y saltéala con un poco de aceite.1. Añade sofrito de tomate y verduras y un poco de
pimienta.2. Comienza a cocinar a fuego lento3. Espera 10 minutos4. Finaliza de cocinar a fuego lento5. Cocer pasta6. Saltear pasta en sartén
[1. ¿Algo...ritmo?]$ _ [7/40]
>>> Ejemplo de algoritmo
Poscondición:
Los espaguetis están cocidosEs comestibleEstá rico
[1. ¿Algo...ritmo?]$ _ [8/40]
>>> Rubik
R R L L U U D D
[1. ¿Algo...ritmo?]$ _ [9/40]
>>> Rubik
R R L L U U D D
[1. ¿Algo...ritmo?]$ _ [9/40]
>>> Rubik
R R L L U U D D
[1. ¿Algo...ritmo?]$ _ [9/40]
>>> YAPA: ¿Que es una variable?
x = x+ 3
x ⇐ x+ 3
¡NO ES UNA ECUACIÓN!x = 2; y = 3
z = x + y
x = x + 7
x: 9 y: 3 z: 5
[1. ¿Algo...ritmo?]$ _ [10/40]
>>> YAPA: ¿Que es una variable?
x ⇐ x+ 3
¡NO ES UNA ECUACIÓN!
x = 2; y = 3
z = x + y
x = x + 7
x: 9 y: 3 z: 5
[1. ¿Algo...ritmo?]$ _ [10/40]
>>> YAPA: ¿Que es una variable?
x ⇐ x+ 3
¡NO ES UNA ECUACIÓN!x = 2; y = 3
z = x + y
x = x + 7
x: 9 y: 3 z: 5
[1. ¿Algo...ritmo?]$ _ [10/40]
>>> YAPA: ¿Que es una variable?
x ⇐ x+ 3
¡NO ES UNA ECUACIÓN!x = 2; y = 3
z = x + y
x = x + 7
x: 9 y: 3 z: 5
[1. ¿Algo...ritmo?]$ _ [10/40]
>>> YAPA: ¿Que es una variable?
x ⇐ x+ 3
¡NO ES UNA ECUACIÓN!x = 2; y = 3
z = x + y
x = x + 7
x: 9 y: 3 z: 5
[1. ¿Algo...ritmo?]$ _ [10/40]
>>> YAPA: ¿Que es una variable?
x ⇐ x+ 3
¡NO ES UNA ECUACIÓN!x = 2; y = 3
z = x + y
x = x + 7
x: 9 y: 3 z: 5
[1. ¿Algo...ritmo?]$ _ [10/40]
>>> Potencia
Idea:
i<b∏i=0
a = a · a · a · ... · a
Precondición:
a ∈ R ∧ b ∈ N
Poscondición:
r = ab
[1. ¿Algo...ritmo?]$ _ [11/40]
>>> Potencia
Idea:
i<b∏i=0
a = a · a · a · ... · a
Precondición:
a ∈ R ∧ b ∈ N
Poscondición:
r = ab
[1. ¿Algo...ritmo?]$ _ [11/40]
>>> Potencia
Idea:
i<b∏i=0
a = a · a · a · ... · a
Precondición:
a ∈ R ∧ b ∈ N
Poscondición:
r = ab
[1. ¿Algo...ritmo?]$ _ [11/40]
>>> Potencia
Algoritmo:
i = 0;r = 1;
¿i < b?
i = i + 1;r = r * a;Cést fini
SíNo
a = 3; b = 4;
i = 0; r = 1;i = 1; r = 3;i = 2; r = 9;i = 3; r = 27;i = 4; r = 81;
[1. ¿Algo...ritmo?]$ _ [12/40]
>>> Potencia
Algoritmo:
i = 0;r = 1;
¿i < b?
i = i + 1;r = r * a;Cést fini
SíNo
a = 3; b = 4;
i = 0; r = 1;
i = 1; r = 3;i = 2; r = 9;i = 3; r = 27;i = 4; r = 81;
[1. ¿Algo...ritmo?]$ _ [12/40]
>>> Potencia
Algoritmo:
i = 0;r = 1;
¿i < b?
i = i + 1;r = r * a;Cést fini
SíNo
a = 3; b = 4;
i = 0; r = 1;i = 1; r = 3;
i = 2; r = 9;i = 3; r = 27;i = 4; r = 81;
[1. ¿Algo...ritmo?]$ _ [12/40]
>>> Potencia
Algoritmo:
i = 0;r = 1;
¿i < b?
i = i + 1;r = r * a;Cést fini
SíNo
a = 3; b = 4;
i = 0; r = 1;i = 1; r = 3;i = 2; r = 9;
i = 3; r = 27;i = 4; r = 81;
[1. ¿Algo...ritmo?]$ _ [12/40]
>>> Potencia
Algoritmo:
i = 0;r = 1;
¿i < b?
i = i + 1;r = r * a;Cést fini
SíNo
a = 3; b = 4;
i = 0; r = 1;i = 1; r = 3;i = 2; r = 9;i = 3; r = 27;
i = 4; r = 81;
[1. ¿Algo...ritmo?]$ _ [12/40]
>>> Potencia
Algoritmo:
i = 0;r = 1;
¿i < b?
i = i + 1;r = r * a;Cést fini
SíNo
a = 3; b = 4;
i = 0; r = 1;i = 1; r = 3;i = 2; r = 9;i = 3; r = 27;i = 4; r = 81;
[1. ¿Algo...ritmo?]$ _ [12/40]
>>> Máximo
Encontrar el máximo:
maxi = 0;i = 0;
¿i < n? SíNo
vi > vmaxiSí No
El máximoes vmaxi
maxi = i
i = i+1
v = {5, 17, 3, 12, 19, 6};n = |v| = 6;
i vi maxi vmaxi
0 5 0 51 17 1 172 3 1 173 12 1 174 19 4 195 6 4 19
[1. ¿Algo...ritmo?]$ _ [13/40]
>>> Definición de recursividad
Para entender la recursividad, primero tienes queentender la recursividad
- Anónimo
DefiniciónDefinir algo usando su propia definición
[2. Recursividad]$ _ [14/40]
>>> Definición de recursividad
Para entender la recursividad, primero tienes queentender la recursividad
- Anónimo
DefiniciónDefinir algo usando su propia definición
[2. Recursividad]$ _ [14/40]
>>> Ejemplos matemáticos de recursividad
Fibonacci
f(n) =
{1 1 ≤ n ≤ 2
f(n− 1) + f(n− 2) 2 < nn ∈ N
Factorial
n! = n · (n− 1)!
[2. Recursividad]$ _ [15/40]
>>> Ejemplos matemáticos de recursividad
Fibonacci
f(n) =
{1 1 ≤ n ≤ 2
f(n− 1) + f(n− 2) 2 < nn ∈ N
Factorial
n! = n · (n− 1)!
[2. Recursividad]$ _ [15/40]
>>> Ejemplos de acrónimos recursivos
GNU's not UnixPHP Hipertext PreprocessorPNG's not GIF
[2. Recursividad]$ _ [16/40]
>>> Estructura de un algoritmo recursivo
Uno o varios casos base (solución directa)Uno o varios casos recursivos (usamos el algoritmo)
[2. Recursividad]$ _ [17/40]
>>> Potencia
Precondicióna ∈ R ∧ b ∈ N
Poscondiciónr = ab
Caso recursivor = ab = a · ab−1
Caso base¡Nos lo da la propiadefinición de potencia!a0 = 1
Matemáticas
pow(a, b) =
{1 b = 0
a ∗ pow(a, b− 1) eoc
[2. Recursividad]$ _ [18/40]
>>> YAPA: La instrucción return
Cuando queremos que un algoritmo devuelva un resultadocomo lo haría una función matemática, usaremos«return» seguido del valor a devolverf(x) = 2x+ 3 ⇒ return 2x+3Al retornar un valor, el algoritmo 'para'
[2. Recursividad]$ _ [19/40]
>>> Potencia
Diagrama de flujo
Inicio
¿b = 0?
return 1;return a*pow(a,b-1)
SíNo
[2. Recursividad]$ _ [20/40]
>>> Algoritmo de Euclides
7
17
3
[2. Recursividad]$ _ [21/40]
>>> Algoritmo de Euclides
7
17
3
[2. Recursividad]$ _ [21/40]
>>> Algoritmo de Euclides
7
17
3
[2. Recursividad]$ _ [21/40]
>>> Algoritmo de Euclides
7
17
3
[2. Recursividad]$ _ [21/40]
>>> Algoritmo de Euclides
7
17
3
1
[2. Recursividad]$ _ [21/40]
>>> Algoritmo de Euclides
7
17
3
1
[2. Recursividad]$ _ [21/40]
>>> Máximo Común Divisor
Precondición
a, b ∈ N
Poscondición
r = mcd (a, b)
Caso recursivo
mcd (a, b) = mcd (b, a mod b)
Caso base
mcd (a, 0) = a
[2. Recursividad]$ _ [22/40]
>>> Máximo Común Divisor
Inicio
b = 0
return a; return mcd(b, a %b);
[2. Recursividad]$ _ [23/40]
>>> Divide et impera
«Divide et impera»- Cayo Julio C#
El emperador Julio CésarRubens
[3. Divide et Impera]$ _ [24/40]
>>> Adivina el número
16
8
4
2
1 3
6
5 7
12
10
9 11
14
13 15
24
20
18
17 19
22
21 23
28
26
25 27
30
29 31
[3. Divide et Impera]$ _ [25/40]
>>> Adivina el número
16
8
4
2
1 3
6
5 7
12
10
9 11
14
13 15
24
20
18
17 19
22
21 23
28
26
25 27
30
29 31
[3. Divide et Impera]$ _ [25/40]
>>> Adivina el número
16
8
4
2
1 3
6
5 7
12
10
9 11
14
13 15
24
20
18
17 19
22
21 23
28
26
25 27
30
29 31
[3. Divide et Impera]$ _ [25/40]
>>> Adivina el número
16
8
4
2
1 3
6
5 7
12
10
9 11
14
13 15
24
20
18
17 19
22
21 23
28
26
25 27
30
29 31
[3. Divide et Impera]$ _ [25/40]
>>> Adivina el número
16
8
4
2
1 3
6
5 7
12
10
9 11
14
13 15
24
20
18
17 19
22
21 23
28
26
25 27
30
29 31
[3. Divide et Impera]$ _ [25/40]
>>> Adivina el número
16
8
4
2
1 3
6
5 7
12
10
9 11
14
13 15
24
20
18
17 19
22
21 23
28
26
25 27
30
29 31
[3. Divide et Impera]$ _ [25/40]
>>> Potencia otra vez
Precondición
a ∈ R ∧ b ∈ N
Postcondición
r = ab
Idea
r = ab/2+b/2 = ab/2 · ab/2
Problema¡Dividir un número impar entre dos deja resto!
b/2 ∈ N ⇔ b es par
[3. Divide et Impera]$ _ [26/40]
>>> Solución al problema anterior
Si b es parr = ab/2 · ab/2
Si b es imparComo b
2 = b−12 ⇒ r = ab/2 · ab/2 · a
[3. Divide et Impera]$ _ [27/40]
>>> Diagrama del problema anterior
Inicio
b=0Sí No
return 1;
r = pow(a,b/2);r = r*r;
¿b par?
Sí
No
r = r*a;
return r;
[3. Divide et Impera]$ _ [28/40]
>>> Búsqueda binaria
PrecondiciónLa lista está ordenada:
∀i∀j(0 ≤ i < j < n ∧ vi < vj)
PoscondiciónRetornamos la posición del elemento que buscamos
EjemploBuscar el 37 en una lista de 16 elementos
[3. Divide et Impera]$ _ [29/40]
>>> Búsqueda binaria
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
10 11 16 28 36 37 40 41 44 56 58 64 72 84 95 98
[3. Divide et Impera]$ _ [30/40]
>>> Búsqueda binaria
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
10 11 16 28 36 37 40 41 44 56 58 64 72 84 95 98
[3. Divide et Impera]$ _ [30/40]
>>> Búsqueda binaria
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
10 11 16 28 36 37 40 41 44 56 58 64 72 84 95 98
[3. Divide et Impera]$ _ [30/40]
>>> Búsqueda binaria
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
10 11 16 28 36 37 40 41 44 56 58 64 72 84 95 98
[3. Divide et Impera]$ _ [30/40]
>>> Bachillerato
InvProy α: Un simulador de redes por y para alumnos
[4. La «vida» universitaria]$ _ [31/40]
>>> Universidad
Facultad de Informática
[4. La «vida» universitaria]$ _ [32/40]
>>> Universidad
Museo de Informática García Santesmases
[4. La «vida» universitaria]$ _ [33/40]
>>> Universidad: OTEA
Penguin On Tour: Facultad de Físicas
[4. La «vida» universitaria]$ _ [34/40]
>>> Universidad: OTEA
[4. La «vida» universitaria]$ _ [35/40]
>>> FDIst
FDIST: FDI Security Team & #HackTheCern
[4. La «vida» universitaria]$ _ [36/40]
>>> Cryptoparty
CryptoParty Madrid
[4. La «vida» universitaria]$ _ [37/40]
>>> Cryptoparty
CryptoParty Madrid[4. La «vida» universitaria]$ _ [37/40]
>>> ASCII
[4. La «vida» universitaria]$ _ [38/40]
>>> Bibliografía recomendada I
Alfredo Deaño.Introducción a la Lógica Formal.Alianza, Madrid, 1983.
Brian Christian & Tom Griffiths.Algorithms to Live By: The Computer Science of HumanDecisions.Henry Holt & Co., 2016.
Marcus du Sautoy, David Briggs.The Secret Rules of Modern Living Algorithms, 2015.BBC Four.
[5. ]$ _ [39/40]
>>> Q&A
1. ¿Algo...ritmo?Historia de los algoritmosDefinición de algoritmoLógica de HoareEjemplos de algoritmo: Potencia y máximo
2. RecursividadDefinición de recursividadEjemplos de recursividadAlgoritmo de Euclides (MCD)
3. Divide et ImperaAdivina el númeroPotencia otra vezBúsqueda binaria
4. La «vida» universitariaEste documento esta realizado bajo licencia Creative Commons “Reconocimiento 4.0Internacional”.
[5. ]$ _ [40/40]
Recommended