logo

Algoritmo de clasificación de cubos

En este artículo, analizaremos el algoritmo de clasificación de depósitos. Los elementos de datos en la clasificación de depósitos se distribuyen en forma de depósitos. En entrevistas técnicas o de codificación para ingenieros de software, los algoritmos de clasificación son muy solicitados. Por eso es importante discutir el tema.

La clasificación de depósitos es un algoritmo de clasificación que separa los elementos en varios grupos que se denominan depósitos. Los elementos de la clasificación por depósitos primero se dividen uniformemente en grupos llamados depósitos y luego se clasifican mediante cualquier otro algoritmo de clasificación. Después de eso, los elementos se reúnen de forma ordenada.

El procedimiento básico para realizar la clasificación del cubo se detalla a continuación:

  • Primero, divida el rango en una cantidad fija de depósitos.
  • Luego, tira cada elemento en su cubo correspondiente.
  • Después de eso, clasifique cada depósito individualmente aplicando un algoritmo de clasificación.
  • Y por último, concatene todos los depósitos ordenados.

Las ventajas de la clasificación por cubos son:

  • La clasificación de cubos reduce el no. de comparaciones.
  • Es asintóticamente rápido debido a la distribución uniforme de elementos.

Las limitaciones de la clasificación de depósitos son:

  • Puede que sea o no un algoritmo de clasificación estable.
  • No sirve de nada si tenemos un conjunto grande porque aumenta el coste.
  • No es un algoritmo de clasificación in situ, porque se requiere algo de espacio adicional para clasificar los depósitos.

La complejidad mejor y promedio de la clasificación de depósitos es O(norte + k) , y la complejidad del peor de los casos de clasificación de depósitos es En2) , dónde norte es el número de elementos.

La clasificación por cubos se utiliza habitualmente:

  • Con valores de coma flotante.
  • Cuando la entrada se distribuye uniformemente en un rango.

La idea básica para realizar la clasificación del cubo se da a continuación:

 bucketSort(a[], n) 1. Create 'n' empty buckets 2. Do for each array element a[i] 2.1. Put array elements into buckets, i.e. insert a[i] into bucket[n*a[i]] 3. Sort the elements of individual buckets by using the insertion sort. 4. At last, gather or concatenate the sorted buckets. End bucketSort 

Ahora, veamos el algoritmo de clasificación de depósitos.

Algoritmo

 Bucket Sort(A[]) 1. Let B[0....n-1] be a new array 2. n=length[A] 3. for i=0 to n-1 4. make B[i] an empty list 5. for i=1 to n 6. do insert A[i] into list B[n a[i]] 7. for i=0 to n-1 8. do sort list B[i] with insertion-sort 9. Concatenate lists B[0], B[1],........, B[n-1] together in order End 

Enfoque de dispersión

Podemos comprender el algoritmo de clasificación de Bucket mediante un enfoque de dispersión y recopilación. Aquí, los elementos dados se distribuyen primero en cubos. Después de la dispersión, los elementos de cada depósito se clasifican mediante un algoritmo de clasificación estable. Por fin, los elementos ordenados se reunirán en orden.

Tomemos una matriz sin clasificar para comprender el proceso de clasificación de depósitos. Será más fácil entender la clasificación de depósitos con un ejemplo.

Dejemos que los elementos de la matriz sean:

ordenar cubos

Ahora, cree depósitos con un rango de 0 a 25. Los rangos de depósitos son 0-5, 5-10, 10-15, 15-20, 20-25. Los elementos se insertan en los cubos según el rango del cubo. Supongamos que el valor de un artículo es 16, por lo que se insertará en el depósito con el rango 15-20. De manera similar, cada elemento de la matriz se insertará en consecuencia.

Se sabe que esta fase es la dispersión de elementos de matriz .

ordenar cubos

Ahora, clasificar cada cubo individualmente. Los elementos de cada depósito se pueden ordenar utilizando cualquiera de los algoritmos de clasificación estables.

ordenar cubos

Por fin, recolectar los elementos ordenados de cada cubo en orden

ordenar cubos

Ahora, la matriz está completamente ordenada.

Complejidad de clasificación de depósitos

Ahora, veamos la complejidad temporal de la clasificación de depósitos en el mejor de los casos, en el caso promedio y en el peor de los casos. También veremos la complejidad espacial del tipo cubo.

1. Complejidad del tiempo

Caso Tiempo Complejidad
Mejor caso O(norte + k)
Caso promedio O(norte + k)
Peor de los casos En2)
    Complejidad en el mejor de los casos:Ocurre cuando no se requiere clasificación, es decir, la matriz ya está ordenada. En la clasificación por depósitos, el mejor de los casos se produce cuando los elementos se distribuyen uniformemente en los depósitos. La complejidad será mejor si los elementos ya están ordenados en los depósitos.
    Si utilizamos la ordenación por inserción para ordenar los elementos del depósito, la complejidad general será lineal, es decir, O(n + k), donde O(n) es para hacer los depósitos y O(k) es para ordenar los elementos del depósito. utilizando algoritmos con complejidad de tiempo lineal en el mejor de los casos.
    La complejidad temporal del mejor de los casos para la clasificación de depósitos es O(norte + k) .Complejidad promedio del caso -Ocurre cuando los elementos de la matriz están en un orden desordenado que no es ascendente ni descendente correctamente. La clasificación por cubos se ejecuta en el tiempo lineal, incluso cuando los elementos están distribuidos uniformemente. La complejidad promedio del tiempo de caso de la clasificación de depósitos es O(norte + K) .Peor caso de complejidad:En la clasificación por depósitos, el peor de los casos ocurre cuando los elementos están en el rango cercano de la matriz, por lo que deben colocarse en el mismo depósito. Entonces, algunos depósitos tienen más elementos que otros.
    La complejidad empeorará cuando los elementos estén en orden inverso.
    La complejidad temporal del peor de los casos para la clasificación de depósitos es En2) .

2. Complejidad espacial

Complejidad espacial O(n*k)
Estable
  • La complejidad espacial de la clasificación por depósitos es O (n*k).

Implementación de clasificación de cubos.

Ahora, veamos los programas de clasificación de depósitos en diferentes lenguajes de programación.

Programa: Escriba un programa para implementar la clasificación de depósitos en lenguaje C.

 #include int getMax(int a[], int n) // function to get maximum element from the given array { int max = a[0]; for (int i = 1; i max) max = a[i]; return max; } void bucket(int a[], int n) // function to implement bucket sort { int max = getMax(a, n); //max is the maximum element of array int bucket[max], i; for (int i = 0; i <= max; i++) { bucket[i]="0;" } for (int i="0;" < n; bucket[a[i]]++; j="0;" 0) a[j++]="i;" bucket[i]--; void printarr(int a[], int n) function to print array elements ++i) printf('%d ', a[i]); main() a[]="{54," 12, 84, 57, 69, 41, 9, 5}; n="sizeof(a)" sizeof(a[0]); is the size of printf('before sorting are - 
'); printarr(a, n); bucket(a, printf('
after pre> <p> <strong>Output</strong> </p> <p>After the execution of above code, the output will be -</p> <img src="//techcodeview.com/img/ds-tutorial/04/bucket-sort-algorithm-5.webp" alt="bucket sort"> <p> <strong>Program:</strong> Write a program to implement bucket sort in C++.</p> <pre> #include using namespace std; int getMax(int a[], int n) // function to get maximum element from the given array { int max = a[0]; for (int i = 1; i max) max = a[i]; return max; } void bucket(int a[], int n) // function to implement bucket sort { int max = getMax(a, n); //max is the maximum element of array int bucket[max], i; for (int i = 0; i <= max; i++) { bucket[i]="0;" } for (int i="0;" < n; bucket[a[i]]++; j="0;" 0) a[j++]="i;" bucket[i]--; void printarr(int a[], int n) function to print array elements ++i) cout< <a[i]<<' '; main() a[]="{34," 42, 74, 57, 99, 84, 9, 5}; n="sizeof(a)" sizeof(a[0]); is the size of cout<<'before sorting are - 
'; printarr(a, n); bucket(a, cout<<'
after pre> <p> <strong>Output</strong> </p> <p>After the execution of above code, the output will be -</p> <img src="//techcodeview.com/img/ds-tutorial/04/bucket-sort-algorithm-6.webp" alt="bucket sort"> <p> <strong>Program:</strong> Write a program to implement bucket sort in C#.</p> <pre> using System; class Bucket { static int getMax(int[] a) // function to get maximum element from the given array { int n = a.Length; int max = a[0]; for (int i = 1; i max) max = a[i]; return max; } static void bucket(int[] a) // function to implement bucket sort { int n = a.Length; int max = getMax(a); //max is the maximum element of array int[] bucket = new int[max+1]; for (int i = 0; i <= 10 max; i++) { bucket[i]="0;" } for (int i="0;" < n; bucket[a[i]]++; j="0;" 0) a[j++]="i;" bucket[i]--; static void printarr(int[] a) * function to print the array int i; n="a.Length;" (i="0;" console.write(a[i] + ' '); main() int[] a="{" 95, 50, 45, 15, 20, }; console.write('before sorting elements are - 
'); printarr(a); bucket(a); console.write('
after pre> <p> <strong>Output</strong> </p> <p>After the execution of above code, the output will be -</p> <img src="//techcodeview.com/img/ds-tutorial/04/bucket-sort-algorithm-7.webp" alt="bucket sort"> <p> <strong>Program:</strong> Write a program to implement bucket sort in Java.</p> <pre> public class Bucket { int getMax(int a[]) // function to get maximum element from the given array { int n = a.length; int max = a[0]; for (int i = 1; i max) max = a[i]; return max; } void bucket(int a[]) // function to implement bucket sort { int n = a.length; int max = getMax(a); //max is the maximum element of array int bucket[] = new int[max+1]; for (int i = 0; i <= 9 max; i++) { bucket[i]="0;" } for (int i="0;" < n; bucket[a[i]]++; j="0;" 0) a[j++]="i;" bucket[i]--; void printarr(int a[]) * function to print the array int i; n="a.length;" (i="0;" system.out.print(a[i] + ' '); public static main(string[] args) a[]="{" 90, 40, 5, 15, 30, }; bucket b1="new" bucket(); system.out.print('before sorting elements are - 
'); b1.printarr(a); b1.bucket(a); system.out.print('
after pre> <p> <strong>Output</strong> </p> <p>After the execution of above code, the output will be -</p> <img src="//techcodeview.com/img/ds-tutorial/04/bucket-sort-algorithm-8.webp" alt="bucket sort"> <p>So, that&apos;s all about the article. Hope the article will be helpful and informative to you.</p> <p>This article was not only limited to the algorithm. Along with the algorithm, we have also discussed the bucket sort complexity, working, and implementation in different programming languages.</p> <hr></=></pre></=></pre></=></pre></=>