Me parece que muchas de las respuestas aquí se detienen demasiado en las aplicaciones mundanas de las inversiones en funciones lineales como el dinero y las unidades de medida, así que ofreceré una perspectiva alternativa: las inversiones se refieren a la información . Si puedo invertir una función (es decir, anular un procedimiento ), eso significa que no se pierde ninguna información cuando aplico esa función.
Por ejemplo, cuando utilizo la función $y=f(x)=x^3$ en alguna entrada $x$ Sé que si sé sólo el resultado $y$ Sé exactamente lo que $x$ Con el que empecé. Sin embargo, si utilizo una función como $y=g(x)=x^2$ En cambio, el $y$ por sí mismo no da suficiente información para que yo pueda averiguar qué $x$ que puse en la función para empezar. Si $y=16$ , $x$ podría ser igual a $-4$ o $4$ no sé cuál. Ambos $x$ s me dan exactamente el mismo resultado $y$ .
Cuando esto ocurre, decimos que $g(x)=x^2$ es no es invertible . Del mismo modo, decimos que $f(x)=x^3$ es invertible porque no es un operación destructiva como $x^2$ . Decir que una función es destructiva es lo mismo que decir que no es invertible. Decir que una función es sin pérdidas es lo mismo que decir que es invertible.
La función $g(x)$ es destructiva porque (con una excepción, $y=0$ ) las salidas por sí solas no son suficientes para decirme cuáles fueron las entradas. Necesitamos más información, para reemplazar la información que fue destruida por la función. En el ejemplo anterior, si te dijera que la entrada era un número positivo (matemáticamente hablando, esto se llama restringir el dominio ), entonces ya sabes lo suficiente para concluir que la entrada original debe han sido $4$ porque $4$ es el único número positivo en el conjunto de soluciones $\{-4, 4\}$ . Si siempre le di esta pista, que la entrada era positiva, entonces he hecho efectivamente $g(x)$ invertible sobre ese dominio, ya que siempre se podrá determinar la entrada a partir de la salida: basta con tomar la raíz positiva. Por lo tanto, podemos decir que mientras $g(x)$ no es invertible sobre todos los números reales $(-∞, ∞)$ , $g(x)$ es invertible sobre el dominio $[0, ∞)$ .†
Si todo esto parece un poco abstracto, tenga en cuenta que este concepto de destrucción de información es enormemente importante en el día a día. Los algoritmos de compresión se basan en las inversiones. Si alguna vez has descargado un .zip
archivo, puede estar seguro de que cuando extrae el archivo (invierte la función de compresión), lo que saca es exactamente‡ lo que puso la persona que hizo el archivo, que el archivo no se distorsionó ni se dañó de ninguna manera al pasar por el proceso de compresión y descompresión, y todo eso es porque el algoritmo de compresión que hizo el .zip
archivo utilizó una función invertible.
Por otro lado, la invertibilidad (o la falta de ella) es la razón por la que, por ejemplo, los JPEG degradan su calidad cada vez que los guardas. El algoritmo de compresión JPEG no es invertible, así que si guardas una foto como JPEG (y borras el original), nunca podrás recuperar el 100% de la calidad original, porque parte de ella se destruyó al ejecutar el algoritmo de compresión. Por eso los fotógrafos profesionales siempre guardan sus originales como PNG o TIFF, formatos que utilizan algoritmos de compresión invertibles.
La invertibilidad nos permite realizar hazañas increíbles: como programador informático, puedo utilizar una función invertible para representar un objeto de millones de bytes con sólo 64 bits (a menudo menos), sin pérdida de información. Esta función se denomina operador de referencia ( &()
en la mayoría de los lenguajes tipo C) y su salida se llama puntero que es simplemente un identificador entero único para el objeto (su dirección en la memoria del ordenador). Su inverso es el operador de dereferencia ( *()
en la mayoría de los lenguajes tipo C), lo que nos permite recuperar el objeto original a partir del puntero de 64 bits. Pasar por referencia como se llama, nos permite trabajar en objetos de datos con una copia mínima de datos. Si no tuviéramos punteros, los ordenadores serían insoportablemente lentos, ya que tendríamos que copiar los todo estructura de datos en memoria cada vez que queríamos hacer algo con ella. Esto se llama pasar por el valor y generalmente lo evitamos a menos que queramos realmente hacer una copia de los datos.
A veces queremos lo contrario, un no invertible función. Una de las razones por las que podríamos querer esto es si estamos construyendo un caché .
Imagínese que le pido que calcule el valor de cos(6π/31)
a mano con 12 decimales. Hay formas de hacerlo, aunque te llevaría mucho tiempo hacerlo. Para que conste, es 0.820763441207
.
Ahora bien, ¿y si te pregunto cuál es el valor de cos(68π/31)
¿es? Podrías repetir el mismo proceso que antes, sacar el resultado, y encontrar que el resultado es 0.820763441207
. ¿Por qué? Porque cos(68π/31) = cos(6π/31 + 2π)
y el coseno se repite cada $2π$ . Podrías haberte ahorrado mucho tiempo simplemente reutilizando tu respuesta a la primera pregunta.
Esto ocurrió porque el valor de entrada 68π/31
te dio demasiada información . Todo lo que necesitabas saber era lo que 68π/31 % 2π
era. Los múltiplos extra de $2π$ sólo nos hizo perder el tiempo. En este caso, queremos utilizar la función módulo para descartar la información extraña, para que podamos ver que 68π/31
y 6π/31
son equivalentes para nuestros propósitos y los asignamos a una sola entrada de la caché.
† Estrictamente hablando, esto significa que la pista que te di fue que $x$ fue no negativo , en lugar de sólo positivo ya que $0$ es un caso especial en el que ambas raíces $\{-0, 0\}$ son idénticos.
‡ De hecho, los inversos le permiten ser doblemente Asegúrese de que tiene el archivo correcto, porque muchos procedimientos criptográficos son simplemente funciones invertibles muy complejas. Por ejemplo RSA utilizado en HTTPS, se basa en la exponenciación modular de cierto tipo, que es una función invertible que depende de algo llamado la clave pública, y es fácil de invertir si se conoce la clave privada, pero (a día de hoy) no se sabe si es fácil sin la clave privada. Por si sirve de algo, muchos otros procedimientos criptográficos útiles, como hashtags , no son invertibles, y eso es precisamente lo que las hace tan potentes y por lo que las utilizamos para almacenar credenciales sensibles como las contraseñas. El uso de la función hash nos permite estar razonablemente seguros de que la contraseña introducida es correcta (si fuera invertible estaríamos 100% seguros), pero porque no es invertible Entonces, incluso si un pirata informático consiguiera hacerse con el hash (lo que ocurre un montón ), les será difícil extraer la propia contraseña porque parte de la información que constituye la propia contraseña fue destruida por la función hash.
- editar -
Como señala @user21820, en la práctica, no es realmente la destructividad de las funciones hash lo que las hace efectivas para proteger las credenciales, sino que es la enorme complejidad computacional requerida para resolver las posibles entradas lo que hace que los hashes como el SHA sean fuertes. De hecho, en la mayoría de los dominios de baja entropía "utilizados de forma realista" (como las palabras del diccionario), los hashes como el SHA512 son efectivamente invertibles, ya que la probabilidad de un colisión de hash (piense en dos $x$ s, lo mismo $y$ ) que se producen en un dominio tan restringido son relativamente pequeñas.
De hecho, incluso en los casos en los que el SHA destruye parte de la información, los hackers humanos pueden rellenar fácilmente los huecos. Si la entropía asumida es lo suficientemente baja, a se puede encontrar el subconjunto de la solución mediante la intersección de un mesa arco iris de la función hash (básicamente una lista finita de puntos precalculados) con la salida hash. Como SHA tiene un rango finito pero un dominio infinito (¿puedes usar esto para demostrar que SHA es destructivo?), el conjunto de soluciones para cualquier salida hash es infinito, así que cuanto más grande sea la tabla que puedas generar, más posibilidades tendrás de encontrar la contraseña. Por lo general, esto no es difícil: un conjunto de soluciones típico para una entrada de hash será algo así como $\{$v4#5dH&*~]?9a
, hG8^5H-39u@JPW
, ilovekittens13
, 5!fHjeOs*7^==2
, $...\}$ y cualquiera puede adivinar cuál es la contraseña. De hecho, las tablas rainbow pueden ser más eficientes para descifrar contraseñas generadas por humanos si sólo se computan hashes de cadenas compuestas por palabras del diccionario y unos pocos dígitos numéricos; esto se conoce ampliamente como ataque de diccionario . Por eso, en el mundo real, a menudo combinamos los hashes con otras técnicas como salado para reducir la utilidad de las tablas rainbow, así como intentar aumentar la entropía de la entrada (con caracteres especiales, palabras que no son del diccionario, etc.) para que sea computacionalmente inviable generar la tabla rainbow para empezar.
Si está interesado en este tipo de cosas, dedique algún tiempo a navegar por la seguridad de la información stackexchange En este caso, una buena comprensión de las funciones y de los inversos de las funciones te llevará muy lejos.
1 votos
Por cierto, el modelado de objetos en caída libre no es realmente una aplicación relevante de la cuadratura. En casi todas las aplicaciones interesantes del mundo real, o bien no tienes una libre adecuado caída (fricción del aire, etc. en balística), o no se tiene un campo de fuerzas homogéneo (por ejemplo, las fuerzas centrales en astronomía). En ambos casos, las soluciones son mucho más complicadas que las cuadráticas, y pueden requerir un solucionador numérico de ODE . Sin embargo, las funciones cuadráticas y las inversas son herramientas básicas importantes para todas las matemáticas, incluidas las numéricas.
5 votos
¿Nunca has deseado poder deshacer algo que has hecho?
0 votos
Sólo para motivar: la inversión cubre la reconstrucción de imágenes de resonancia magnética, la reconstrucción geofísica, las imágenes de muones, etc. ....