Representaciones Alternas de un Rectángulo

Los otros días, mientras estudiaba cómo programar en el lenguaje de programación C, pensé acerca cómo es que nosotros abstraemos el mundo observable al mundo binario.  Las computadoras no entienden (por defecto) lo que nosotros entendemos con facilidad.  Si lo entienden, es porque nosotros las instruimos; les decimos qué tienen que saber.

Precisamente, medité acerca de ese proceso: cómo nosotros le decimos a las computadoras que un rectángulo es un rectángulo.  Nosotros les decimos a las computadoras que un rectángulo es un rectángulo porque lo tratamos como un objeto funcional.  Cuando vamos a los lenguajes de programación, usualmente (y como base de comparación me estoy utilizando como la norma) buscamos la manera mas simple, matemáticamente elegante y correcta para representar las cosas.  Para el rectángulo, por ejemplo, yo lo representaría como dos coordenadas.

Mi rectángulo

Si escojo dos coordenadas diagonalmente opuestas y las coloco sobre un plano de coordenadas en dos dimensiones, puedo representar un rectángulo.  Simplemente camino pasos ortogonales desde una coordenada hasta llegar al valor de la abscisa y la ordenada de la coordenada opuesta.

Hablemos entonces de utilizar ésta representación del rectángulo en un programa.  Asumamos que el programa en cuestión compara dos rectángulos para determinar cuál tiene mayor área.  Para poder utilizar mi rectángulo, el programa tendría que calcular el largo y el ancho del mismo.  Si el programa compara 100 veces, se calcularía el largo y el ancho 100 veces, resultando en 200 operaciones.  Seguramente, querido lector o lectora, estamos de acuerdo que mi intención es bella: yo necesito solo cuatro valores para representar un rectángulo.  Pero a la hora de utilizar mi representación en el programa, la belleza de mi intención no compensa por la computación excesiva que estamos realizando.  Realmente, esto es lo que se conoce como un “trade-off”, una decisión de diseño que prefiere un aspecto sobre otro.  En éste caso, yo prefiero usar menos memoria, pero estoy dispuesto a aguantar que mi computadora calcule los valores que necesito 100 veces.

Pensé en una representación alterna del rectángulo: una coordenada, el largo y el ancho.  Son cuatro valores, igual que la representación previa.  La solución quizás sea mas grande en memoria por que el largo y el ancho quizás son bastante grandes numéricamente.  Pero si necesito el largo y el ancho para comparar, ya lo tengo.  No gasto en poder computacional, y logro el mismo objetivo.  Piénsalo: ¿Qué es mas caro?  ¿Mas memoria de disco o más poder computacional?

La cosa es que, la segunda solución (la cual yo pienso más eficiente para el problema que tengo) no es mi primer pensamiento al intentar de representar el rectángulo.  La lección entonces (creo) es que lo elegante no siempre es lo más adecuado.  O quizás no tiene lección.  El punto es que tengo que seguir estudiando de C.