Un alumno, un aula
Una función asigna a cada elemento de un conjunto exactamente un elemento de otro. Sirve para saber si puedes deshacer una asignación, por ejemplo si de un número de aula puedes volver al alumno.
Una facultad asigna aula a cada matrícula. Si dos alumnos comparten aula, el aula no te dice quién es quién. Esta lección da nombre a cada situación.
Al final de esta lección
Nota
Puedo decir si una asignación es una función, inyectiva, sobreyectiva o biyectiva.
Palabras clave
| Palabra | Qué significa |
|---|---|
| Dominio | el conjunto de donde salen las entradas |
| Codominio | el conjunto donde pueden caer las salidas |
| Función | una asignación con una sola salida para cada entrada |
| Inyectiva | dos entradas distintas nunca dan la misma salida |
| Sobreyectiva | toda salida posible la da alguna entrada |
| Biyectiva | inyectiva y sobreyectiva a la vez |
Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.
Una función da una salida por entrada
Una asignación une cada elemento del dominio con un elemento del codominio. Es una función si cada entrada tiene una salida, y solo una.
Varias entradas pueden compartir salida. Lo que no puede pasar es que una entrada tenga dos salidas, ni que se quede sin ninguna.
Dos preguntas definen los tres tipos
Primera pregunta: ¿alguna salida se repite? Si ninguna, la función es inyectiva: puedes volver de la salida a la entrada.
Segunda pregunta: ¿queda alguna salida sin usar? Si ninguna, es sobreyectiva. Si cumple las dos, es biyectiva: cada entrada tiene su pareja exacta.
Ejemplo resuelto: cuatro asignaciones
| Dominio | Codominio | Asignación | Tipo |
|---|---|---|---|
| 1, 2, 3 | a, b, c | 1→a, 2→b, 3→c | Biyectiva |
| 1, 2 | a, b, c | 1→a, 2→b | Inyectiva, falta c |
| 1, 2, 3 | a, b | 1→a, 2→b, 3→a | Sobreyectiva, a se repite |
| 1, 2, 3 | a, b, c | 1→a, 2→b, 3→a | Ninguna, a se repite y falta c |
Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.
Python detecta una salida repetida
python3 -c "m = {1: 'a', 2: 'b', 3: 'a'}; print(len(m), len(set(m.values())), len(m) == len(set(m.values())))"Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.
Un error frecuente
Advertencia
Mucha gente cree que inyectiva y sobreyectiva son lo mismo. No lo son. Inyectiva mira si una salida se repite. Sobreyectiva mira si alguna salida queda sin usar. Una puede cumplirse sin la otra.
Dirección de memoria y línea de caché
Una caché pequeña tiene 4 líneas. La línea de una dirección de memoria es el resto de dividir la dirección entre 4. Es una función: cada dirección va a una sola línea.
Las direcciones 0 y 4 van a la misma línea, así que no es inyectiva. Las cuatro líneas se usan, así que sí es sobreyectiva.
Las líneas de las direcciones 0 a 7
python3 -c "print([a % 4 for a in range(8)])"Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.
Una relación de equivalencia reparte en grupos
Una relación dice qué pares de elementos están relacionados. Es de equivalencia si cumple tres cosas. Todo elemento se relaciona consigo mismo. Si A se relaciona con B, entonces B con A. Si A con B y B con C, entonces A con C.
«Vivir en la misma ciudad» lo cumple, y reparte a la gente en grupos que no se tocan.