09.05.2013 Views

Algoritmos y Programación en Pascal

Algoritmos y Programación en Pascal

Algoritmos y Programación en Pascal

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

18.3. Reglas prácticas para hallar el coste de un programa 417<br />

18.3.3 Espacio de memoria empleado<br />

Aunque el cálculo de la complejidad <strong>en</strong> espacio es similar al de la complejidad<br />

<strong>en</strong> tiempo, se rige por leyes distintas, como se com<strong>en</strong>ta <strong>en</strong> este apartado.<br />

En primer lugar, se debe t<strong>en</strong>er <strong>en</strong> cu<strong>en</strong>ta que la traducción del código fu<strong>en</strong>te<br />

a código máquina dep<strong>en</strong>de del compilador y del computador, y que esto ti<strong>en</strong>e<br />

una fuerte repercusión <strong>en</strong> la memoria. En consecu<strong>en</strong>cia, y al igual que se razonó<br />

para la complejidad <strong>en</strong> tiempo, no es recom<strong>en</strong>dable utilizar medidas absolutas<br />

sino relativas, como celdas de memoria (el espacio para almac<strong>en</strong>ar, por ejemplo,<br />

un dato simple: un número o un carácter).<br />

Si llamamos S(n) al espacio relativo de memoria que el algoritmo ha utilizado<br />

al procesar una <strong>en</strong>trada de tamaño n, se defin<strong>en</strong> los conceptos de Smáx(n), Smín(n)<br />

y Smed(n) para la complejidad <strong>en</strong> espacio del peor caso, el mejor caso y caso<br />

medio, de forma análoga a los conceptos respectivos de tiempo.<br />

Con estos conceptos, y considerando, por ejemplo, que cada <strong>en</strong>tero necesita<br />

una celda de memoria, el espacio necesario para la búsqueda secu<strong>en</strong>cial ord<strong>en</strong>ada<br />

es: n celdas para el vector, una celda para el elem<strong>en</strong>to buscado y una celda para<br />

la variable i, es decir,<br />

S(n) = n + 2<br />

tanto <strong>en</strong> el peor caso como <strong>en</strong> mejor caso y <strong>en</strong> el caso medio.<br />

De forma análoga se ve que el algoritmo de búsqueda binaria ti<strong>en</strong>e como<br />

complejidad <strong>en</strong> espacio S(n) = n + 4.<br />

Utilizando esta notación, podemos afirmar que la función Sumatorio del<br />

apartado 18.1 ti<strong>en</strong>e, <strong>en</strong> su versión iterativa, una complejidad <strong>en</strong> espacio S(n) = 3,<br />

debida al espacio ocupado por el parámetro n y las variables locales i y suma.<br />

La complejidad de la versión recursiva es S(n) = n + 1, puesto que cada una de<br />

las tablas de activación ocupa una celda para su parámetro local n.<br />

Para el cálculo de la complejidad <strong>en</strong> espacio es preciso t<strong>en</strong>er <strong>en</strong> cu<strong>en</strong>ta algunos<br />

aspectos relacionados con el manejo de subprogramas:<br />

• La llamada a un subprograma ti<strong>en</strong>e asociado un coste <strong>en</strong> espacio, dado que<br />

se ti<strong>en</strong>e que g<strong>en</strong>erar la tabla de activación (véase el apartado 10.2). Más<br />

concretam<strong>en</strong>te:<br />

– Los parámetros por valor necesitan un espacio igual a su tamaño, al<br />

igual que los objetos (constantes y variables) locales.<br />

– Los parámetros por variable sólo necesitan una cantidad de espacio<br />

unitaria indep<strong>en</strong>di<strong>en</strong>tem<strong>en</strong>te de su tamaño.<br />

• Los algoritmos recursivos necesitan una cantidad de espacio dep<strong>en</strong>di<strong>en</strong>te<br />

de la “profundidad” de la recursión que determina el tamaño de la pila de<br />

tablas de activación (véase el apartado 17.2.3).

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!