No estoy del todo contento con la respuesta aceptada hasta el momento. Así que estoy volviendo a intentar una respuesta:
¿Es teóricamente posible ordenar una matriz de n enteros en una complejidad amortiguada de O (n)?
La respuesta a esta pregunta depende de la máquina que ejecutará el algoritmo de clasificación. Si tiene una máquina de acceso aleatorio, que puede funcionar exactamente en 1 bit, puede hacer radix sort para enteros con un máximo de k
bits, que ya se sugirió. Entonces terminas con la complejidad O(kn)
.
Pero si está trabajando en una máquina de palabra de tamaño fijo con un tamaño de palabra de al menos k
bits (que son todas las computadoras de consumo), lo mejor que puede lograr es O(n log n)
. Esto se debe a que o bien log n < k
o bien podría hacer un count sort primero y luego ordenarlo con un algoritmo O (n log n)
, lo que arrojaría también el primer caso.
¿Qué tal si intentamos crear el peor caso de complejidad de O (n)?
Eso no es posible. Un enlace ya fue dado. La idea de la prueba es que para poder ordenar, debe decidir para cada elemento que se ordenará si es más grande o más pequeño que cualquier otro elemento que se va a ordenar. Al utilizar la transitividad, esto se puede representar como un árbol de decisión, que tiene n
nodos y log n
de profundidad en el mejor de los casos. Por lo tanto, si desea tener un rendimiento mejor que Ω(n log n)
, esto significa eliminar los bordes de ese árbol de decisión. Pero si el árbol de decisiones no está completo, ¿cómo puede asegurarse de haber tomado una decisión correcta sobre algunos elementos a
y b
?
¿Puede usted sin limitaciones en el uso de la memoria crear tal algoritmo?
Así que, como desde arriba no es posible. Y las preguntas restantes son, por lo tanto, irrelevantes.
¿Vota hacia abajo sin comentarios? – Vadiklk
No veo un voto negativo en este momento (¿quizás deshecho?) Sin embargo, hay un par de razones obvias por las que alguien podría rechazarlo: suena similar a la tarea; podría ser más adecuado para cstheory.stackexchange.com –