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 que a’ 1 < a’ 2 < a’ 3 < …< a’ n Ejemplo Input: Output:
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(n 2 ), considerando, O(n) fases, y donde cada fase necesita O(n) para hallar el p’esimo nº más pequeño Fase Fase Fase Fase Fase 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 posicion posicion posicion posicion posicion 5
5 fase fase fase fase 5 En la fase p, el p’ésimo elemento más grande deberá estar en la posición correcta. O(n 2 )
6 Insertion sort n-1 fases, de 2 hasta n antes fase Despues fase 4
fase Despues fase 6 fase 3 fase 4 fase 5 fase Después de fase p, elementos en posiciones 1 hasta la p-1 están ordenados. O(n 2 )
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 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
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); }
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
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(n 2 ) worst-case running time Es el más rápido en la practica.
T(i)O(n) O(1) T(n-i)
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
22 Mejor caso- Best Case
23 Peor caso- Worst Case
24 Analisis del Worst-Case
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,v S. 3.Partition S-{v} into S 1 and S 2, as was done with quicksort 4.If k |S 1 | the kth smallest element must be in S 1. In this case return quickselect(S 1,k). If k=1+|S 1 |, then the pivot is the kth smallest element and we can return it as the answer. Otherwise, the kth smallest element is in S 2, and it is the (k-|S 1 |-1)st smallest in S 2. We make a recursive call and return quickselect(S 2, k-|S 1 |-1). Complexity: O(n) in average Application: 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 55 6,7,8,9,10 55 8 77 6,7,8 88 5 44 1,2,3 41, ,7 76 9, 66 66 77 99 99 88 11 11 22 22 44 33 4,5 33
27 1,2,3,4,5,6 1,2,3 1,23 21 11 11 22 22 33 33 4,5,6 4,56 54 44 44 55 55 1,2,3,4,5,6 1,2,3,4 1,26 21 11 11 22 55 44 44 5,6 3,45 43 33 33 55 22 1,2,3,4,5,6 3,4,5,62 1 22 11 11 2,3,4,5,6 4 3 33 33 22 4,5,6 6 55 5,6 5 55 44 44
28 a<b<c a<c<b b<a<c b<c<a c<a<b c<b<a b<a a<b a<b<c a<c<b b<a<c b<c<a c<a<bc<b<a c<aa<c a<b<c a<c<b c<a<b a<b<ca<c<b c<bb<c b<a<c b<c<a c<b<a c<b b<c c<aa<c b<a<cb<c<a Decision Trees
29 Un árbol binario de profundidad d posee a lo más 2 d hojas. Un árbol binario con L hojas tiene profundidad a lo menos log L
30 Bucket Sort n=5 O(n+b) b= , 3, 3, 6, 8, 12
31 Radix Sort n =9 b =10 p =3 O(p(n+b))