Olvídate de la burbuja y la papelera: La clasificación en cubos es la más rápida.

No te alejes porque el algoritmo Bucket Sort es posiblemente el mejor método de clasificación que ha aparecido en el mundo de los productos.

Gran afirmación, sí, lo sé - pero vamos a cubrir el por qué.

En este artículo de Bucket Sort

¿En qué consiste el método de clasificación de cubos?

Partiendo de la base de que quieres ordenar los datos de un array, la ordenación por cubos es un buen punto de partida. Si se ajusta a tus necesidades, no busques más, ¡tu búsqueda ha terminado!

La ordenación de un conjunto de elementos puede hacerse de dos maneras principales: recorriendo la lista y comparando cada valor con otro para encontrar el orden correcto (ordenación de burbuja), o dando a cada valor su propia área de almacenamiento y moviéndolos a su lugar respectivo (ordenación de cajón).

La ordenación por cubos funciona con el último método, es decir, la ordenación por cubos. Veamos con más detalle en qué se diferencia de la ordenación por contenedores antes de mostrarte por qué la ordenación por cubos es tan buena.

Bien, digamos que tenemos un array que contiene 10 enteros, estos son nuestros cubos. Tenemos un contador que actúa como el número de elementos en cada cubo - así que cuando empezamos este contador es igual al número de elementos en nuestra matriz es decir, 10.

Antes de empezar a ordenar esta matriz, vamos a llenar cada cubo con el mismo valor - un valor entero entre 0 y 9 inclusive.

Ahora que los 5 cubos están llenos, es el momento de pasar a la clasificación. ¿Cómo sabemos cuánta capacidad tiene cada cubo? Cada cubo contendrá el doble de los valores que actualmente contiene, es decir, 2n, donde n = 0...9 (10 cubos). La razón de duplicar las cosas aquí es porque cuando vas a mirar dentro de un cubo para ver si el valor que estás buscando está allí, sólo ocupará 1/10 del espacio.

Por ejemplo, el cubo 5 contiene 8 valores (8 * 2) y el siguiente cubo más pequeño, que contiene dos valores, contiene 4 (4 * 2). ¿Ves cómo esto es duplicar todo el camino hacia abajo?

Mirando nuestro primer valor a ordenar, es decir, el 5... sabemos que ir a buscar dentro del cubo número 5 sólo nos llevará una pequeña fracción de segundo debido a su baja capacidad. Ahora digamos que queremos encontrar dónde está el 34 dentro de nuestro array - ¡bien, buscar dentro del cubo #34 no nos llevará ni siquiera 0.000000001 segundos! Tardará una eternidad porque hay 100000 valores ahí dentro.

Muy bien, creo que ya lo has entendido. Ahora vamos a echar un vistazo a las alternativas de Bucket Sort.

Historia del algoritmo Bucket Sort

Entonces, ¿cuándo empezó este método? Se dice que el Bucket Sort se inventó en 1955, pero más tarde se descubrió que el método existía al menos desde 1945.

Empezó a ganar adeptos en la década de los 70, pero no se adoptó de forma generalizada hasta 1995, cuando la velocidad de los ordenadores empezó a despegar de verdad.

Hoy en día, la ordenación por cubos se ha convertido en uno de los algoritmos de ordenación más populares, el tercero después de la ordenación por fusión y la ordenación rápida. Aunque esto puede no parecer un gran problema porque tanto bin sort como bucket sort son generalmente O(n * log(n)), si tus datos son grandes querrás usar bucket sort de todos modos debido a su manera eficiente de hacer comparaciones.

¿Qué es la clasificación por contenedores y burbujas?

En Bin Sort la idea es tener un "área" separada para cada valor que se ordena. Este es un ejemplo de implementación de bin sort:

Esta implementación probablemente no sea más rápida que Bucket Sort y tiene más o menos la misma complejidad de tiempo que Bucket Sort, pero ¿qué pasaría si pudiéramos recortar ese pequeño extra? Pues bien, ¡podemos hacerlo!

Bubble Sort vs Bucket Sort - ¿Cómo encaja Bubble Sort en esta ecuación?

Con la ordenación por burbujas, todo lo que se hace es comparar 2 valores adyacentes e intercambiarlos si es necesario (un enfoque de fuerza bruta). La única diferencia con la ordenación por cubos es el tamaño de estos cubos, ya que en la ordenación por burbujas todos tienen el mismo tamaño. Si los haces del mismo tamaño que el cubo más grande en una ordenación por cubos, ¡obtienes una ordenación por cubos!

Bubble Sort vs Bucket Sort - ¿Por qué es más rápido el Bucket sort?

En pocas palabras, la complejidad temporal de la ordenación por burbujas es O(n^2). La complejidad temporal de la ordenación por cubos se puede encontrar multiplicando todas las ramas que van a tardar en encontrar elementos dentro de ella, es decir, buscar dentro de todos y cada uno de los cubos hasta que finalmente lo hayamos encontrado o no hayamos profundizado lo suficiente.

Si hiciéramos esto para 10 cubos con 100000 elementos en cada uno... bueno... no creo que nuestro sistema dure mucho tiempo - también es por eso que la clasificación de cubos no funciona muy bien porque no sólo tenemos que duplicar, sino que luego añadimos otro factor que se vuelve exponencialmente lento.

Ahora, ¿qué pasa si dejamos que la ordenación por cubos contenga 10 cubos con 100000 elementos en cada uno? ¿Cuánto tiempo tarda ahora el bucket sort? ¡O(n) (lineal)!

Así es. Lo mismo que si tuviéramos que hacer una búsqueda lineal a través de un array de 100000 enteros. Todas las ramas y comprobaciones que el algoritmo de ordenación de cubos está haciendo entre bastidores pueden reducirse a "¿es este entero menor o mayor que el que estoy buscando?", que también se encontraría utilizando una búsqueda lineal.

Clasificación de cubos Big O

La notación Big O de Bucket Sort es O(n + n * k), donde n = número de elementos en la matriz y k = número de cubos.

Complejidad del tiempo de clasificación de cubos

La complejidad temporal de una ordenación por cubos es una función del número de cubos. Una ordenación de cubos con un cubo tardará un tiempo constante, pero las ordenaciones de cubos con más de un cubo tendrán un tiempo de ejecución aditivo porque siempre se realizan dos operaciones en cada paso: 1) comprobar si el elemento ya ha sido colocado y 2) colocarlo en su ubicación correcta. La elección de ese factor multiplicativo constante depende de ti: ¿qué tamaño quieres que tengan tus estructuras de datos? En general, optimizaciones como ésta podrían no ser necesarias hasta que alcancemos un número muy grande de elementos.

Bucket Sort Java

Para implementar un algoritmo de ordenación de cubos en java tendrás que crear primero la estructura de datos del cubo, una que pueda contener al menos tantos elementos como se le den. La forma más fácil sería probablemente mediante el uso de un ArrayList con capacidades de auto-expansión, pero si prefieres listas enlazadas o cualquier otra cosa, ¡es tu decisión! No estoy aquí para decirte cómo programar tus propios algoritmos de ordenación...

import java.util.*; class BucketSort { /** * @param args the command line arguments */ public static void main(String[] args) { // TODO code application logic here List<Integer> arr = new ArrayList<Integer>(); for (int i = 0; i < 100000; i++) { arr.add(i); } Bucket sortBucketSort = new BucketSort(); String bucketName = “”; int[] bucketArray = null; System.out.println(“Please input the number of buckets you would like to use.”); int bucketNumInput = Integer.parseInt( JOptionPane.showInputDialog(“How many buckets do you want?”)); if (bucketNumInput < 1) { JOptionPane.showMessageDialog(null, “Invalid Number”); return; } if (arr == null) { arr = new ArrayList<Integer>(); } bucketArray=new int [bucketNumInput]; for (int i=0; i<bucketNumInput ;i++){ bucketArray [i]=arr.size(); } Arrays.sort(bucketArray); for (int i=0; i<bucketArray.length-1; i++) { bucketName = Integer.toString(bucketArray [i]); System.out.println(“Working on bucket ” + bucketName); // inserts data from array to proper location int j = 0; while (j < arr.size()) { if (arr.get(j) > bucketArray [i+1]) { break; } else if (arr.get(j) <= bucketArray [i+1]) { continue; } else { arr.set(j, bucketArray [i+1]); j++; } } bucketArray [i] = arr.size(); // delete from array } System.out.println(“All done!”); for (int i=0; i<bucketArray.length-1; i++) { System.out.println(“Working on bucket ” + bucketName); System.out .print(bucketName + “, you have ” + arr.get(bucketArray [i])); if (arr.get(bucketArray [i]) != 0) { bucketName = Integer .toString(bucketArray [i]); System.out .print(“Removing ” + bucketName); arr .remove(bucketArray [i]); }

¡Uf! Esa es una larga línea de código

Algoritmo de ordenación de cubos - Algoritmo de ordenación más rápido del...

Ahora ya sabes qué es el algoritmo Bucket Sort. Es una forma realmente rápida de ordenar en particular grandes trozos de datos y es especialmente útil para ordenar datos en memoria. Usando el algoritmo de ordenación en cubos puedes ordenar rápidamente 100000 enteros - ¡una imposibilidad para todo tipo de otros algoritmos de ordenación! ¿Qué opinas? ¿Será ésta tu forma de ordenar rápidamente a partir de ahora?

tl;dv para empresas
tl;dv le ayuda (por fin) a obtener valor de las reuniones en toda la organización. Grabe, transcriba, resuma, genere y automatice información valiosa sobre las reuniones para usted y su organización. Configúrelo en cuestión de minutos.
Grabaciones y transcripciones ilimitadas
Resúmenes de IA
Pregunte a tl;dv AI
Funciona en más de 30 idiomas
Informes de IA para varias reuniones
+5000 integraciones

tl;dv Blog

Suscríbase a nuestros blogs

Suscríbase y manténgase al día con los últimos consejos y noticias sobre Reuniones, Ventas, Customer Success, Productividad y Cultura de trabajo.