En las comunicaciones y el procesamiento de la información , el código es un sistema de reglas para convertir información (como una letra , una palabra , un sonido, una imagen o un gesto ) en otra forma, a veces abreviada o secreta , para su comunicación a través de un canal de comunicación o su almacenamiento en un medio de almacenamiento . Un ejemplo temprano es la invención del lenguaje , que permitió a una persona, a través del habla , comunicar lo que pensaba, veía, oía o sentía a los demás. Pero el habla limita el alcance de la comunicación a la distancia que puede alcanzar una voz y limita la audiencia a los presentes cuando se pronuncia el discurso. La invención de la escritura , que convirtió el lenguaje hablado en símbolos visuales , amplió el alcance de la comunicación a través del espacio y el tiempo .
El proceso de codificación convierte la información de una fuente en símbolos para su comunicación o almacenamiento. La descodificación es el proceso inverso, que convierte los símbolos del código en un formato que el receptor pueda entender, como el inglés o el español.
Una de las razones de la codificación es permitir la comunicación en lugares donde el lenguaje sencillo y corriente , hablado o escrito, resulta difícil o imposible. Por ejemplo, el semáforo , donde la configuración de las banderas sostenidas por un señalizador o los brazos de una torre de semáforos codifican partes del mensaje, típicamente letras individuales y números. Otra persona que se encuentre a gran distancia puede interpretar las banderas y reproducir las palabras enviadas.
En teoría de la información y en informática , un código suele considerarse un algoritmo que representa de forma única símbolos de un alfabeto de origen mediante cadenas codificadas , que pueden estar en otro alfabeto de destino. Una extensión del código para representar secuencias de símbolos sobre el alfabeto de origen se obtiene concatenando las cadenas codificadas.
Antes de dar una definición matemáticamente precisa, he aquí un breve ejemplo. La función
es un código cuyo alfabeto fuente es el conjunto y cuyo alfabeto destino es el conjunto . Utilizando la extensión del código, la cadena codificada 0011001 se puede agrupar en palabras de código como 0 011 0 01, y estas a su vez se pueden decodificar a la secuencia de símbolos fuente acab .
Utilizando términos de la teoría del lenguaje formal , la definición matemática precisa de este concepto es la siguiente: sean S y T dos conjuntos finitos, llamados alfabetos de origen y destino , respectivamente. Un código es una función total que asigna cada símbolo de S a una secuencia de símbolos sobre T. La extensión de , es un homomorfismo de en , que asigna naturalmente cada secuencia de símbolos de origen a una secuencia de símbolos de destino.
En esta sección, consideramos códigos que codifican cada carácter de origen (texto simple) con una palabra de código de algún diccionario, y la concatenación de dichas palabras de código nos da una cadena codificada. Los códigos de longitud variable son especialmente útiles cuando los caracteres de texto simple tienen diferentes probabilidades; consulte también codificación por entropía .
Un código de prefijo es un código con la "propiedad de prefijo": no existe ninguna palabra de código válida en el sistema que sea un prefijo (inicio) de cualquier otra palabra de código válida en el conjunto. La codificación de Huffman es el algoritmo más conocido para derivar códigos de prefijo. Los códigos de prefijo se conocen ampliamente como "códigos de Huffman" incluso cuando el código no fue producido por un algoritmo de Huffman. Otros ejemplos de códigos de prefijo son los códigos de llamada de país , las partes de país y editorial de los ISBN y los códigos de sincronización secundarios utilizados en el estándar inalámbrico UMTS WCDMA 3G.
La desigualdad de Kraft caracteriza los conjuntos de longitudes de palabras de código que son posibles en un código de prefijo. Prácticamente cualquier código de uno a muchos decodificable de forma única, no necesariamente un código de prefijo, debe satisfacer la desigualdad de Kraft.
Los códigos también pueden utilizarse para representar datos de una forma más resistente a los errores de transmisión o almacenamiento. Este código, denominado código de corrección de errores, funciona incluyendo redundancia cuidadosamente diseñada con los datos almacenados (o transmitidos). Algunos ejemplos son los códigos de Hamming , Reed-Solomon , Reed-Muller , Walsh-Hadamard , Bose-Chaudhuri-Hochquenghem , Turbo , Golay , códigos de geometría algebraica , códigos de comprobación de paridad de baja densidad y códigos de espacio-tiempo . Los códigos de detección de errores pueden optimizarse para detectar errores de ráfaga o errores aleatorios .
Un código de cable reemplaza palabras (por ejemplo, " envío" o "factura" ) por palabras más cortas, lo que permite enviar la misma información con menos caracteres , más rápidamente y de forma más económica.
Los códigos pueden utilizarse para abreviar. Cuando los mensajes telegráficos eran la última tecnología en comunicación rápida a larga distancia, se desarrollaron sistemas elaborados de códigos comerciales que codificaban frases completas en una sola boca (comúnmente grupos de cinco minutos), de modo que los telegrafistas se familiarizaron con "palabras" como BYOXO ("¿Estás tratando de escabullirte de nuestro trato?"), LIOUY ("¿Por qué no respondes a mi pregunta?"), BMULD ("¡Eres un idiota!") o AYYLU ("No está claramente codificado, repite más claramente"). Las palabras clave se eligieron por varias razones: longitud , pronunciabilidad , etc. Los significados se eligieron para satisfacer las necesidades percibidas: negociaciones comerciales, términos militares para códigos militares, términos diplomáticos para códigos diplomáticos, cualquiera y todos los anteriores para códigos de espionaje. Los libros de códigos y las editoriales de libros de códigos proliferaron, incluido uno que funcionó como fachada de la Cámara Negra Estadounidense dirigida por Herbert Yardley entre la Primera y la Segunda Guerra Mundial. El propósito de la mayoría de estos códigos era ahorrar en costos de cable. El uso de la codificación de datos para la compresión de datos es anterior a la era informática; un ejemplo temprano es el código Morse del telégrafo, en el que los caracteres más utilizados tienen representaciones más cortas. En la actualidad, los algoritmos informáticos utilizan técnicas como la codificación de Huffman para comprimir archivos de datos de gran tamaño en un formato más compacto para su almacenamiento o transmisión.
Las codificaciones de caracteres son representaciones de datos textuales. Una codificación de caracteres determinada puede estar asociada a un conjunto de caracteres específico (la colección de caracteres que puede representar), aunque algunos conjuntos de caracteres tienen múltiples codificaciones de caracteres y viceversa. Las codificaciones de caracteres pueden agruparse en líneas generales según la cantidad de bytes necesarios para representar un solo carácter: existen codificaciones de un solo byte, codificaciones multibyte (también llamadas anchas) y codificaciones de ancho variable (también llamadas de longitud variable). Las primeras codificaciones de caracteres eran de un solo byte, cuyo ejemplo más conocido es ASCII . ASCII sigue utilizándose en la actualidad, por ejemplo, en los encabezados HTTP . Sin embargo, las codificaciones de un solo byte no pueden modelar conjuntos de caracteres con más de 256 caracteres. Los scripts que requieren conjuntos de caracteres grandes, como el chino, el japonés y el coreano, deben representarse con codificaciones multibyte. Las primeras codificaciones multibyte tenían una longitud fija, lo que significa que, aunque cada carácter estaba representado por más de un byte, todos los caracteres utilizaban la misma cantidad de bytes ("longitud de palabra"), lo que las hacía adecuadas para la decodificación con una tabla de búsqueda. El grupo final, las codificaciones de ancho variable, es un subconjunto de las codificaciones multibyte. Estas utilizan una lógica de codificación y decodificación más compleja para representar de manera eficiente conjuntos de caracteres grandes, manteniendo al mismo tiempo las representaciones de los caracteres más utilizados más cortas o manteniendo las propiedades de compatibilidad con versiones anteriores. Este grupo incluye UTF-8 , una codificación del conjunto de caracteres Unicode ; UTF-8 es la codificación más común de medios de texto en Internet.
Los organismos biológicos contienen material genético que se utiliza para controlar su función y desarrollo. Se trata del ADN , que contiene unidades denominadas genes de los que se deriva el ARN mensajero . Este, a su vez, produce proteínas mediante un código genético en el que una serie de tripletes ( codones ) de cuatro nucleótidos posibles se pueden traducir en uno de los veinte aminoácidos posibles . Una secuencia de codones da como resultado una secuencia correspondiente de aminoácidos que forman una molécula de proteína; un tipo de codón llamado codón de terminación señala el final de la secuencia.
En matemáticas , un código de Gödel fue la base para la demostración del teorema de incompletitud de Gödel . En este caso, la idea era traducir la notación matemática a un número natural (utilizando una numeración de Gödel ).
Existen códigos que utilizan colores, como los semáforos , el código de colores empleado para marcar el valor nominal de las resistencias eléctricas o el de los cubos de basura destinados a tipos específicos de basura (papel, vidrio, orgánica, etc.).
En marketing , los códigos de cupón se pueden utilizar para obtener un descuento financiero o un reembolso al comprar un producto de un minorista (normalmente de Internet).
En entornos militares se utilizan sonidos específicos con la corneta para diferentes usos: para marcar algunos momentos del día, para comandar a la infantería en el campo de batalla, etc.
Los sistemas de comunicación para personas con discapacidad sensorial, como el lenguaje de señas para personas sordas y el braille para personas ciegas, se basan en códigos táctiles o de movimiento.
Las partituras musicales son la forma más común de codificar la música .
Cada juego específico tiene su propio sistema de códigos para registrar las partidas, por ejemplo, la notación del ajedrez .
En la historia de la criptografía , los códigos alguna vez fueron comunes para asegurar la confidencialidad de las comunicaciones, aunque ahora se utilizan en su lugar cifras .
Los códigos secretos destinados a oscurecer los mensajes reales, desde los más serios (principalmente espionaje militar, diplomacia, negocios, etc.) hasta los más triviales (romance, juegos), pueden ser cualquier tipo de codificación imaginativa: flores , cartas de juego, ropa, abanicos, sombreros, melodías, pájaros, etc., en los que el único requisito es el acuerdo previo sobre el significado tanto por parte del emisor como del receptor.
Otros ejemplos de codificación incluyen:
Otros ejemplos de decodificación incluyen:
Los acrónimos y abreviaturas pueden considerarse códigos y, en cierto sentido, todos los idiomas y sistemas de escritura son códigos para el pensamiento humano.
Los códigos de aeropuerto de la Asociación Internacional de Transporte Aéreo son códigos de tres letras que se utilizan para designar aeropuertos y para las etiquetas de equipaje . Los códigos de estación se utilizan de manera similar en los ferrocarriles, pero suelen ser nacionales, por lo que se puede utilizar el mismo código para diferentes estaciones si se encuentran en diferentes países.
En ocasiones, una palabra clave adquiere una existencia independiente (y un significado) mientras que la frase equivalente original se olvida o al menos ya no tiene el significado preciso atribuido a la palabra clave. Por ejemplo, "30" se utilizó ampliamente en el periodismo para significar "fin de la historia", y se ha utilizado en otros contextos para significar "el final". [1] [2]