Los algoritmos en el lugar son el que hace lo que desea usar con un espacio de almacenamiento adicional pequeño y constante.
Fuera de lugar o no están los algoritmos que hacen lo que usted quiere usando un gran espacio de almacenamiento, a veces del mismo tamaño que su entrada, a veces más que eso.
Por ejemplo: desea multiplicar cada elemento de una matriz de tamaño 100K por 2. Entonces tiene dos opciones
- Ejecute un bucle en la matriz de entrada y cambie cada valor en esa matriz.
arr[i] *= 2;
- ¿Por qué mi cabello se vuelve blanco a los 16 años?
- Soy un buen escritor pero un mal orador, ¿qué debo hacer?
- Nunca conocí a nadie de Mongolia, nunca escuché de un evento en Mongolia, nunca escuché a nadie visitar Mongolia, ¿cómo es la vida y las ciudades allí?
- Tengo una multa por exceso de velocidad aquí en California. Iba 93 en un 65. Solo estaba tratando de ir a trabajar. Es mi primer boleto de exceso de velocidad. ¿Qué debo hacer?
- Mi compañía cambió su ubicación. ¿Cómo puedo hacer los cambios necesarios en los mapas de Google?
- Ejecute un bucle sobre la matriz de entrada y asigne otra matriz de unos 100K de tamaño y almacene los nuevos valores en ella.
new_arr[i] = arr[i] * 2;
Entonces, en el segundo caso, no tiene un algoritmo en el lugar o fuera de lugar y un algoritmo en el lugar en el caso 1.
Ahora, para invertir una matriz en su lugar y fuera de lugar, supongo que debe almacenarlos y no simplemente imprimirlos. En este último caso, simplemente recursó o usó una pila.
- En su lugar
Ejecute un bucle hasta el medio. Mantenga dos índices, uno apuntando al primer elemento, otro al último. Iterar hasta el medio e intercambiar los valores en los dos índices. - Fuera de lugar
Ejecute un bucle desde el último elemento hasta el primer elemento de la matriz y almacénelo en una nueva matriz. Observe que está utilizando una nueva matriz.Otra opción es mantener dos índices nuevamente, apuntando al primer elemento y al último elemento de la matriz de entrada y la nueva matriz, en lugar de intercambiarlos, simplemente colóquelos en una nueva matriz cada vez.
El último elemento de la matriz de entrada irá al primer elemento de la nueva matriz. Así que ahora, muy similar a nuestro algoritmo anterior, iteraremos hasta el elemento n / 2.Es complicado, pero le permite comprender la diferencia entre los algoritmos in situ y no in situ, es solo el espacio de almacenamiento utilizado. La complejidad es la misma en ambos casos aquí.
¡Espero que esto ayude!