Bucket Sort AO

download Bucket Sort AO

of 11

Transcript of Bucket Sort AO

  • 8/17/2019 Bucket Sort AO

    1/11

     

    Bucket SortAlgoritmos de ordenamiento

    es un algoritmo de ordenación que funcionadividiendo un vector en un número finito derecipientes. Cada recipiente es entoncesordenado individualmente 

    Andrés Felipe Serna Caicedo

    07/10/2010

  • 8/17/2019 Bucket Sort AO

    2/11

    Bucket Sort

    El ordenamiento por casilleros (bucket sort en inglés) es un algoritmo de

    ordenamiento que distribuye todos los elementos a ordenar entre un número finito de

    casilleros. Cada casillero sólo puede contener los elementos que cumplan unasdeterminadas condiciones. En el ejemplo esas condiciones son intervalos de números.

    Las condiciones deben ser excluyentes entre sí, para evitar que un elemento pueda ser

    clasificado en dos casilleros distintos. Después cada uno de esos casilleros se ordena

    individualmente con otro algoritmo de ordenación (que podría ser distinto según el

    casillero), o se aplica recursivamente este algoritmo para obtener casilleros con menos

    elementos. Se trata de una generalización del algoritmo Pigeonhole sort. Cuando los

    elementos a ordenar están uniformemente distribuidos la complejidad computacional de

    este algoritmo es de O(n).

    El algoritmo contiene los siguientes pasos:

    1. Crear una colección de casilleros vacíos

    2. Colocar cada elemento a ordenar en un único casillero

    3. Ordenar individualmente cada casillero

    4. devolver los elementos de cada casillero concatenados por orden

    5.

    http://es.wikipedia.org/wiki/Algoritmo_de_ordenamientohttp://es.wikipedia.org/wiki/Algoritmo_de_ordenamientohttp://es.wikipedia.org/w/index.php?title=Pigeonhole_sort&action=edit&redlink=1http://es.wikipedia.org/wiki/Complejidad_computacionalhttp://es.wikipedia.org/wiki/Cota_superior_asint%C3%B3ticahttp://es.wikipedia.org/wiki/Cota_superior_asint%C3%B3ticahttp://es.wikipedia.org/wiki/Complejidad_computacionalhttp://es.wikipedia.org/w/index.php?title=Pigeonhole_sort&action=edit&redlink=1http://es.wikipedia.org/wiki/Algoritmo_de_ordenamientohttp://es.wikipedia.org/wiki/Algoritmo_de_ordenamiento

  • 8/17/2019 Bucket Sort AO

    3/11

    Historia

    Herman Hollerith (feb. 29, 1860 hasta nov. 17, 1929) es el primero conocido por haber

    generado un algoritmo similar a la Base de ordenación.

    Era hijo de inmigrantes alemanes, nació en Buffalo, Nueva York y fue un Estadístico del

    Censo. Él desarrolló una perforadora de tarjetas Tabulating Machine.

    máquina de Hollerith incluyó ponche, tabulador y clasificador, y se utilizó para generar el

    censo de población oficial de 1890. El censo tomó seis meses, y en otros dos años, todos

    los datos del censo se completó y se define.

    Hollerith formó la empresa Tabulating Machine en 1896. La compañía se fusionó con

    International Time Recording Company y Computing Scale Company para formar equipo

    Tabulating Recording Company (CTR) en 1911. CTR fue el predecesor de IBM. CTR

    cambió su nombre a International Business Machines Corporation en 1924.

    Hollerith se desempeñó como ingeniero de consultoría con el CTR hasta su retiro en

    1921.

    Hay referencias a Harold H. Seward, un científico de la computación, como el

    desarrollador de Radix sort en 1954 en el MIT. También desarrolló el tipo de recuento. 

  • 8/17/2019 Bucket Sort AO

    4/11

    Análisis del Algoritmo

    1.  Correctitud

    Inicio

    1.  count=bucketbucket: arreglo donde se van a ingresar los números de forma ordenada pues es

    aquí donde el método guardara sus datos para mostrarlos y ubicarlos en su orden

    de menor a mayor

    2.  arr:= a;este es el arreglo de números que le entra al bucket para ser organizado por el

    algoritmo

    3.  i := 0;i: este es el máximo valor que encontraremos en el arreglo podríamos de cir que

    es la forma en que delimitamos al algoritmo para el mejor y el pero caso

    Mantenimiento

    1.  i0;bucket[i]-- el bucket va a decrementar en cada cilco -1 paraacomodar el numero dentro de un grupo y hace la comparación hasta que el

    bucket en la posición [i] sea menor o igual a cero hasta ese momento termina elese for

    5.  a[j++]:=i en la posición j del vector a se incorporara o se insertara el numero yaorganizado, j es una varia ble que esta en el for externo y esta definida que es el

    numero del ciclo externo que va a ser la posición en el arreglo ya que ahí se

    insertara el numero con su respectivo orden para después ser mostrado

    Finalización

    a[] con el arreglo completo ya organizado me menor a mayor, este es el

    resultado final del algorimo. 

  • 8/17/2019 Bucket Sort AO

    5/11

    1.  Calcular el orden de complejidad

    Es una generalización del tipo de recuento, y trabaja en el supuesto de queclaves para ser ordenados son uniformemente distribuidos en un área dedistribución conocida (por ejemplo de 1 a

    m).Es una especie estable, donde el orden relativo de cualquiera de los doselementos con lamisma clave se conserva.Funciona de la siguiente manera:configurar cubos m donde cada segmento es responsable de una porción igual dela gama de llaves de la matriz.coloque en cubos apropiados.ordenar los elementos en cada segmento que no esté vacía mediante laordenación por inserción.

    concatenar listas ordenadas de elementos de los cubos para conseguir el finúltimo clasificado.

     Análisis de tiempo de ejecución de la ordenación del cubo:Cubos son creados sobre la base de la gama de elementos de la matriz. Esto esuna operación de tiempo lineal.Cada elemento se coloca en su cubo correspondiente, que tiene linealestiempo.tipo de inserción tarda cuadrática a correr.La concatenación de listas ordenadas toma un tiempo lineal. 

     public static int[] bucketSort(int[] arr) {

    int i, j;

    1.  int[] count = new int[arr.length];2.  Arrays.fill(count, 0);3.  for(i = 0; i < arr.length; i++ ) {4.  count[arr[i]]++;

    }

    5.  for(i=0,j=0; i < count.length; i++) {6.  for(; count[i]>0; (count[i])--) {7.  arr[j++] = i;

    }

    }

    return arr;

    }

  • 8/17/2019 Bucket Sort AO

    6/11

    Orden de complejidad

    1.  (ta)(tv)2.  ta3.  (ta)+(n-1)(ti+n)(tc)4.  2(tv)(ti)(n-1)5.  2(ta)+(n-1)(ti+n)(tc)6.  ((n-1)(ti-n)(tc))(n-1)7.  (ta)(tv)(ti)(n-1)(n-1)

    Algoritmo Complejidadint[] count = new int[arr.length]; (ta)(tv)

    Arrays.fill(count, 0); (ta)

    for(i = 0; i < arr.length; i++ )  (ta)+(n-1)(ti+n)(tc)

    count[arr[i]]++;  2(tv)(ti)(n-1)

    for(i=0,j=0; i < count.length;

    i++) 2(ta)+(n-1)(ti+n)(tc)

    for(; count[i]>0; (count[i])--)  ((n-1)(ti-n)(tc))(n-1)

    arr[j++] = i; (ta)(tv)(ti)(n-1)(n-1)

    2.  Calcular el orden del algoritmo

    El tiempo de ejecución para la clasificación del cubo esӨ (n) para todas las operaciones lineal O (n ^ 2) el tiempo necesario para ordenar lainserción en cada segmento.

    n-1

    T (n) = Ө (n) +Σ O (n ^ 2)i = 0Utilizando las soluciones matemáticas, el tiempo por encima de ejecución viene a serlineal.

    Duración de tipo cubo se suele expresar comoT (n) = O (n+ m), dondem es el rango de valores de entrada

  • 8/17/2019 Bucket Sort AO

    7/11

    n es el número de elementos de la matriz.

    Si el rango es el fin de n, a continuación, ordenar cubo es lineal. Pero si el rango esamplio, a continuación, ordenar puede ser peor que cuadrática.

    Ejemplo del Bucket Sort.

    El ejemplo se utiliza una matriz de entrada de 9 elementos. Los valores clave está en elrango de 10 a 19. Se utiliza una matriz auxiliar de listas enlazadas que se utiliza comocubos.Los elementos se colocan en cubos apropiados y los vínculos se mantienen para queapunte al siguiente elemento. Orden de las dos teclas con un valor de 15 se mantienedespués de su clasificación. 

    Pseudocodigo

  • 8/17/2019 Bucket Sort AO

    8/11

     

    Ventajas Base y tipo cubo son estables, la preservación del orden existente de claves iguales.Trabajan en un tiempo lineal, a diferencia de la mayoría de otros tipos. En otras palabras,

    no atascar cuando un gran número de elementos que habrá que resolver. La mayoría delas clases de ejecución en O (n log n) o O (n ^ 2) el tiempo.El tiempo para ordenar por artículo es constante, ya que no las comparaciones entreelementos se hacen. Con suerte, el tiempo para ordenar por tiempo aumenta con elnúmero de elementos.Radix sort es particularmente eficaz cuando se tiene un gran número de registros paraordenar con claves cortas.

    Desventajas clase Base y el cubo no funcionan bien cuando las claves son muy largos, como el tiempode clasificación total es proporcional a la longitud de la clave y el número de elementos a

    ordenar.Ellos no son "in situ", utilizando más memoria de trabajo de un tipo tradicional.

    Orden del algoritmo

     Algoritmo Orden

    int i, j; 1

    1.  int[] count = new int[arr.length]; 1

    2.  Arrays.fill(count, 0); 1

    3.  for(i = 0; i < arr.length; i++ ) { O(n)

    4.  count[arr[i]]++; O(n)

    5.  for(i=0,j=0; i < count.length; i++) { O(n)

    6.  for(; count[i]>0; (count[i])--) { O(n^2)

    7.  arr[j++] = i; O(n^2)

    n-1T (n) = Ө (n) +Σ O(n^2) 

    i=0

  • 8/17/2019 Bucket Sort AO

    9/11

    Representacion Grafica

    n T(n)

    1 1

    2 6

    3 214 52

    5 105

    6 186

    7 301

    8 456

    9 657

    10 910

    11 1221

    12 1596

    13 2041

    14 2562

    15 3165

    16 3856

    17 4641

    18 5526

    19 6517

    20 7620

    0

    200000

    400000

    600000

    800000

    1000000

    1200000

    Series1

  • 8/17/2019 Bucket Sort AO

    10/11

    Tiempo de ejecución

    En el tiempo de ejecución en la plataforma de java varia por la razón que los valores que

    entran en el arreglo cambian y cambia su orden con el mismo tamaño y limite para el

    valor máximo su tiempo de ejecución varía entre un lapso siempre grande ejemplo de 16 a

    31 con los mismo valores se hizo un promedio y con valores reales es una aproximación

    con milisegundos

    n T(n) t

    1 1 0,448861

    2 6 0,501414

    3 21 0,553966

    4 52 0,606519

    5 105 0,659072

    6 186 0,711625

    7 301 0,7641788 456 0,81673

    9 657 0,869283

    10 910 0,921836

    11 1221 0,974389

    12 1596 1,026942

    13 2041 1,079494

    14 2562 1,132047

    15 3165 1,1846

    16 3856 1,237153

    17 4641 1,28970618 5526 1,342258

    19 6517 1,394811

    20 7620 1,447364

    0

    10

    20

    30

    40

    50

    60

    Series1

  • 8/17/2019 Bucket Sort AO

    11/11

    Bibliografia

    1.  Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest, and Clifford Stein. Introductionto Algorithms,  Second Edition. MIT Press and McGraw-Hill, 2001. ISBN 0-262-03293-7. Section 8.4: Bucket sort, pp.174 –177. 

    2.  http://en.wikipedia.org/wiki/Bucket_sort#Comparison_with_other_sorting_algorithms 

    3.  http://www.brpreiss.com/books/opus5/html/page76.html 4.  http://www.personal.kent.edu/~rmuhamma/Algorithms/MyAlgorithms/Sorting/bucketSor

    t.htm 

    5.  http://www.cs.unb.ca/~bremner/teaching/java_examples/snippet/BucketSort.java/ 

    http://es.wikipedia.org/wiki/Thomas_H._Cormenhttp://es.wikipedia.org/wiki/Charles_E._Leisersonhttp://es.wikipedia.org/wiki/Ronald_L._Rivesthttp://es.wikipedia.org/wiki/Clifford_Steinhttp://es.wikipedia.org/wiki/Introduction_to_Algorithmshttp://es.wikipedia.org/wiki/Introduction_to_Algorithmshttp://es.wikipedia.org/wiki/Especial:FuentesDeLibros/0262032937http://en.wikipedia.org/wiki/Bucket_sort#Comparison_with_other_sorting_algorithmshttp://en.wikipedia.org/wiki/Bucket_sort#Comparison_with_other_sorting_algorithmshttp://www.brpreiss.com/books/opus5/html/page76.htmlhttp://www.brpreiss.com/books/opus5/html/page76.htmlhttp://www.personal.kent.edu/~rmuhamma/Algorithms/MyAlgorithms/Sorting/bucketSort.htmhttp://www.personal.kent.edu/~rmuhamma/Algorithms/MyAlgorithms/Sorting/bucketSort.htmhttp://www.personal.kent.edu/~rmuhamma/Algorithms/MyAlgorithms/Sorting/bucketSort.htmhttp://www.cs.unb.ca/~bremner/teaching/java_examples/snippet/BucketSort.java/http://www.cs.unb.ca/~bremner/teaching/java_examples/snippet/BucketSort.java/http://www.cs.unb.ca/~bremner/teaching/java_examples/snippet/BucketSort.java/http://www.personal.kent.edu/~rmuhamma/Algorithms/MyAlgorithms/Sorting/bucketSort.htmhttp://www.personal.kent.edu/~rmuhamma/Algorithms/MyAlgorithms/Sorting/bucketSort.htmhttp://www.brpreiss.com/books/opus5/html/page76.htmlhttp://en.wikipedia.org/wiki/Bucket_sort#Comparison_with_other_sorting_algorithmshttp://es.wikipedia.org/wiki/Especial:FuentesDeLibros/0262032937http://es.wikipedia.org/wiki/Introduction_to_Algorithmshttp://es.wikipedia.org/wiki/Introduction_to_Algorithmshttp://es.wikipedia.org/wiki/Clifford_Steinhttp://es.wikipedia.org/wiki/Ronald_L._Rivesthttp://es.wikipedia.org/wiki/Charles_E._Leisersonhttp://es.wikipedia.org/wiki/Thomas_H._Cormen