Este repositorio contendrá ciertos algoritmos eficientes, descritos en el curso de 'Diseño y Análisis de Algoritmos, Parte I' dictado en Coursera.
Por el momento se tienen los algoritmos de:
- MergeSort: ordena listas desordenadas de números en tiempo O(n log n).
- Invertion: retorna una lista de tuplas con los valores en una lista que cumplan con la condición de
i < j
yA[i] > A[j]
, siendoi
,j
índices de la lista yA
la lista con valores en desorden. Tiempo de ejecución O(n log n). - CountInvertion: retorna el número de elementos que cumplen con la condición de
Invertion
, para cantidades de datos considerables, si se quiere saber solo el número, este método es mas rápido queInvertion
, ya que el espacio a utilizar es mucho menor. Tiempo de ejecución O(n log n). - QuickSort: ordena listas desordenadas de números en tiempo de ejecución promedio O(n log n) y espacio O(1).
- RandomizedSelection: retorna el i-ésimo número más pequeño de una lista con números desordenados en tiempo de ejecución promedio O(n) y espacio O(1).
- ClosestPair: de una lista con puntos en un plano, retorna los puntos más cercanos en un tiempo de ejecución O(n log n).
Los algoritmos están desarrollados en Python 3.4.
promedio: se refiere a que el algoritmo está construido en base a elecciones aleatorias y que probabilísticamente debería ser ejecutado en dicho tiempo.