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

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

424 Capítulo 18. Complejidad algorítmica<br />

(g) Ord<strong>en</strong>ación de un array de n compon<strong>en</strong>tes por el método de intercambio<br />

directo:<br />

for i:= 1 to n - 1 do<br />

for j:= n downto i + 1 do<br />

Comparar las compon<strong>en</strong>tes j-1 y j<br />

e intercambiar si es necesario<br />

(h) Producto de dos matrices, una de m × k y otra de k × n.<br />

6. Para el problema de las Torres de Hanoi de tamaño n, calcule su complejidad<br />

exacta <strong>en</strong> tiempo y <strong>en</strong> espacio, así como su ord<strong>en</strong> de complejidad.<br />

Calcule el tiempo necesario para transferir los 64 discos del problema tal como<br />

se planteó <strong>en</strong> su orig<strong>en</strong>, a razón de un segundo por movimi<strong>en</strong>to. De esta forma,<br />

podrá saber la fecha aproximada del fin del mundo según la ley<strong>en</strong>da.<br />

7. Considerando los problemas sigui<strong>en</strong>tes, esboce algoritmos recursivos para resolverlos<br />

e indique su complejidad:<br />

(a) Cálculo del coci<strong>en</strong>te de dos <strong>en</strong>teros positivos, donde la relación de recurr<strong>en</strong>cia<br />

(<strong>en</strong> su caso) es la sigui<strong>en</strong>te:<br />

Coc(divid<strong>en</strong>do, divisor) = 1 + Coc(divid<strong>en</strong>do - divisor,<br />

divisor)<br />

(b) Cálculo del máximo elem<strong>en</strong>to de un array; así, si es unitario, el resultado es<br />

su único elem<strong>en</strong>to; si no, se halla (recursivam<strong>en</strong>te) el máximo de su mitad<br />

izquierda, luego el de su mitad derecha del mismo modo y luego se elige el<br />

mayor de estos dos números.<br />

(c) Cálculo de n<br />

i=1 i+1<br />

i!<br />

, usando la relación de recurr<strong>en</strong>cia sigui<strong>en</strong>te, <strong>en</strong> su caso:<br />

n<br />

i=1<br />

(d) Cálculo de los coefici<strong>en</strong>tes binomiales<br />

versiones:<br />

i. Iterativa, mediante el cálculo de<br />

<br />

n−1<br />

an = an + an<br />

i=1<br />

n<br />

k<br />

m!<br />

n!(m−n)! .<br />

<br />

, distingui<strong>en</strong>do las sigui<strong>en</strong>tes<br />

ii. Iterativa, mediante el cálculo de m(m−1)...(n+1)<br />

(m−n)! .<br />

iii. Recursiva, mediante la relación de recurr<strong>en</strong>cia conocida.<br />

(e) Evaluación de un polinomio, conocido el valor de la variable x, <strong>en</strong> los sigui<strong>en</strong>tes<br />

casos:<br />

i. La lista de los coefici<strong>en</strong>tes vi<strong>en</strong>e dada <strong>en</strong> un array, y se aplica la fórmula<br />

<br />

i coefix i .<br />

ii. Los coefici<strong>en</strong>tes están <strong>en</strong> una lista <strong>en</strong>lazada, y usamos la regla de Horner<br />

(véase el apartado 17.1.4).<br />

(f) Ord<strong>en</strong>ación de un array de n compon<strong>en</strong>tes por el método de mezcla:

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

Saved successfully!

Ooh no, something went wrong!