31
1 Ordenando

1 Ordenando. 2 Sorting Input Una secuencia de numeros a 1, a 2, a 3, …, a n Output Una permutación (reorden) a’ 1, a’ 2, a’ 3, …, a’ n de la input, tal

Embed Size (px)

Citation preview

Page 1: 1 Ordenando. 2 Sorting Input Una secuencia de numeros a 1, a 2, a 3, …, a n Output Una permutación (reorden) a’ 1, a’ 2, a’ 3, …, a’ n de la input, tal

1

Ordenando

Page 2: 1 Ordenando. 2 Sorting Input Una secuencia de numeros a 1, a 2, a 3, …, a n Output Una permutación (reorden) a’ 1, a’ 2, a’ 3, …, a’ n de la input, tal

2

Sorting

• Input• Una secuencia de numeros a1, a2, a3, …, an

• Output• Una permutación (reorden) a’1, a’2, a’3, …, a’n

de la input, tal que a’1 < a’2 < a’3 < …< a’n

• Ejemplo• Input: 8 5 2 3 9 6 1• Output: 1 2 3 5 6 8 9

Page 3: 1 Ordenando. 2 Sorting Input Una secuencia de numeros a 1, a 2, a 3, …, a n Output Una permutación (reorden) a’ 1, a’ 2, a’ 3, …, a’ n de la input, tal

3

Selection Sort

• n-1 fases, desde 1 hasta n-1

• En la fase p, hallamos el p’esimo, nº más pequeño y lo ponemos en la posición p.

• O(n2), considerando, O(n) fases, y donde cada fase necesita O(n) para hallar el p’esimo nº más pequeño.

7 5 2 9 1 3

1 5 2 9 7 3Fase 1

1 2 5 9 7 3Fase2

1 2 3 9 7 5Fase 3

1 2 3 5 7 9Fase 4

1 2 3 5 7 9Fase 5

Page 4: 1 Ordenando. 2 Sorting Input Una secuencia de numeros a 1, a 2, a 3, …, a n Output Una permutación (reorden) a’ 1, a’ 2, a’ 3, …, a’ n de la input, tal

4

Bubble Sort

• n-1 fases, de 1 hasta n-1

• En la fase p, escanea la lista de izq. a der. Si el nº de la posición actual es más grande que la siguiente los intercambia.

7 5 2 9 1 3

5 7 2 9 1 3posicion 1

5 2 7 9 1 3posicion 2

5 2 7 9 1 3posicion 3

5 2 7 1 9 3posicion 4

5 2 7 1 3 9posicion 5

Page 5: 1 Ordenando. 2 Sorting Input Una secuencia de numeros a 1, a 2, a 3, …, a n Output Una permutación (reorden) a’ 1, a’ 2, a’ 3, …, a’ n de la input, tal

5

fase 2

5 2 7 1 3 9

2 5 7 1 3 9

2 5 7 1 3 9

2 5 1 7 3 9

2 5 1 3 7 9

2 5 1 3 7 9

2 1 5 3 7 9

2 1 3 5 7 9

fase 3

1 2 3 5 7 9

1 2 3 5 7 9

fase 4

1 2 3 5 7 9

fase 5

• En la fase p, el p’ésimo elemento más grande deberá estar en la posición correcta.

• O(n2)

Page 6: 1 Ordenando. 2 Sorting Input Una secuencia de numeros a 1, a 2, a 3, …, a n Output Una permutación (reorden) a’ 1, a’ 2, a’ 3, …, a’ n de la input, tal

6

Insertion sort

• n-1 fases, de 2 hasta n

7 5 2 3 1 92 5 7 3 1 9antes fase 4

2 3 5 7 1 9Despues fase 4

Page 7: 1 Ordenando. 2 Sorting Input Una secuencia de numeros a 1, a 2, a 3, …, a n Output Una permutación (reorden) a’ 1, a’ 2, a’ 3, …, a’ n de la input, tal

7

7 5 2 3 1 9

5 7 2 3 1 9

fase 2

2 5 7 3 1 9

2 3 5 7 1 9

2 3 5 71 9

2 3 5 71 9Despues fase 6

fase 3

fase 4

fase 5

fase 6

7 5 2 3 1 9

• Después de fase p, elementos en posiciones 1 hasta la p-1 están ordenados.

• O(n2)

Page 8: 1 Ordenando. 2 Sorting Input Una secuencia de numeros a 1, a 2, a 3, …, a n Output Una permutación (reorden) a’ 1, a’ 2, a’ 3, …, a’ n de la input, tal

8

Inversion

• Bubble Sort, Insertion Sort, y Selection sort usan • Inversiones, es decir , en una secuencia

a(1), a(2), …, a(n) con algun orden (i,j) tal que

i < j , pero a(i) > a(j)

• Ejemplo: 24, 35, 12, 30• (1,3), (2,3), (2,4)

• Cuál es el nº de inversiones en promedio?

Page 9: 1 Ordenando. 2 Sorting Input Una secuencia de numeros a 1, a 2, a 3, …, a n Output Una permutación (reorden) a’ 1, a’ 2, a’ 3, …, a’ n de la input, tal

9

Inversion Ejemplo

Page 10: 1 Ordenando. 2 Sorting Input Una secuencia de numeros a 1, a 2, a 3, …, a n Output Una permutación (reorden) a’ 1, a’ 2, a’ 3, …, a’ n de la input, tal

10

Heapsort

• Algoritmos involucrados

• Buildheap: O(n)• n -DeleteMins: n -O(log n)

• O(n log n) worst-case running time

Page 11: 1 Ordenando. 2 Sorting Input Una secuencia de numeros a 1, a 2, a 3, …, a n Output Una permutación (reorden) a’ 1, a’ 2, a’ 3, …, a’ n de la input, tal

11

11

15

47 30

24

28 33

11 15 24 47 30 28 33

15

30

47 33

24

28

11

15 30 24 47 33 28

11 15

24

30

47 33

28

24 30 28 47 33

11 15 24

28

30

47

33

28 30 33 47

Page 12: 1 Ordenando. 2 Sorting Input Una secuencia de numeros a 1, a 2, a 3, …, a n Output Una permutación (reorden) a’ 1, a’ 2, a’ 3, …, a’ n de la input, tal

12

11

15

47 30

24

28 33

11 15 24 47 30 28 33

24

30

47 33

28

28

30

47

33

15

30

47 33

24

28

15 30 24 47 33 28 11

24 30 28 47 33 15 11 28 30 33 47 24 15 11

Para ordenar en orden creciente?

Page 13: 1 Ordenando. 2 Sorting Input Una secuencia de numeros a 1, a 2, a 3, …, a n Output Una permutación (reorden) a’ 1, a’ 2, a’ 3, …, a’ n de la input, tal

13

Mergesort

Mergesort(A:array de integers) { msort(A,0,length[A]-1);}msort(A,p,r) { If (p == r) return; q = floor((p+r)/2); msort(A,p,q); msort(A,q+1,r); merge(A,p,q,r);}

Page 14: 1 Ordenando. 2 Sorting Input Una secuencia de numeros a 1, a 2, a 3, …, a n Output Una permutación (reorden) a’ 1, a’ 2, a’ 3, …, a’ n de la input, tal

14

8 3 4 1 6 5 2 7

8 3 4 1 6 5 2 7

1 2 3 4 5 6 7 8

1 3 4 8 2 5 6 7

8 3 4 1

8 3 4 1

3 8 1 4

6 5

6 5 2 7

2 7

5 6 2 7

Mergesort

T(1) = O(1)

T(n) =

O(1)+2T(n/2)+O(n)

T(n) = O(n log n)

T(n/2) O(1)

O(n)

T(n/2)

Page 15: 1 Ordenando. 2 Sorting Input Una secuencia de numeros a 1, a 2, a 3, …, a n Output Una permutación (reorden) a’ 1, a’ 2, a’ 3, …, a’ n de la input, tal

15

Analisis de Mergesort

nnTnT

T

)2/(2)(

1)1(

nT

n

nTlog

1

)1()(

12/

)2/()(

n

nT

n

nT

11

)1(

2

)2(

...

TT

14/

)4/(

2/

)2/(

n

nT

n

nT

18/

)8/(

4/

)4/(

n

nT

n

nT)log(

log)(

nnO

nnnnT

Page 16: 1 Ordenando. 2 Sorting Input Una secuencia de numeros a 1, a 2, a 3, …, a n Output Una permutación (reorden) a’ 1, a’ 2, a’ 3, …, a’ n de la input, tal

16

Mergesort

• O(n log n) worst-case running time

• Divide-and-conquer

• requiere memoria adicional

Page 17: 1 Ordenando. 2 Sorting Input Una secuencia de numeros a 1, a 2, a 3, …, a n Output Una permutación (reorden) a’ 1, a’ 2, a’ 3, …, a’ n de la input, tal

17

Quicksort

• Divide-and-conquer

• O(n log n) average running time

• O(n2) worst-case running time

• Es el más rápido en la practica.

Page 18: 1 Ordenando. 2 Sorting Input Una secuencia de numeros a 1, a 2, a 3, …, a n Output Una permutación (reorden) a’ 1, a’ 2, a’ 3, …, a’ n de la input, tal

18

30 19 24 28 41 34 15 43 20 12 36

12 15 19 20 24 28 30 34 36 41 43

19 24 28 15 20 12 41 34 43 3630

12 15 19 20 24 28

15 12 19 24 28 20

12 15 20 24 28

34 36 41 43

34 36

12 15 20 24 28 34 36

T(i) O(n)

O(1)

T(n-i)

34 36 41 43

)1()()()()(

1)1()0(

OnOinTiTnT

TT

Page 19: 1 Ordenando. 2 Sorting Input Una secuencia de numeros a 1, a 2, a 3, …, a n Output Una permutación (reorden) a’ 1, a’ 2, a’ 3, …, a’ n de la input, tal

19

Quicksort Algorithm

• Suponga una entrada de elementos en una lista S.• Si el # de elementos en S es 0 o 1, return S.• Pincha un elemento p (el pivote) en S. • Particion S-{p} en

• S1 = {x S | x p } y

• S2 = {x S | x p }

• Ordena S1 y S2 recursivamente• Return ( S1, p, S2 )

Page 20: 1 Ordenando. 2 Sorting Input Una secuencia de numeros a 1, a 2, a 3, …, a n Output Una permutación (reorden) a’ 1, a’ 2, a’ 3, …, a’ n de la input, tal

20

Escoger Pivote

• El primer elemento• Mala opción

• Un elemento al azar

• Median

• Median de la izq., der y elementos del centro.

Page 21: 1 Ordenando. 2 Sorting Input Una secuencia de numeros a 1, a 2, a 3, …, a n Output Una permutación (reorden) a’ 1, a’ 2, a’ 3, …, a’ n de la input, tal

21

Particion

301924 2841 341543 2012

301924 28 41 341543 20 12

301924 2841 341543 2012

301924 2841 3415 43 2012

301924 2841 3415 432012

301924 28 413415 432012

Page 22: 1 Ordenando. 2 Sorting Input Una secuencia de numeros a 1, a 2, a 3, …, a n Output Una permutación (reorden) a’ 1, a’ 2, a’ 3, …, a’ n de la input, tal

22

Mejor caso- Best Case

nnTnT

TT

)2/(2)(

1)1()0(

)log()( nnOnT

Page 23: 1 Ordenando. 2 Sorting Input Una secuencia de numeros a 1, a 2, a 3, …, a n Output Una permutación (reorden) a’ 1, a’ 2, a’ 3, …, a’ n de la input, tal

23

Peor caso- Worst Case

1 2 3 4 5 6 7 8 9 10 11

1 2 3 4 5 6 7 8 9 10 11

2 3 4 5 6 7 8 9 10 11

3 4 5 6 7 8 9 10 11

4 5 6 7 8 9 10 11

nnTnT

TT

)1()(

1)1()0(

Page 24: 1 Ordenando. 2 Sorting Input Una secuencia de numeros a 1, a 2, a 3, …, a n Output Una permutación (reorden) a’ 1, a’ 2, a’ 3, …, a’ n de la input, tal

24

Analisis del Worst-Case

nnTnT

TT

)1()(

1)1()0(

)1()2()1( nnTnT

)2()3()2( nnTnT

)2()1()2(

...

TT

n

iiTnT

2)1()(

)( 2nO

Page 25: 1 Ordenando. 2 Sorting Input Una secuencia de numeros a 1, a 2, a 3, …, a n Output Una permutación (reorden) a’ 1, a’ 2, a’ 3, …, a’ n de la input, tal

25

Aplicacion de Quicksort:Selecting k-th smallest element

quickselect:1. If |S|=1 then k=1 and return the element in S as the answer.2. Pick a pivot element,vS.

3. Partition S-{v} into S1and S2, as was done with quicksort

4. If k |S1| the kth smallest element must be in S1. In this case return quickselect(S1,k). If k=1+|S1|, then the pivot is the kth smallest element and we can return it as the answer. Otherwise, the kth smallest element is in S2, and it is the (k-|S1|-1)st smallest in S2 . We make a recursive call and return quickselect(S2, k-|S1|-1).

Complexity: O(n) in averageApplication: Finding Median

Page 26: 1 Ordenando. 2 Sorting Input Una secuencia de numeros a 1, a 2, a 3, …, a n Output Una permutación (reorden) a’ 1, a’ 2, a’ 3, …, a’ n de la input, tal

26

adivinando• Player 1: Pincha un nº x entre 1 y 10.• Player 2: Trata de determinar x haciendo la

pregunta:• Es x y ?

1,2,3,4,5,6,7,8,9,10

1,2,3,4,5

5

6,7,8,9,10

5

8

76,7,8

8

5

41,2,3

41,2 3

21

6,7

76

9,10

1096 6

7 9 9

8

1 1

2 2 4

3

4,5

3

Page 27: 1 Ordenando. 2 Sorting Input Una secuencia de numeros a 1, a 2, a 3, …, a n Output Una permutación (reorden) a’ 1, a’ 2, a’ 3, …, a’ n de la input, tal

27

1,2,3,4,5,6

1,2,3

1,2 3

21

1 1

2 2

3 3

4,5,6

4,5 6

54

4 4

5 5

1,2,3,4,5,6

1,2,3,4

1,2 6

21

1 1

2 5

4 4

5,6

3,4 5

43

3 3

52

1,2,3,4,5,6

3,4,5,62

12

1 1

2,3,4,5,6

4

3

3 3

2

4,5,6

6

55,6

5

5

4 4

Page 28: 1 Ordenando. 2 Sorting Input Una secuencia de numeros a 1, a 2, a 3, …, a n Output Una permutación (reorden) a’ 1, a’ 2, a’ 3, …, a’ n de la input, tal

28

a<b<ca<c<bb<a<cb<c<ac<a<bc<b<a

b<aa<b

a<b<ca<c<b

b<a<cb<c<a

c<a<b c<b<a

c<aa<c

a<b<ca<c<b

c<a<b

a<b<c a<c<b

c<bb<c

b<a<cb<c<a

c<b<a

c<bb<c

c<aa<c

b<a<c b<c<a

Decision Trees

Page 29: 1 Ordenando. 2 Sorting Input Una secuencia de numeros a 1, a 2, a 3, …, a n Output Una permutación (reorden) a’ 1, a’ 2, a’ 3, …, a’ n de la input, tal

29

• Un árbol binario de profundidad d posee a lo más 2d hojas.

• Un árbol binario con L hojas tiene profundidad a lo menos log L

Page 30: 1 Ordenando. 2 Sorting Input Una secuencia de numeros a 1, a 2, a 3, …, a n Output Una permutación (reorden) a’ 1, a’ 2, a’ 3, …, a’ n de la input, tal

30

Bucket Sort

1

36

8

12

n=5

O(n+b)

3

1

12

123456789

101112

b=12

1

1

11, 3, 3, 6, 8, 12

Page 31: 1 Ordenando. 2 Sorting Input Una secuencia de numeros a 1, a 2, a 3, …, a n Output Una permutación (reorden) a’ 1, a’ 2, a’ 3, …, a’ n de la input, tal

31

Radix Sort

000001510

343064 124

216027008

000 001 064027008

000

001

510

343

064124

216027008

123456789

0123456789

0 000 001510

343

064

124216027

008123456789

0

510343

124216

000 001 510343064 124 216027008

n =9b =10p =3

O(p(n+b))