You are on page 1of 3

Universidad Nacional de Ingeniera

Ciencias de la Computacin
Sorting in Linear Time
Yuri Nuez Medrano *
ynunezm@gmail.com

Figura 2: Datos de ingreso

Figura 1: Arbol de decisin instrucciones trazadas.


- El tiempo de ejecucin ( nmero de comparaciones).
- El caso peor tiempo de ejecucin es la altura h del arbol.
Resumen - Limite inferior en un ordenamiento de n elementos tiene
una altura (nlgn).
Se analizar algoritmos que tiene un tiempo de ejecucin
menor igual a (nlgn).
Prueba: nos enfocamos en el numero mnimo y mximo de
hojas que pudiera tener, entonces quedaria as.
1. Ordenamiento en Tiempo Lineal n! l 2h
n! 2h
Analizaremos algoritmos que pueden ordenar n elementos h lgn!
con (nlgn) comparaciones en el peor de los casos. Tambien teniendo en cuenta la formula de Stirling.
se examinar tres algortmos de ordenamiento que ejecutan n 1
n! = 2n( )n (1 + ( ))
en tiempo lineal e n
reeemplazamos por conveniencia.
h lg( ne )n
h nlg( ne )
1.1. Modelo de Arbol de Decision h nlgn nlge
En general ha1 , a2 , a3 , ..., an i cada nodo interno esta etique- h = (nlgn)
tado i, j donde i j {1, 2, 3, ...n} en el que compara.
- se compara ai vsaj
- el subarbol izquierdo compara ai aj . 1.2. Counting Sort
- el subarbol derecho compara ai > aj .
Se asume que cada uno de los n elementos de input(ingreso)
- cada leaf(hoja) tiene una permutacin de
es un entero de en el rango de 0 a k, para algun entero de
ha(1) , a(2) , .., a(n) i
k. Cuando k = O(n), el ordenamiento ejecuta en un tiempo
(n).
Comparando
Ejm: con los siguientes elementos donde A = 4, 1, 3, 4, 3 eva-
- un arbol para cada n.
luamos de la linea 1 a la 3 del algoritmo 1 en el grfico 2.
- un algoritmo que divide y realiza una comparacin.
Posteriormente, de la linea 4 al 5 del algoritmo 1 empezamos
- El arbol lista comparaciones a lo largo de todas las
a contar los elementos y lo guardamoe en el array C,como
* Escuela de Ciencias de la Computacin, 27-08-15 se ve en la siguiente figura 3

1
2

Algorithm 1: COUNTING_SORT(A,B,k)
Input: A[1...n], cada A[i] i 1...k
Figura 3: El conteo Output: B[1...n] ordenado de A
1 let C[0...k] be new array
2 for j = 0 to k do
3 C[i]=0
4 for j = 1 to A.length do
Figura 4: El conteo 5 C[A[j]]=C[A[j]]+1
6 //C[i] now contain the numbers of elements equal to i
Luego en la linea 7 al 8 del algoritmo 1 en el array sumamos 7 for i = 1 to k do
el iesimo elemeno mas el (i-1)esimo en i, como se ve en la 8 C[i]=C[i]+C[i-1]
siguiente figura 4 9 //C[i] now contain the numbers of elements less than or
Finalmente obtenemos el valor de B en la siguiente figura 5 equal to i
10 for j = A.length to 1 do
11 B[C[A[j]]]=A[j]
1.3. Radix Sort 12 C[A[j]]=C[A[j]]-1

Este algoritmo fue empleado en las maquinas de tarjetas


perforadas, la que slo se encuentran en los museos.
En el algoritmo 2 evaluamos el ejemplo en la figura 6 Asumi-
Algorithm 2: RADIX_SORT(A,d)
mos mejor el ordenamiento empezando por el digito menos
1 for j = 1 to d do
significativo.
El dgito en la posicin d. 2 use a stable sort to sort array A on digit i
-Asumimos po rinduccin el ordenamiento.
-Orden en el digito d, si dos elementos tienen el mismo
d-esimo elemento se quedara con el mismo orden.
- Si son diferentes el d-esimo dgito se ordena.

Anlisis
- Usamos counting sort por digito O(n + k).
- Evaluamos a d digitos entonces quedara O(d(n + k)).

1.4. Bucket sort


Figura 6: Radix sort
Se asume que los datos de input (ingreso) estan distribuido
uniformemente y tendran un tiempo de ejecucin con un
tiempo promedio de O(n).
Entonces te asegura que los ni son tan pequeos que puedes Algorithm 3: BUCKET_SORT(A)
ordenarlo con un insertion sort. 1 let B[0...n-1] be new array
2 n=A.length

Los datos input son valores de 0 al 1 . El algoritmo 3 for i = 0 to n 1 do


4 make B[i] an empty list
5 for i = 1 to n do
6 insert A[i] into list B[bnA[i]c]
7 for j = 0 to n 1 do
8 sort list B[i] with insertion sort
9 concadenate the list B[0],B[1],...,B[n-1] together ib order
Figura 5: El conteo
3

Figura 7: Radix sort

3 describe que se categorizan los valores en rangos de


dependiendo del numero de elementos, de igual tamao, en
donde se adicionan como una lista enlazada dependiendo
su rango, despues de haber ingresado los rangos se ordenan
dentro de cada iesima lista, y por ltimo se extrae to-
dos los datos ya ordenados de cada lista, como en la figura 7.

Referencias
[H.Cormen et al., 2009] H.Cormen, T., Leiserson, C., and
Riverson, R. L. (2009). Algorithms. The MIT Press.

You might also like