Ordenar en Ciencias de la Computación frente a ordenar en el mundo 'real'


87

Estaba pensando en clasificar los algoritmos en el software y las posibles formas en que uno podría superar el O(nlogn)obstáculo. No creo que sea posible ordenar más rápido en un sentido práctico, así que por favor no crea que lo hago.

Dicho esto, parece que con casi todos los algoritmos de clasificación, el software debe conocer la posición de cada elemento. Lo que tiene sentido, de lo contrario, ¿cómo sabría dónde colocar cada elemento de acuerdo con algunos criterios de clasificación?

Pero cuando crucé este pensamiento con el mundo real, una centrífuga no tiene idea de en qué posición se encuentra cada molécula cuando 'clasifica' las moléculas por densidad. De hecho, no le importa la posición de cada molécula. Sin embargo, puede clasificar billones y billones de elementos en un período de tiempo relativamente corto, debido al hecho de que cada molécula sigue las leyes de densidad y gravitación, lo que me hizo pensar.

¿Sería posible con algo de sobrecarga en cada nodo (algún valor o método agregado a cada uno de los nodos) para 'forzar' el orden de la lista? Algo así como una centrífuga, donde solo cada elemento se preocupa por su posición relativa en el espacio (en relación con otros nodos). ¿O esto viola alguna regla de cálculo?

Creo que uno de los grandes puntos planteados aquí son los efectos mecánicos cuánticos de la naturaleza y cómo se aplican en paralelo a todas las partículas simultáneamente.

Quizás las computadoras clásicas restringen inherentemente la clasificación al dominio de O(nlogn), mientras que las computadoras cuánticas pueden cruzar ese umbral en O(logn)algoritmos que actúan en paralelo.

El hecho de que una centrífuga sea básicamente un tipo de burbuja paralela parece ser correcto, lo que tiene una complejidad temporal de O(n).

Supongo que el siguiente pensamiento es que si la naturaleza puede intervenir O(n), ¿por qué no pueden las computadoras?


44
Centrifuge es solo una implementación de clasificación de burbujas masivamente paralela, nada especial.
el.pescado

3
Cuando tiene nprocesadores (núcleos) para clasificar una variedad de nelementos, puede lograr fácilmente la O(n)complejidad. Una amarga verdad es que normalmente tenemos que clasificar matrices largas (miles y millones de elementos) en la CPU con solo 2 ... 10 núcleos.
Dmitry Bychenko

24
Tenga en cuenta que n log n es el número de comparaciones que se deben realizar en una ordenación que compare pares de elementos . No es necesario que un algoritmo de clasificación compare pares de elementos ; si puede encontrar una ordenación que no haga comparaciones por pares, puede hacerlo más rápido que n log n.
Eric Lippert

7
Lo que le falta es que cada una de esas moléculas en la solución son unidades de procesamiento. No hay un emulador que cuente las moléculas, las moléculas se cuentan a sí mismas. Una computadora análoga tendría tantos núcleos de procesador y memorias independientes como elementos tenga para clasificar. O(n)por sí solo no le dice nada : solo es útil para comparar algoritmos con restricciones similares y ejecutar en arquitecturas similares; en los cursos introductorios de la complejidad algorítmica utilizamos un modelo de "equipo" muy simplificado que tiene poco que ver con las centrífugas o equipos reales :)
Luaan

4
Estoy votando para cerrar esta pregunta como fuera de tema porque pertenece a cs.stackexchange.com
Robert Fraser

Respuestas:


71

EDITAR: Había entendido mal el mecanismo de una centrífuga y parece que hace una comparación, una masivamente paralela. Sin embargo, hay procesos físicos que operan en una propiedad de la entidad que se clasifica en lugar de comparar dos propiedades. Esta respuesta cubre algoritmos que son de esa naturaleza.

Una centrífuga aplica un mecanismo de clasificación que no funciona realmente mediante comparaciones entre elementos, sino mediante una propiedad ('fuerza centrífuga') en cada elemento individual de forma aislada. Algunos algoritmos de clasificación entran en este tema, especialmente Radix Sort . Cuando este algoritmo de clasificación se paraleliza, debería acercarse al ejemplo de una centrífuga.

Algunos otros algoritmos de clasificación no comparativos son la clasificación por cubos y la clasificación por recuento . Puede encontrar que la clasificación por cubos también encaja en la idea general de una centrífuga (el radio podría corresponder a un contenedor).

Otro denominado "algoritmo de clasificación" en el que cada elemento se considera de forma aislada es la clasificación del sueño . Aquí, el tiempo, más que la fuerza centrífuga, actúa como la magnitud utilizada para la clasificación.


Esta es en realidad la respuesta correcta: la clasificación de contenedores / clasificación de base tiene una complejidad O (n) siempre que se pueda acceder a los contenedores y la entrada en O (1) tiempo.
pjc50

5
Iba a preguntar "¿Alguien más piensa en Sleep Sort de inmediato?".
Aparentemente

Las centrífugas funcionan comparando elementos; la función hash es (principalmente) densidad. Por ejemplo, si centrifuga una mezcla de propano y aire, obtendrá propano clasificado hasta los límites; pero si centrifuga propano y agua, obtendrá propano clasificado en el centro (el agua es más densa). Este proceso es casi exactamente el mismo que el proceso físico del que se nombró una "clasificación de burbujas".
Nat

¿No se basa realmente la complejidad de SleepSort en la del planificador?
Morwenn

@ Morwenn, el antiguo programador de Linux era O (1) mientras que el nuevo es O (log n). Ambos factores se ven superados por los factores constantes en el sueño
user1952500

35

La complejidad computacional siempre se define con respecto a algún modelo computacional. Por ejemplo, un algoritmo que es O ( n ) en una computadora típica podría ser O (2 n ) si se implementa en Brainfuck .

El modelo computacional de centrífuga tiene algunas propiedades interesantes; por ejemplo:

  • apoya el paralelismo arbitrario; no importa cuántas partículas haya en la solución, todas se pueden clasificar simultáneamente.
  • no da un tipo lineal estricto de partículas por masa, sino una aproximación muy cercana (de baja energía).
  • no es factible examinar las partículas individuales en el resultado.
  • no es posible clasificar partículas por diferentes propiedades; solo se admite la masa.

Dado que no tenemos la capacidad de implementar algo como esto en hardware informático de propósito general, es posible que el modelo no tenga relevancia práctica; pero vale la pena examinarlo para ver si hay algo que aprender de él. Los algoritmos no deterministas y los algoritmos cuánticos han sido áreas activas de investigación, por ejemplo, aunque ninguno de ellos es realmente implementable en la actualidad.


La naturaleza / física es paralela en general (por eso es tan costoso desde el punto de vista computacional de simular en nuestras computadoras seriales), así que sí, la analogía del OP tiene un defecto importante. Sin embargo, todavía se necesita tiempo para que las partículas / moléculas se muevan a lo largo de un tubo de ensayo o lo que sea, por lo que un tubo de ensayo más largo es como más trabajo por hilo, pero un tubo de ensayo más ancho es más paralelismo. (Y tenga en cuenta que una centrífuga no se clasifica en el área de un tubo de ensayo, por lo que hay muchos tipos paralelos sin fusión, pero tal vez con alguna interacción en el camino. A diferencia de un tipo real en una computadora paralela, con fusión final)
Peter Cordes

29

El truco está ahí, que solo tienes una probabilidad de ordenar tu lista usando una centrífuga. Al igual que con otros tipos del mundo real [cita requerida], puede cambiar la probabilidad de haber ordenado su lista, pero nunca esté seguro sin verificar todos los valores (átomos).

Considere la pregunta: "¿Cuánto tiempo debe hacer funcionar su centrífuga?"
Si solo lo ejecutó durante un picosegundo, su muestra puede estar menos ordenada que el estado inicial ... o si lo ejecutó durante unos días, puede estar completamente ordenado. Sin embargo, no lo sabría sin verificar realmente el contenido.


Ese es un buen punto. ¿Cómo lo sabes? Por otra parte, si las reglas vigentes son lo suficientemente buenas, ¿le importaría saberlo? (es decir, si hace que la probabilidad sea tan baja que se vuelva insignificante).
Kris

Siempre puede calcular cuánto tiempo tardaría una partícula en llegar al final de la centrífuga. Conoce la aceleración (w ^ 2 * r donde w es la velocidad angular) y puede calcular el tiempo.
user1952500

1
Es cierto, pero como eso se confunde con el movimiento browniano , otras fuerzas atómicas y la física cuántica (¡gracias, pequeñas cosas!), Todavía no puede estar completamente seguro de haber ordenado su lista hasta que verifique el estado.
ti7

1
Si no tiene partículas extremadamente pequeñas, puede ignorar los efectos cuánticos. Si tiene partículas extremadamente pequeñas, el algoritmo de clasificación no necesita funcionar y, de hecho, no puede depender de él para que funcione debido a los efectos cuánticos. Y no puede verificar el estado de manera confiable debido al principio de incertidumbre (verificar una partícula conducirá a que otras partículas se muevan).
user1952500

1
@Kris Bueno, sabemos que la centrífuga no se clasifica perfectamente. Seguimos haciéndolo hasta que la diferencia ya no importa para el propósito práctico, como prevenir la coagulación de la sangre en su centrífuga de sangre. Pero mire las centrifugadoras de uranio, que necesitan clasificar elementos que están mucho más "cerca" (más difíciles de separar) y requieren una gran instalación que siga clasificando una y otra y otra vez a un costo enorme para producir pequeñas cantidades del material deseado. Y la centrífuga tiene un cierto tamaño, y el tiempo de separación es proporcional al ancho de los tubos, y ... ¡No puedes simplemente decir O (n), yay!
Luaan

5

Un ejemplo del mundo real de una "ordenación" basada en computadora serían los drones autónomos que trabajan cooperativamente entre sí, conocidos como "enjambres de drones". Los drones actúan y se comunican como individuos y como grupo, y pueden rastrear múltiples objetivos. Los drones deciden colectivamente qué drones seguirán a qué objetivos y la obvia necesidad de evitar colisiones entre drones. Las primeras versiones de esto eran drones que se movían a través de puntos de paso mientras permanecían en formación, pero la formación podría cambiar.

Para una "clasificación", los drones podrían programarse para formar una línea o patrón en un orden específico, inicialmente liberados en cualquier permutación o forma, y ​​colectivamente y en paralelo formarían rápidamente la línea o patrón ordenado.

Volviendo a una ordenación basada en computadora, un problema es que hay un bus de memoria principal y no hay forma de que una gran cantidad de objetos se muevan en la memoria en paralelo.

conocer la posición de cada elemento

En el caso de una clasificación de cinta, la posición de cada elemento (registro) sólo es "conocida" por la "cinta", no por la computadora. Una clasificación basada en cinta solo necesita funcionar con dos elementos a la vez y una forma de indicar los límites de ejecución en una cinta (marca de archivo o un registro de diferente tamaño).


4

En mi humilde opinión, la gente piensa demasiado en log (n). O (nlog (n)) ES prácticamente O (n). Y necesita O (n) solo para leer los datos.

Muchos algoritmos, como el ordenamiento rápido, proporcionan una forma muy rápida de ordenar elementos. Podría implementar variaciones de ordenación rápida que serían muy rápidas en la práctica.

Inherentemente, todos los sistemas físicos son infinitamente paralelos. Es posible que tenga una gran cantidad de átomos en un grano de arena, la naturaleza tiene suficiente poder computacional para averiguar dónde debería estar cada electrón en cada átomo. Entonces, si tuviera suficientes recursos computacionales (O (n) procesadores), podría ordenar n números en log (n) tiempo.

De comentarios:

  1. Dado un procesador físico que tiene k número de elementos, puede lograr una paralelismo de como máximo O (k). Si procesa n números arbitrariamente, aún lo procesará a una velocidad relacionada con k. Además, podría formular este problema físicamente. Podría crear n bolas de acero con pesos proporcionales al número que desea codificar, lo que podría resolverse mediante una centrífuga en una teoría. Pero aquí la cantidad de átomos que estás usando es proporcional an. Mientras que en un caso estándar tiene un número limitado de átomos en un procesador.

  2. Otra forma de pensar sobre esto es, digamos que tiene un pequeño procesador adjunto a cada número y cada procesador puede comunicarse con sus vecinos, podría ordenar todos esos números en tiempo O (log (n)).


Pero, ¿no es la computación solo eso, usar las propiedades físicas de la naturaleza para hacer algún trabajo? Podría estar cruzando a la computación cuántica aquí, pero si se puede hacer físicamente, ¿debería ser posible hacerlo computacionalmente? Quizás la computación clásica es el obstáculo entre O (nlogn) y O (logn).
Kris

2
@Kris No exactamente. Dado un procesador físico que tiene k número de elementos, puede lograr una paralelismo de como máximo O (k). Si procesa n números arbitrariamente, aún lo procesará a una velocidad relacionada con k. Además, podría formular este problema físicamente. Podría crear n bolas de acero con pesos proporcionales al número que desea codificar, lo que podría resolverse mediante una centrífuga en teoría. Pero aquí la cantidad de átomos que estás usando es proporcional an. Mientras que en un caso estándar tiene un número limitado de átomos en un procesador.
ElKamina

¿Ese límite también se aplica a los objetos QM? Solo por curiosidad
Kris

1
@Kris No entiendo QM con suficiente profundidad para responderlo.
ElKamina

¡Sin preocupaciones! Tengo mucha curiosidad y parece que no puedo dormir jaja. Gracias por las interesantes respuestas.
Kris

4

Trabajé en una oficina los veranos después de la secundaria cuando comencé la universidad. Había estudiado Ciencias de la Computación AP, entre otras cosas, ordenando y buscando .

Apliqué este conocimiento en varios sistemas físicos que puedo recordar:

Orden de fusión natural para comenzar ...

Un sistema imprimía formularios de varias copias, incluido un corte del tamaño de una tarjeta de archivo, que debía archivarse en un banco de cajones.

Empecé con un montón de ellos y ordené el montón para empezar. El primer paso es recoger 5 o más, lo suficientemente pocos como para ponerlos en orden fácilmente en su mano. Coloque el paquete clasificado, cruzando cada pila para mantenerlos separados.

Luego, combine cada par de pilas, produciendo una pila más grande. Repita hasta que solo quede una pila.

… Orden de inserción para completar

Es más fácil archivar las tarjetas ordenadas, ya que cada una de las siguientes está un poco más abajo en el mismo cajón abierto.

Orden de radix

Este nadie más entendió cómo lo hice tan rápido, a pesar de los repetidos intentos de enseñarlo.

Es necesario clasificar una caja grande de talones de cheques (del tamaño de tarjetas perforadas). Parece jugar al solitario en una mesa grande: repartir, acumular, repetir.

En general

Hace 30 años, noté lo que está preguntando: las ideas se transfieren a los sistemas físicos de manera bastante directa porque hay costos relativos de comparaciones y manejo de registros , y niveles de almacenamiento en caché.

Ir más allá de equivalentes bien entendidos

Recuerdo un ensayo sobre su tema y mencionó el tipo de espagueti . Recorta un trozo de fideos secos para indicar el valor clave y lo etiqueta con el ID de registro. Esto es O (n), simplemente procesando cada artículo una vez.

Luego agarras el paquete y golpeas un extremo en la mesa. Se alinean en los bordes inferiores y ahora están ordenados. Puede quitarse trivialmente el más largo y repetir. La lectura también es O (n).

Hay dos cosas que suceden aquí en el "mundo real" que no se corresponden con los algoritmos. Primero, alinear los bordes es una operación paralela. Cada elemento de datos es también un procesador (se le aplican las leyes de la física). Entonces, en general, escala el procesamiento disponible con n, esencialmente dividiendo su complejidad clásica por un factor en n.

En segundo lugar, ¿cómo se logra una clasificación alineando los bordes? La clasificación real está en la lectura de salida que le permite encontrar la más larga en un solo paso, a pesar de que hizo comparar todos ellos para encontrar la más larga. Nuevamente, divida por un factor de n, por lo que encontrar el más grande ahora es O (1).

Otro ejemplo es el uso de la computación analógica: un modelo físico resuelve el problema "instantáneamente" y el trabajo de preparación es O (n). En principio, el cálculo se escala con el número de componentes que interactúan, no con el número de elementos preparados. Entonces el cálculo escala con n². El ejemplo en el que estoy pensando es un cálculo multifactor ponderado, que se realizó perforando agujeros en un mapa, colgando pesos de cuerdas que pasan por los agujeros y reuniendo todas las cuerdas en un anillo.


El tipo de espagueti fue una lectura divertida. Disfruté pensando en ello, pero critico la acción de buscar el fideo más largo. Esta no es realmente una operación O (1) ya que escanea los fideos. Imagínese diez mil fideos y algunos que son similares en longitud ... no es una operación de "ojo". En realidad, hay que escanear todos los fideos sin clasificar para encontrar el más largo.
ThisClark

Puede "escanear" todos los fideos colocando la palma de la mano sobre todo el grupo y tirando del fideo más alto que entre en contacto con su mano. Si los fideos tienen una longitud muy similar, use una superficie de "mano" más precisa para agarrar los fideos más altos. Los fideos no se seleccionan en serie como con una clasificación de selección, se seleccionan todos a la vez, por lo que hay O (n) potencia de "computación" disponible.
Bradd Szonye

1
@ThisClark necesitas una plantilla más precisa: un plano paralelo al tope en la parte inferior que alinea los fideos. Bájelo con cuidado hasta que se toque un fideo (el más alto) y se ponga bajo compresión. La comparación de la altura del avión con cada fideo se hace en paralelo con ese fideo. Está sugiriendo que se necesita un coeficiente más alto, pero ese argumento no cambia el Big-O.
JDługosz

3

La clasificación sigue siendo O (n) tiempo total. Que sea más rápido que eso se debe a la Paralelización .

Puede ver una centrífuga como un tipo de cubo de n átomos, paralelizados sobre n núcleos (cada átomo actúa como un procesador).

Puede hacer que la clasificación sea más rápida mediante la paralelización, pero solo mediante un factor constante porque el número de procesadores es limitado, O (n / C) sigue siendo O (n) (las CPU suelen tener <10 núcleos y las GPU <6000)


2

La centrífuga no clasifica los nodos, les aplica una fuerza y ​​luego reaccionan en paralelo. Entonces, si tuviera que implementar una clasificación de burbujas donde cada nodo se mueve en paralelo hacia arriba o hacia abajo en función de su "densidad", tendría una implementación de centrífuga.

Tenga en cuenta que en el mundo real puede ejecutar una gran cantidad de tareas paralelas, mientras que en una computadora puede tener un máximo de tareas paralelas reales igual al número de unidades de procesamiento físico.

Al final, también estarías limitado con el acceso a la lista de elementos porque no puede ser modificado simultáneamente por dos nodos ...


1

¿Sería posible con algo de sobrecarga en cada nodo (algún valor o método agregado a cada uno de los nodos) para 'forzar' el orden de la lista?

Cuando ordenamos usando programas de computadora, seleccionamos una propiedad de los valores que se ordenan. Esa es comúnmente la magnitud del número o el orden alfabético.

Algo así como una centrífuga, donde solo cada elemento se preocupa por su posición relativa en el espacio (en relación con otros nodos)

Esta analogía me recuerda acertadamente al tipo de burbuja simple. Cómo aparecen números más pequeños en cada iteración. Como su lógica centrífuga.

Entonces, para responder a esto, ¿no hacemos algo de ese tipo en la clasificación basada en software?


1
Creo que tienes razón. Creo que donde perdí mi analogía aquí es que olvidé que cada molécula actúa en paralelo. Entonces, sería como una especie de burbuja paralela ...
Kris

1

En primer lugar, está comparando dos contextos diferentes, uno es la lógica (computadora) y el otro es la física que (hasta ahora) está comprobado que podemos modelar algunas partes usando fórmulas matemáticas y nosotros, como programadores, podemos usar estas fórmulas para simular (algunas partes de) la física en el trabajo lógico (por ejemplo, motor de física en el motor del juego).

En segundo lugar, tenemos algunas posibilidades en el mundo de la computadora (lógica) que es casi imposible en física, por ejemplo, podemos acceder a la memoria y encontrar la ubicación exacta de cada entidad en cada momento, pero en física ese es un gran problema, el principio de incertidumbre de Heisenberg .

En tercer lugar, si desea mapear centrifugadoras y su funcionamiento en el mundo real, en el mundo de las computadoras, es como si alguien (El Dios) le hubiera dado una supercomputadora con todas las reglas de la física aplicadas y usted estuviera haciendo su pequeña clasificación en ella ( usando centrífuga) y al decir que su problema de clasificación se resolvió en o (n), está ignorando la enorme simulación física que se desarrolla en segundo plano ...


0

Otra perspectiva es que lo que está describiendo con la centrífuga es análogo a lo que se ha llamado "tipo espagueti" ( https://en.wikipedia.org/wiki/Spaghetti_sort ). Supongamos que tiene una caja de varillas de espagueti crudas de diferentes longitudes. Sosténgalos en su puño y afloje su mano para bajarlos verticalmente de modo que los extremos descansen sobre una mesa horizontal. ¡Auge! Están ordenados por altura. O (constante) tiempo. (O O (n) si incluye recoger las varillas por altura y ponerlas en una ... rejilla para espaguetis, ¿supongo?)

Puede notar allí que es O (constante) en el número de piezas de espagueti, pero, debido a la velocidad finita del sonido en los espaguetis, es O (n) en la longitud de la hebra más larga. Así que nada viene gratis.


Eso es lo mismo que dije 11 horas antes. Y seguí explicando cómo los sistemas físicos te permiten dividir por n o por n² y mantener el modelo de algoritmos y computación.
JDługosz

0

Considere: ¿el "tipo centrífugo" realmente se escala mejor? Piense en lo que sucede a medida que aumenta la escala.

  • Los tubos de ensayo tienen que alargarse cada vez más.
  • Las cosas pesadas tienen que viajar más y más lejos para llegar al fondo.
  • El momento de inercia aumenta, requiriendo más potencia y tiempos más largos para acelerar hasta la velocidad de clasificación.

También vale la pena considerar otros problemas con la centrifugación. Por ejemplo, solo puede operar en una escala de tamaño reducida. Un algoritmo de clasificación por computadora puede manejar números enteros de 1 a 2 ^ 1024 y más, sin preocupaciones. Pon algo que pese 2 ^ 1024 veces más que un átomo de hidrógeno en una centrífuga y, bueno, eso es un agujero negro y la galaxia ha sido destruida. El algoritmo falló.

Por supuesto, la respuesta real aquí es que la complejidad computacional es relativa a algún modelo computacional, como se menciona en otra respuesta. Y el "tipo centrífugo" no tiene sentido en el contexto de modelos computacionales comunes, como el modelo RAM o el modelo IO o las máquinas Turing de varias cintas.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.