1 Ordenando. 2 Sorting Input Una secuencia de numeros a 1, a 2, a 3, …, a n Output Una...

Post on 25-Jan-2016

216 views 1 download

Transcript of 1 Ordenando. 2 Sorting Input Una secuencia de numeros a 1, a 2, a 3, …, a n Output Una...

1

Ordenando

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

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

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

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)

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

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)

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?

9

Inversion Ejemplo

10

Heapsort

• Algoritmos involucrados

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

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

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

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?

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);}

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)

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

16

Mergesort

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

• Divide-and-conquer

• requiere memoria adicional

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.

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

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 )

20

Escoger Pivote

• El primer elemento• Mala opción

• Un elemento al azar

• Median

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

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

22

Mejor caso- Best Case

nnTnT

TT

)2/(2)(

1)1()0(

)log()( nnOnT

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(

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

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

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

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

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

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

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

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