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