Desplázate para cambiar de página
Computer Science Principles · AP Computer Science Principles
bits, compresión e información
Todo lo que guarda una computadora, un número, un nombre, una foto, una canción, es en el fondo un patrón de bits.
Un bit (abreviatura de dígito binario) es 0 o 1. Los dispositivos de cómputo representan los datos de forma digital: los componentes de más bajo nivel de cualquier valor son bits.
La figura cuenta en binario. Cada cuadro es un bit, el lado de papel para el 0 y el lado rojo para el 1, bajo su valor posicional, 128, 64, 32, 16, 8, 4, 2, 1. Cada paso suma 1: el bit de más a la derecha cambia y, donde un 1 pasa a 0, el acarreo se propaga un lugar a la izquierda, como cuando 00000111 (7) se convierte en 00001000 (8).
Los programas guardan valores de datos en variables, en listas de elementos o como constantes independientes, los pasan como entrada a los procedimientos y los reciben de vuelta como salida. Sea cual sea la forma, los valores se guardan como bits, y los programas los traducen a una forma que las personas pueden leer.
Este capítulo es la Gran Idea 2 de AP Computer Science Principles, Datos, el 17–22% del examen de opción múltiple: números binarios (2.1), compresión de datos (2.2), extracción de información de los datos (2.3) y uso de programas con datos (2.4).
bits agrupados en abstracciones
Un byte son 8 bits. Por sí solo, un byte no significa nada: su significado depende de lo que el programa que lo lee entienda que es.
La abstracción es el proceso de reducir la complejidad concentrándose en la idea principal. Al ocultar los detalles irrelevantes para la pregunta en cuestión y reunir los detalles relacionados y útiles, la abstracción te permite pensar en la idea en lugar de en los bits.
Los bits se agrupan para representar abstracciones, entre ellas (pero no solo) números, caracteres y color. La figura lee un byte, 01000001, de tres maneras:
| leído como | significa |
|---|---|
| un número binario | 65 |
| un carácter (código ASCII y Unicode 65) | la letra A |
| el brillo de un píxel, de 0 (negro) a 255 (blanco) | un gris oscuro |
Así, la misma secuencia de bits puede representar distintos tipos de datos en distintos contextos. Una imagen a color suele guardar tres de estos números por píxel, uno para el rojo, otro para el verde y otro para el azul: 3 bytes, 24 bits.
valores posicionales, numerados desde 0 a la derecha
Las bases numéricas, incluidas la binaria y la decimal, se usan para representar datos. El sistema decimal (base 10) usa solo los dígitos 0–9; el binario (base 2) usa solo 0 y 1.
Igual que en decimal, la posición de un dígito determina su valor: el valor numérico es el dígito por el valor posicional de su posición. El valor posicional es la base elevada a la potencia de la posición, y las posiciones se numeran desde 0 en el extremo derecho, aumentando de 1 en 1 hacia la izquierda. En decimal, 305 = 3 × 102 + 0 × 101 + 5 × 100.
En binario cada lugar vale el doble que el de su derecha. Para 10110101:
| posición | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
|---|---|---|---|---|---|---|---|---|
| valor posicional | 27 = 128 | 26 = 64 | 25 = 32 | 24 = 16 | 23 = 8 | 22 = 4 | 21 = 2 | 20 = 1 |
| bit | 1 | 0 | 1 | 1 | 0 | 1 | 0 | 1 |
Suma los valores posicionales donde el bit es 1: 128 + 32 + 16 + 4 + 1 = 181. Un bit 0 no suma nada. La figura se lee de izquierda a derecha; cada 1 deja caer su valor posicional en la suma.
toma el mayor valor posicional que quepa
Para escribir un número entero positivo en binario, trabaja desde el mayor valor posicional hacia abajo: donde el valor posicional cabe en lo que queda, escribe 1 y réstalo; donde no cabe, escribe 0.
Para 100 con ocho bits:
| valor posicional | restante | ¿cabe? | bit | queda después |
|---|---|---|---|---|
| 128 | 100 | no | 0 | 100 |
| 64 | 100 | yes | 1 | 36 |
| 32 | 36 | yes | 1 | 4 |
| 16 | 4 | no | 0 | 4 |
| 8 | 4 | no | 0 | 4 |
| 4 | 4 | yes | 1 | 0 |
| 2 | 0 | no | 0 | 0 |
| 1 | 0 | no | 0 | 0 |
Así, 100 = 01100100: 64 + 32 + 4 = 100. Los ceros a la izquierda no cambian nada, así que 01100100 y 1100100 son el mismo número.
Un segundo método: divide entre 2 una y otra vez, y lee los residuos del último al primero. 100 ÷ 2 = 50 r 0; 50 ÷ 2 = 25 r 0; 25 ÷ 2 = 12 r 1; 12 ÷ 2 = 6 r 0; 6 ÷ 2 = 3 r 0; 3 ÷ 2 = 1 r 1; 1 ÷ 2 = 0 r 1. Leído hacia arriba: 1100100.
En la figura, la barra azul es lo que queda de 100; cada 1 desprende su valor posicional de la barra y vuelve rojo su cuadro.
y comparación de números binarios
Un bit tiene 2 patrones. Cada bit extra duplica la cantidad: cada patrón anterior una vez con un 0 al frente y otra con un 1. Así, n bits tienen 2n patrones.
La figura los construye: 1 bit, 2; 2 bits, 4; 3 bits, 8; 4 bits, 16. Un byte tiene 28 = 256 patrones, los números enteros de 0 a 255. El mayor número de n bits es todo 1: 2n − 1.
¿Cuántos bits hacen falta para darle a cada una de 26 letras su propio patrón? 24 = 16 es muy poco; 25 = 32 alcanza: 5 bits.
Comparar y ordenar. Da a ambos números la misma cantidad de bits (rellena con ceros a la izquierda) y revisa desde la izquierda. La primera posición donde difieren decide: el número que tiene el 1 ahí es el mayor, porque ese único valor posicional vale más que todos los lugares a su derecha juntos (2p > 2p − 1).
01101100 y 01011111 difieren por primera vez en la posición 5, el lugar de los 32, donde el primero tiene el 1: 108 > 95, sean cuales sean los bits que siguen.
desbordamiento y error de redondeo
En muchos lenguajes de programación, los enteros se representan con una cantidad fija de bits. Eso limita el rango de valores enteros y las operaciones que se hacen con ellos, y puede causar desbordamiento u otros errores.
El contador de la figura (hipotético) tiene 4 bits: guarda de 0 a 15. Sumar 1 a 15 (1111) necesita un quinto bit; el acarreo no tiene a dónde ir y el contador muestra 0. Eso es un desbordamiento.
Otros lenguajes ofrecen una abstracción en la que el tamaño de los enteros está limitado solo por el tamaño de la memoria de la computadora. El lenguaje de la hoja de referencia del examen es uno de ellos: sus enteros no se desbordan.
Los números reales (con parte fraccionaria) también se guardan en una cantidad fija de bits, lo que limita su rango y las operaciones con ellos y puede causar error de redondeo y otros errores: algunos números reales se guardan solo como aproximaciones. Con 3 bits de fracción (la figura, hipotética) solo existen múltiplos de 1/8 = 0.125; 0.1 se guarda como 0.125, con una diferencia de 0.025.
Los lenguajes reales usan muchos más bits, así que el error es mucho menor pero no desaparece: en muchos de ellos 0.1 + 0.2 da como resultado 0.30000000000000004. Los límites de rango específicos de los números reales están fuera del alcance del curso y del examen.
una aproximación digital
Los datos analógicos tienen valores que cambian de forma continua en el tiempo, y no en intervalos discretos: el tono y el volumen de la música, los colores de una pintura, la posición de un velocista durante una carrera.
Una computadora guarda bits, así que solo puede aproximar los datos analógicos. Usar datos digitales para aproximar datos analógicos del mundo real es un ejemplo de abstracción.
Los datos analógicos se pueden aproximar bien de forma digital mediante el muestreo: medir los valores de la señal analógica a intervalos regulares, llamados muestras. Cada muestra se mide para determinar los bits exactos que se necesitan para guardarla.
La figura muestrea dos veces la misma señal suave. Primero 8 muestras, cada una redondeada a uno de 4 niveles (2 bits): 8 × 2 = 16 bits, una escalera burda. Luego 16 muestras con 8 niveles (3 bits): 16 × 3 = 48 bits, y la escalera se ajusta más a la curva (su distancia promedio a la señal baja 43%).
Más muestras y más bits por muestra dan una aproximación más cercana, y cuestan más bits para guardarla o enviarla. Ninguna cantidad finita de muestras la hace exacta.
más pequeño, y de regreso exactamente
La compresión de datos puede reducir el tamaño (la cantidad de bits) de los datos transmitidos o guardados. Un algoritmo sin pérdida suele poder reducirlo garantizando la reconstrucción completa de los datos originales.
La fila de la figura tiene 20 píxeles, un byte cada uno: 20 bytes (hipotético). La codificación por longitud de repetición guarda cada serie de un mismo color como una cuenta y un color: 7W 4R 6W 3B, 4 series × 2 bytes = 8 bytes.
Al decodificar se escribe 7 white, 4 red, 6 white, 3 blue: exactamente la fila original, píxel por píxel. No se perdió nada, así que menos bits no significa necesariamente menos información.
La reducción de tamaño depende tanto de la cantidad de redundancia de los datos originales como del algoritmo de compresión aplicado. Las series largas se comprimen bien. Una fila que alterna de color en cada píxel (WRWRWR…) tiene 20 series de 1: codificada, ocupa 40 bytes, más de los 20 con que empezó.
aún más pequeño, pero solo una aproximación
Un algoritmo con pérdida puede reducir de forma significativa la cantidad de bits guardados o enviados, pero permite reconstruir solo una aproximación del original.
Los 16 píxeles de la figura (brillos hipotéticos, un byte cada uno) conservan solo el promedio de cada par: 8 bytes, la mitad del tamaño. Al decodificar, cada píxel recibe el promedio de su par: 14 de los 16 regresan distintos, con una diferencia de hasta 10. Los fantasmas grises son los originales, y nada de los 8 bytes puede recuperarlos: los pares 200, 180 y 190, 190 tienen ambos promedio 190.
Los algoritmos con pérdida suelen reducir la cantidad de bits más que los que no tienen pérdida. Cuál elegir depende de la situación:
| lo que más importa | lo que se suele elegir |
|---|---|
| la calidad, o poder reconstruir el original exactamente (un archivo de programa, un documento de texto) | sin pérdida |
| minimizar el tamaño de los datos o el tiempo de transmisión (video en streaming con una conexión lenta) | con pérdida |
patrones, y lo que no demuestran
La información es el conjunto de hechos y patrones extraídos de los datos. Los datos ofrecen oportunidades para identificar tendencias, establecer conexiones y abordar problemas.
La figura grafica 24 días hipotéticos en un pueblo de playa: helados vendidos contra casos de quemaduras de sol. Cuando uno sube, el otro también: una correlación fuerte (el coeficiente de correlación r = 0.86; 1 sería una recta perfecta).
El helado no causa quemaduras de sol. Colorea los días según la temperatura y aparece la razón: los 7 días calurosos (rojos, 27 °C o más) traen más helados y más sol. Una correlación encontrada en los datos no indica necesariamente que exista una relación causal; se necesita más investigación para entender la naturaleza exacta de la relación.
Aquí los registros de ventas por sí solos no podían mostrarlo. A menudo una sola fuente no contiene los datos necesarios para sacar una conclusión, y hay que combinar datos de varias fuentes (ventas, visitas a la clínica, registros del clima).
datos sobre los datos
Los metadatos son datos sobre los datos. La foto son los datos; sus metadatos pueden incluir la fecha en que se creó, el tamaño del archivo, sus dimensiones y sus etiquetas.
Los cambios y eliminaciones hechos a los metadatos no cambian los datos primarios. En la figura se elimina la etiqueta “atardecer”; ninguno de los 64 píxeles cambia.
Los metadatos se usan para encontrar, organizar y administrar la información: una biblioteca de fotos puede listar todas las fotos con fecha 14 de junio, o todas las etiquetadas “playa”, sin mirar un solo píxel. Los metadatos aumentan el uso eficaz de los datos al aportar información adicional, y permiten estructurar y organizar los datos.
En el examen, un escenario da los datos y metadatos recopilados y pregunta qué se puede averiguar. Pregúntate qué registra cada campo. Una biblioteca con solo fechas y etiquetas puede responder “¿cuántas fotos se tomaron en junio?” pero no “¿dónde se tomó esta foto?”: ningún campo registra un lugar.
uniformes, sin cambiar el significado
Los conjuntos de datos plantean retos sin importar su tamaño: la necesidad de limpiar los datos, los datos incompletos, los datos no válidos y la necesidad de combinar fuentes de datos. La capacidad de procesar datos depende de las capacidades de los usuarios y de sus herramientas.
Según cómo se hayan recopilado, los datos pueden no ser uniformes. Cuando los usuarios escriben en un campo abierto, la forma de abreviar, escribir o poner mayúsculas varía de un usuario a otro. El formulario de registro de la figura (hipotético) tiene 7 escrituras distintas de 2 ciudades.
La limpieza hace uniformes los datos sin cambiar su significado, reemplazando todas las abreviaturas, escrituras y usos de mayúsculas equivalentes por la misma palabra: se reescriben 5 entradas, y 7 escrituras se vuelven 2. Ahora un programa que cuente registros por ciudad cuenta correctamente.
La limpieza no puede inventar lo que falta. Una fila no tiene edad (incompleta) y otra indica −4 (no válida); se marcan, para revisarlas o dejarlas fuera del análisis, no para adivinarlas.
más datos no son mejores datos
Los problemas de sesgo suelen originarse por el tipo o la fuente de los datos que se recopilan. El sesgo no se elimina simplemente recopilando más datos.
La encuesta de la figura (hipotética) solo llega al lado izquierdo de la población, digamos a los lectores de un sitio web. En toda la población 41% tienen la opinión roja. Después de 30 respuestas la encuesta dice 80%; después de 60, 78%. El doble de respuestas, la misma imagen equivocada, porque todas las respuestas vienen de la misma fuente no representativa.
El tamaño sí importa: el tamaño de un conjunto de datos afecta la cantidad de información que se puede extraer de él. Pero los conjuntos de datos grandes son difíciles de procesar con una sola computadora y pueden requerir sistemas paralelos, muchos procesadores trabajando a la vez en partes de los datos.
La escalabilidad de los sistemas es una consideración importante al trabajar con conjuntos de datos, ya que la capacidad de cómputo de un sistema afecta cómo se pueden procesar y almacenar los conjuntos de datos.
programas que procesan listas
Los programas se pueden usar para procesar datos y obtener información. Las herramientas de búsqueda son útiles para encontrar información de forma eficiente, y los sistemas de filtrado de datos son herramientas importantes para encontrar información y reconocer patrones en los datos.
El filtrado conserva solo los elementos que cumplen una condición, como conservar solo los números positivos de una lista, o solo los estudiantes que se inscribieron en la banda:
data ← [4, -2, 7, 0, -5, 3] positives ← [] FOR EACH n IN data { IF(n > 0) { APPEND(positives, n) } } La figura lo ejecuta con la línea en curso en rojo. Se prueba cada n; solo las que cumplen n > 0 se agregan. positives termina como [4, 7, 3]; el 0 no se conserva, porque 0 > 0 es falso.
La transformación cambia cada elemento, como duplicar cada elemento de una lista, o agregar el correo del padre o la madre a cada registro de estudiante. Con doubled ← [] primero:
FOR EACH n IN data { APPEND(doubled, 2 * n) } doubled termina como [8, −4, 14, 0, −10, 6]. Se puede obtener conocimiento al traducir y transformar datos, y pueden surgir patrones cuando los datos se transforman con programas. Los programadores también usan programas para filtrar y limpiar datos.
un número a partir de muchos, y una gráfica
Combinar o comparar datos reduce muchos valores a una respuesta: sumar una lista de números, o encontrar al estudiante con el promedio más alto. Visualizar muestra un conjunto de datos como una gráfica, un diagrama u otra representación visual.
Un club registra las inscripciones de 6 semanas (hipotético): signups ← [12, 18, 9, 22, 15, 20].
total ← 0 most ← signups[1] FOR EACH n IN signups { total ← total + n IF(n > most) { most ← n } } DISPLAY(total) DISPLAY(most) Muestra 96 22: 6 semanas, 96 inscripciones en total, 22 en la mejor semana. most empieza en signups[1], el primer valor, no en 0, así que seguiría funcionando aunque todos los valores fueran negativos. Mientras se ejecuta, la figura dibuja cada semana como una barra: la gráfica se forma conforme se leen los datos.
Tablas, diagramas, texto y otras herramientas visuales sirven para comunicar el conocimiento obtenido de los datos. Programas como las hojas de cálculo ayudan a organizar la información y a encontrar tendencias en ella de forma eficiente.
Los programas se usan de manera iterativa e interactiva: ves la gráfica, haces una nueva pregunta, filtras o transformas de nuevo. Combinar fuentes de datos, agrupar datos (juntar elementos similares) y clasificar datos (ordenar elementos en categorías) son parte de usar programas para obtener conocimiento a partir de los datos.