La primera pregunta es difícil: encontrar el algoritmo de clasificación altamente paralelo más rápido, teóricamente, requiere una prueba matemática de que no hay una mejora asintótica posible.
La segunda pregunta es mucho más fácil: aunque existe una prueba de que no puede mejorar el resultado O (n log n) para un tipo de comparación, en el número de comparaciones, sí … puede distribuir esta carga de trabajo para mejorar el rendimiento.
Puede hacerlo sincronizando sus subprocesos para operar en diferentes partes de la misma memoria compartida, en épocas de cierta profundidad. Cada subproceso necesita solo una cantidad constante de memoria para el mantenimiento (saber qué índices comparar). La teoría aquí es la de una red de clasificación.
- ¿Qué es la justicia fuerte y la justicia débil en los métodos formales?
- ¿Cómo sabe la CPU que estamos usando el complemento de uno o el complemento de dos para representar números negativos?
- ¿A qué escuela debo asistir para un programa de posgrado de matemáticas: Stony Brook o UIUC?
- ¿Existe una función que crece más rápido que cualquier función computable, pero que crece a un ritmo fundamentalmente más lento que el de la función Busy Beaver?
- ¿Cuál sería la forma más eficiente de verificar si un número dado es un factorial de algún número o no?
Se sabe que varios enfoques proporcionan una profundidad (número de épocas) de “tiempo paralelo” (con hilos ilimitados) de [matemáticas] O ((log (n)) ^ 2) [/ matemáticas]. Por ejemplo, Batcher impar-incluso mergesort – Wikipedia y clasificador Bitonic – Wikipedia documentan dos de estos bien.
En la práctica, si no tiene los hilos (bueno, los núcleos), puede o no obtener una aceleración, con este tipo de enfoque. El número de comparaciones es [matemáticas] O (n (log (n)) ^ 2) [/ matemáticas]. En el peor de los casos, con 1 subproceso, esto aumenta el tiempo en un factor de log n.