En informática, sobrecoste es el exceso de tiempo de computación, memoria, ancho de banda u otros recursos, que son necesarios para realizar una tarea específica. Este sobrecoste puede ser un factor decisivo en el diseño de un software en lo que se refiere a su estructura, corrección de errores e inclusión de nuevas características. Algunos ejemplos del sobrecoste en computación incluyen la llamada a una función, la transferencia de información o el procesamiento de las estructuras de datos.
Diseño de programas
Elección de la implementación
Un ingeniero o programador tiene a su disposición diversos algoritmos, codificaciones, tipos de datos o estructuras de datos, y cada uno tiene características bien diferenciadas. Cuando se vaya a elegir entre alguno de ellos se deberá tener en cuenta su sobrecoste relacionado.
Concesiones
En la ingeniería del software, el sobrecoste puede influenciar la decisión de si se incluirán o no ciertas características en los nuevos productos, o incluso si se arreglarán fallos en ellos. Una característica con un alto sobrecoste podría ser dejada de lado a menos que se tenga un fuerte incentivo financiero para no hacerlo. Aunque los desarrolladores de software conocen los fallos presentes en sus productos, muchas veces arreglarlos no les compensa el esfuerzo debido a su sobrecoste.
Por ejemplo, una estructura de datos implícita o estructura de datos sucinta pueden tener un bajo sobrecoste, pero a expensas de un peor rendimiento (concesión espacio-tiempo).
La complejidad de un programa en tiempo de ejecución
La complejidad de un algoritmo suele estar especificada mediante una cota superior asintótica. No está relacionado con cuánto tiempo necesite su ejecución o cuánta memoria utilice, sino más bien con cómo depende el tamaño del algoritmo con las entradas. El sobrecoste no se tiene en cuenta de forma deliberada en este cálculo, puesto que varía de una máquina a otra, mientras que el tiempo de ejecución mínimo de un algoritmo no depende de ella.
Esto contrasta con la eficiencia algorítmica, que tiene en cuenta todos los tipos de recursos, y es una combinación —aunque no sea algo trivial— de la complejidad y el sobrecoste.
Ejemplos
Programación (tiempo de ejecución y el sobrecoste computacional)
La invocación de una función introduce un pequeño sobrecoste en tiempo de ejecución. Un compilador puede minimizar en algunas ocasiones este sobrecoste al sustituir la llamada a la función por el código de la propia función.
Comunicaciones (sobrecoste de la transferencia de datos)
Enviar una carga útil de información de manera fiable a través de una red de comunicaciones precisa de enviar más información que la propia carga útil. También implica enviar distinta información de control y señalización necesaria para establecer una transmisión fiable de la información en cuestión.
Una versión simplificada de ello es la necesidad de marcar un número para establecer una llamada telefónica antes de que una conversación pueda empezar. Marcar el número y establecer la conexión son un sobrecoste.
Codificación y estructuras de datos (sobrecoste de tamaño)
La codificación de la información y los datos también introducen un sobrecoste. La fecha y la hora "2011-07-12 07:18:47" pueden ser expresados en tiempo de Unix como un entero con signo de 32 bits 1310447927
, utilizando tan solo 4 bytes. Representado con el formato UTF-8 de la ISO 8601 sería la cadena de caracteres 2011-07-12 07:18:47
y la fecha utilizaría 19 bytes, un 375 % más que la representación como entero. Como XML, esta fecha puede ser escrita con un sobrecoste de 218 caracteres.
<?xml Versión="1.0" codificando="UTF-8"?>
<DATETIME qualifier="CHANGEDATE" index="1">
<YEAR>2011</YEAR>
<MONTH>07</MONTH>
<DAY>12</DAY>
<HOUR>07</HOUR>
<MINUTE>18</MINUTE>
<SECOND>47</SECOND>
</DATETIME>
Son 349 bytes en total, partiendo de la codificación UTF-8, por lo que el sobrecoste es de un 8625 % sobre la representación de entero original.