¿Por qué la clasificación de montón se considera un algoritmo in situ?

Según Wikipedia, el algoritmo en el lugar se define a continuación:

En informática, un algoritmo in situ es un algoritmo que transforma la entrada sin utilizar una estructura de datos auxiliar. Sin embargo, se permite una pequeña cantidad de espacio de almacenamiento adicional para las variables auxiliares. La entrada generalmente se sobrescribe con la salida a medida que se ejecuta el algoritmo. El algoritmo in situ actualiza la secuencia de entrada solo mediante el reemplazo o el intercambio de elementos. Un algoritmo que no está en el lugar a veces se llama no en el lugar o fuera de lugar.

Ahora, la ordenación del montón está en su lugar porque la matriz no ordenada se convierte primero en un montón sin crear matrices adicionales ni ninguna otra estructura de datos cuyo tamaño dependa del tamaño de la matriz original y luego el montón se reduce a una matriz ordenada.

Por lo tanto, considere la siguiente matriz que debe clasificarse. Al considerar las siguientes reglas:

1. El elemento en el índice 0 es la raíz.
2. Para cualquier nodo del montón en el índice i, incluido el nodo raíz (i = 0):
Índice de niño izquierdo = 2 * i + 1
Índice de niño derecho = 2 * i + 2
Padre del nodo = (i-1) / 2

la matriz se puede representar como el siguiente árbol binario completo:

La matriz anterior se convierte en un montón máximo como se muestra a continuación (puede consultar los pasos detallados del algoritmo desde aquí – Algoritmo de clasificación – Ordenar montón) –

Ahora, una vez que hemos creado el montón máximo, usamos la misma memoria utilizada por la matriz para convertir la matriz en una matriz ordenada.

Entonces, aunque su algoritmo funcionará en una estructura de datos de almacenamiento dinámico, pero no creará ninguna memoria nueva para el almacenamiento dinámico, utilizará la misma matriz para todas las operaciones.

Esa es la razón por la cual la ordenación del montón es un algoritmo de ordenación in situ.

Fuente de imagen y algoritmo: IDeserve – Algoritmo de clasificación – Clasificación de montón

Excelente pregunta!

Se considera que un montón de ordenación [1] es un algoritmo in situ porque no se utiliza memoria adicional para realizar la ordenación.

Aunque se requiere espacio para las variables temporales, todo el algoritmo funciona intercambiando elementos en la matriz que se proporciona como entrada.

Build_max_operation funciona in situ (sin memoria adicional asignada)

Después de eso, la ordenación del montón también funciona mediante el intercambio de elementos solamente.

Notas al pie

[1] Algoritmo de ordenación del montón

Un algoritmo in situ no requiere más que una cantidad constante de memoria adicional más allá de la entrada en sí. Esto definitivamente se aplica a la ordenación del montón. Cada operación del algoritmo de ordenación de almacenamiento dinámico requiere una serie de variables que no son de matriz para el almacenamiento temporal, la indexación de bucles y similares que no dependen del tamaño de la matriz de entrada.

Por el contrario, la ordenación por fusión implementada para una matriz requiere copiar la matriz en cada paso de fusión. Dado que el almacenamiento adicional depende del tamaño de la matriz de entrada, es un ejemplo de un algoritmo que no está en su lugar.

More Interesting

¿Qué plataforma / herramienta / idioma debería ser bueno para la minería de texto?

Resolví el problema de la Torre de Hanoi de una manera que no requiere conocer el movimiento anterior o siguiente. ¿Se ha hecho esto antes?

¿Son los problemas NP completos también problemas NP difíciles? ¿Por qué?

¿Qué es exactamente el algoritmo?

¿Estudiar algoritmos mejorará mis habilidades cotidianas de toma de decisiones / resolución de problemas?

Además del algoritmo de tallado de costura, ¿qué otros algoritmos se pueden usar para Image Resizer?

Suponiendo que todos estos algoritmos resuelven el mismo tipo de problema, ¿cuál se recomienda? ¿Y por qué?

¿Los programadores realmente implementan los algoritmos, o usan los que se dan en las bibliotecas? (como usar HashMap en Java)

¿Soy solo yo o el algoritmo recursivo de Fibonacci es brillantemente complejo?

¿Qué significan términos como inicialización, evaluación, selección, cruce, mutación en el contexto de algoritmos genéticos?

Cómo resolver el problema M_SEQ en SPOJ

En un montón binario, un nodo con índice i tiene hijos en los índices 2i + 1 y 2i + 2 (cuando la matriz es 0 indexada). ¿Cómo se deriva esta relación?

15 personas se sentarán en una fila de 15 sillas. ¿Cómo calculo cuántos planes de asientos se pueden hacer, donde dos planes de asientos se consideran iguales si dos planes comparten cuádruples adyacentes? o ¿Cómo puedo crear un algoritmo eficiente para encontrar límites inferiores para 15 o menos personas?

¿Existe un libro o sitio web que describa los problemas y luego le solicite la estructura de datos / algoritmos más apropiados necesarios para resolver el problema?

¿Cuál es el significado de matriz redimensionable en arraylist?