algoritmos - la palabra que los informáticos no quieren

76
>>> Algoritmos >>> La palabra que los informáticos no quieren que sepas Name: David Davó Date: 1543679854 Mail: [email protected] [~]$ _ [1/40]

Upload: others

Post on 18-Jul-2022

1 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Algoritmos - La palabra que los informáticos no quieren

>>> Algoritmos>>> La palabra que los informáticos no quieren que sepas

Name: David DavóDate: 1543679854Mail: [email protected]

[~]$ _ [1/40]

Page 2: Algoritmos - La palabra que los informáticos no quieren

>>> Índice

1. ¿Algo...ritmo?

2. Recursividad

3. Divide et Impera

4. La «vida» universitaria

[~]$ _ [2/40]

Page 3: Algoritmos - La palabra que los informáticos no quieren

>>> 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]

Page 4: Algoritmos - La palabra que los informáticos no quieren

>>> 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]

Page 5: Algoritmos - La palabra que los informáticos no quieren

>>> Historia de los algoritmos II

Campesinos egipciosCampesinos rusos

[1. ¿Algo...ritmo?]$ _ [4/40]

Page 6: Algoritmos - La palabra que los informáticos no quieren

>>> Historia de los algoritmos II

Campesinos egipciosCampesinos rusos

[1. ¿Algo...ritmo?]$ _ [4/40]

Page 7: Algoritmos - La palabra que los informáticos no quieren

>>> 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]

Page 8: Algoritmos - La palabra que los informáticos no quieren

>>> 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]

Page 9: Algoritmos - La palabra que los informáticos no quieren

>>> 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]

Page 10: Algoritmos - La palabra que los informáticos no quieren

>>> 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]

Page 11: Algoritmos - La palabra que los informáticos no quieren

>>> 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]

Page 12: Algoritmos - La palabra que los informáticos no quieren

>>> Ejemplo de algoritmo

Precondición

200 g de espaguetis1 cebollaAceite de olivaSal

[1. ¿Algo...ritmo?]$ _ [6/40]

Page 13: Algoritmos - La palabra que los informáticos no quieren

>>> 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]

Page 14: Algoritmos - La palabra que los informáticos no quieren

>>> Ejemplo de algoritmo

Poscondición:

Los espaguetis están cocidosEs comestibleEstá rico

[1. ¿Algo...ritmo?]$ _ [8/40]

Page 15: Algoritmos - La palabra que los informáticos no quieren

>>> Rubik

R R L L U U D D

[1. ¿Algo...ritmo?]$ _ [9/40]

Page 16: Algoritmos - La palabra que los informáticos no quieren

>>> Rubik

R R L L U U D D

[1. ¿Algo...ritmo?]$ _ [9/40]

Page 17: Algoritmos - La palabra que los informáticos no quieren

>>> Rubik

R R L L U U D D

[1. ¿Algo...ritmo?]$ _ [9/40]

Page 18: Algoritmos - La palabra que los informáticos no quieren

>>> 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]

Page 19: Algoritmos - La palabra que los informáticos no quieren

>>> 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]

Page 20: Algoritmos - La palabra que los informáticos no quieren

>>> 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]

Page 21: Algoritmos - La palabra que los informáticos no quieren

>>> 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]

Page 22: Algoritmos - La palabra que los informáticos no quieren

>>> 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]

Page 23: Algoritmos - La palabra que los informáticos no quieren

>>> 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]

Page 24: Algoritmos - La palabra que los informáticos no quieren

>>> 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]

Page 25: Algoritmos - La palabra que los informáticos no quieren

>>> 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]

Page 26: Algoritmos - La palabra que los informáticos no quieren

>>> 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]

Page 27: Algoritmos - La palabra que los informáticos no quieren

>>> 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]

Page 28: Algoritmos - La palabra que los informáticos no quieren

>>> 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]

Page 29: Algoritmos - La palabra que los informáticos no quieren

>>> 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]

Page 30: Algoritmos - La palabra que los informáticos no quieren

>>> 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]

Page 31: Algoritmos - La palabra que los informáticos no quieren

>>> 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]

Page 32: Algoritmos - La palabra que los informáticos no quieren

>>> 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]

Page 33: Algoritmos - La palabra que los informáticos no quieren

>>> 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]

Page 34: Algoritmos - La palabra que los informáticos no quieren

>>> 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]

Page 35: Algoritmos - La palabra que los informáticos no quieren

>>> 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]

Page 36: Algoritmos - La palabra que los informáticos no quieren

>>> 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]

Page 37: Algoritmos - La palabra que los informáticos no quieren

>>> 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]

Page 38: Algoritmos - La palabra que los informáticos no quieren

>>> Ejemplos de acrónimos recursivos

GNU's not UnixPHP Hipertext PreprocessorPNG's not GIF

[2. Recursividad]$ _ [16/40]

Page 39: Algoritmos - La palabra que los informáticos no quieren

>>> 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]

Page 40: Algoritmos - La palabra que los informáticos no quieren

>>> 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]

Page 41: Algoritmos - La palabra que los informáticos no quieren

>>> 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]

Page 42: Algoritmos - La palabra que los informáticos no quieren

>>> Potencia

Diagrama de flujo

Inicio

¿b = 0?

return 1;return a*pow(a,b-1)

SíNo

[2. Recursividad]$ _ [20/40]

Page 43: Algoritmos - La palabra que los informáticos no quieren

>>> Algoritmo de Euclides

7

17

3

[2. Recursividad]$ _ [21/40]

Page 44: Algoritmos - La palabra que los informáticos no quieren

>>> Algoritmo de Euclides

7

17

3

[2. Recursividad]$ _ [21/40]

Page 45: Algoritmos - La palabra que los informáticos no quieren

>>> Algoritmo de Euclides

7

17

3

[2. Recursividad]$ _ [21/40]

Page 46: Algoritmos - La palabra que los informáticos no quieren

>>> Algoritmo de Euclides

7

17

3

[2. Recursividad]$ _ [21/40]

Page 47: Algoritmos - La palabra que los informáticos no quieren

>>> Algoritmo de Euclides

7

17

3

1

[2. Recursividad]$ _ [21/40]

Page 48: Algoritmos - La palabra que los informáticos no quieren

>>> Algoritmo de Euclides

7

17

3

1

[2. Recursividad]$ _ [21/40]

Page 49: Algoritmos - La palabra que los informáticos no quieren

>>> 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]

Page 50: Algoritmos - La palabra que los informáticos no quieren

>>> Máximo Común Divisor

Inicio

b = 0

return a; return mcd(b, a %b);

[2. Recursividad]$ _ [23/40]

Page 51: Algoritmos - La palabra que los informáticos no quieren

>>> Divide et impera

«Divide et impera»- Cayo Julio C#

El emperador Julio CésarRubens

[3. Divide et Impera]$ _ [24/40]

Page 52: Algoritmos - La palabra que los informáticos no quieren

>>> 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]

Page 53: Algoritmos - La palabra que los informáticos no quieren

>>> 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]

Page 54: Algoritmos - La palabra que los informáticos no quieren

>>> 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]

Page 55: Algoritmos - La palabra que los informáticos no quieren

>>> 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]

Page 56: Algoritmos - La palabra que los informáticos no quieren

>>> 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]

Page 57: Algoritmos - La palabra que los informáticos no quieren

>>> 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]

Page 58: Algoritmos - La palabra que los informáticos no quieren

>>> 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]

Page 59: Algoritmos - La palabra que los informáticos no quieren

>>> 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]

Page 60: Algoritmos - La palabra que los informáticos no quieren

>>> Diagrama del problema anterior

Inicio

b=0Sí No

return 1;

r = pow(a,b/2);r = r*r;

¿b par?

No

r = r*a;

return r;

[3. Divide et Impera]$ _ [28/40]

Page 61: Algoritmos - La palabra que los informáticos no quieren

>>> 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]

Page 62: Algoritmos - La palabra que los informáticos no quieren

>>> 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]

Page 63: Algoritmos - La palabra que los informáticos no quieren

>>> 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]

Page 64: Algoritmos - La palabra que los informáticos no quieren

>>> 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]

Page 65: Algoritmos - La palabra que los informáticos no quieren

>>> 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]

Page 66: Algoritmos - La palabra que los informáticos no quieren

>>> Bachillerato

InvProy α: Un simulador de redes por y para alumnos

[4. La «vida» universitaria]$ _ [31/40]

Page 67: Algoritmos - La palabra que los informáticos no quieren

>>> Universidad

Facultad de Informática

[4. La «vida» universitaria]$ _ [32/40]

Page 68: Algoritmos - La palabra que los informáticos no quieren

>>> Universidad

Museo de Informática García Santesmases

[4. La «vida» universitaria]$ _ [33/40]

Page 69: Algoritmos - La palabra que los informáticos no quieren

>>> Universidad: OTEA

Penguin On Tour: Facultad de Físicas

[4. La «vida» universitaria]$ _ [34/40]

Page 70: Algoritmos - La palabra que los informáticos no quieren

>>> Universidad: OTEA

[4. La «vida» universitaria]$ _ [35/40]

Page 71: Algoritmos - La palabra que los informáticos no quieren

>>> FDIst

FDIST: FDI Security Team & #HackTheCern

[4. La «vida» universitaria]$ _ [36/40]

Page 72: Algoritmos - La palabra que los informáticos no quieren

>>> Cryptoparty

CryptoParty Madrid

[4. La «vida» universitaria]$ _ [37/40]

Page 73: Algoritmos - La palabra que los informáticos no quieren

>>> Cryptoparty

CryptoParty Madrid[4. La «vida» universitaria]$ _ [37/40]

Page 74: Algoritmos - La palabra que los informáticos no quieren

>>> ASCII

[4. La «vida» universitaria]$ _ [38/40]

Page 75: Algoritmos - La palabra que los informáticos no quieren

>>> 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]

Page 76: Algoritmos - La palabra que los informáticos no quieren

>>> 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]