g te c sesion4a-bigdatasystemsanalytics
TRANSCRIPT
9
10
12
28
Tony Hoare, Doctor Honoris Causa por la Universidad Complutense de Madrid, 2013
La idea: dividir escogiendo un ‘pivote’, poner los pequeños a un lado y los grandes al
otro lado del pivote
Creado por Tony Hoare en 1961 cuando era solo un estudiante
Caso Base: Si la longitud de la lista es 0 ó 1, entonces ya está ordenada. Caso General:
1. Seleccionar un pivote (el último elemento) y colocarlo en su sitio definitivo de forma que los menores queden antes y los mayores después aunque desordenados.2. Llamar recursivamente con input la sublista anterior y la posterior aplicando el mismo procedimiento3. No hace falta mezclar porque las dos sub-listas ya estarán ordenadas y serán contiguas.
Procedimiento ‘divide’ de Quick-Sort:
6 – 13 – 5 – 1 – 0 – 9 – 15 – 8 – 2 – 7
6 – 13 – 5 – 1 – 0 – 9 – 15 – 8 – 2 – 76 – 13 – 5 – 1 – 0 – 9 – 15 – 8 – 2 - 76 – 13 – 5 – 1 – 0 – 9 – 15 – 2 – 7 – 8
6 – 13 – 5 – 1 – 0 – 9 – 2 – 7 – 8 – 15
6 – 13 – 5 – 1 – 0 – 2 – 7 – 9 – 8 – 15
6 – 13 – 5 – 1 – 0 – 2 – 7 – 9 – 8 – 15
6 – 13 – 5 – 1 – 0 – 2 – 7 – 9 – 8 – 15
6 – 13 – 5 – 1 – 0 – 2 – 7 – 9 – 8 – 15
6 – 5 – 1 – 0 – 2 – 7 – 13 – 9 – 8 – 15
6 – 5 – 1 – 0 – 2 – 7 – 13 – 9 – 8 – 15
6 – 5 – 1 – 0 – 2 – 7 – 13 – 9 – 8 – 15
Completidad de ‘divide’ o(n)Complejidad de Quick-Sorto(nlogn)
Reflexión:
Cómo paralelizar un algoritmo óptimo de ordenación
Diferencias entre Merge-Sort y Quick-Sort
Función factorial
Alternativa iterativa:
Int Factorial (int n)int f=1;{For (i=1; i<=n; i++) {f=f*i}Return f}
--Varias instrucciones--Variables auxiliares--Más código, menos fiable
Alternativa recursiva 1:
Int Factorial (int n){If n=0 return 1Else return n*Factorial(n-1)}
-- Una única instrucción--No existen variables locales--Menos código, más fiable
Alternativa recursiva 2:
Int Factorial (int n, m){If n=0 return mElse return Factorial(n-1, n*m)}
-- Programación Funcional Final--No deja calculos pendientes